2016-02-09 2 views
0

Что такое угловой 2 эквивалент $scope.watch?

Я использую $scope.watch для наблюдения за изменениями объектов из внешней службы, которые используются в моем контроллере.

Я знаю, что $scope больше не применяется, но как настроить функцию часов?

ответ

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 вы можете подписаться в службах уведомлять вне компонента.

+0

благодарит за ответ. Я пробовал ваш подход, и это не сработало. Я отправил код, который использовал в своем ответе выше. Не могли бы вы сообщить мне, что я делаю неправильно? – nearpoint

+0

Добро пожаловать! Где код, который вы опубликовали? Я не вижу этого ... –

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 
     } 
    } 

} 
Смежные вопросы