代码之家  ›  专栏  ›  技术社区  ›  user3118363

如何跟踪Angular4中服务的更改

  •  -2
  • user3118363  · 技术社区  · 6 年前

    请问我如何跟踪/观察服务中的变量或数组,以检测其值是否已更改或是否已添加项目???

    1 回复  |  直到 6 年前
        1
  •  3
  •   user6749601 user6749601    6 年前

    问题是你对“跟踪/观看”的最终期望是什么。 例如,您可以将变量放在Subject或BehaviorSubject中。然后订阅它。每当这个主题发生变化,你都会得到通知。

    这里有一个例子。

    您的服务提供变量“info”,该变量放在BehaviorSubject中。您可以通过getter和setter访问此变量。请注意,getter返回一个可观察值,这对于监视更改很重要。

    import { Observable } from 'rxjs/Rx';
    import { BehaviorSubject } from 'rxjs/BehaviorSubject';
    import { Injectable } from '@angular/core';
    
    @Injectable()
    export class MyService {
      private info = new BehaviorSubject('information');
    
      getInfo(): Observable<string> {
        return this.info.asObservable();
      }
    
      getInfoValue(): string {
        return this.info.getValue();
      }
    
      setInfo(val: string) {
        this.info.next(val);
      }
    }
    

    在您的组件中,您可以执行以下操作

    import { MyService } from 'my.service';
    
    constructor(
        private myService: MyService
    ) { 
    
        /**
         * whenever your variable info inside the service changes
         * this subscription will get an event and immediately call the code
         * inside.
         */
        this.myService.getInfo().subscribe(value => {
            // do something with this value
            console.log('Info got changed to: ', value);
        });
    }
    

    这是监视服务内变量更改的最佳方法。