什么是$ scope.watch的Angular 2等价物?

时间:2016-02-09 16:08:52

标签: angular

Angular 2等效于$scope.watch

我使用$scope.watch来观察控制器中使用的外部服务对象的更改。

我知道$scope不再适用,但如何设置监视功能?

2 个答案:

答案 0 :(得分:2)

如果有任何绑定发生更改,您可以使用ngOnChanges方法通知:

@Component({
  selector: 'my-cmp',
  template: `<p>myProp = {{myProp}}</p>`
})
class MyComponent implements OnChanges {
  @Input() myProp: any;
  ngOnChanges(changes: {[propName: string]: SimpleChange}) {
    console.log('ngOnChanges - myProp = ' +     
          changes['myProp'].currentValue);
  }
}

但这取决于您的用例,因为您也可以利用(例如)表单控件进行通知:

@Component({
  selector: 'four',
  directives: [MyDirective],
  template: `
    Hello, this is working! <br>
    <textarea mydir [(ngModel)]="pp.status" [ngFormControl]="myCtrl">  
    </textarea>
  `,
})
export class Four {
  @Input() pp;

  constructor() {
    this.myCtrl = new Control();
    this.myCtrl.valueChanges.subscribe(
      (data) => {
        console.log('Model change');
      });
  }
}

您还可以利用您可以在服务中订阅的自定义EventEmitter来通知组件外部。

答案 1 :(得分:1)

您可以使用rx.js函数Observable.of(something)

import {Observable} from "rxjs/Rx";

class Example {
    public test;
    public watchTest;
    constructor(){
       this.setWatch()
       this.seeWatch()
    }
    setWatch() {
       this.watchTest = Observable.of(this.test);
    }
    seeWatch() {
       this.watchTest.subscribe(data => {
          data //this.test value
       }
    }

}