当Observable / subscrption更改属性时,ngOnChanges不会触发

时间:2016-10-07 08:52:36

标签: angular angular2-services

我在<video src="http://route/to/video.mp4" width="100%" height="auto" controls="" ></video> / Observable完成后尝试做某事。我正在更改subscribe方法中的Input属性,但subscribe( onNext )永远不会触发。

我应该做些什么?

ngOnChanges

2 个答案:

答案 0 :(得分:6)

那是&#34;按照设计&#34;

仅当更改检测更新绑定到ngOnChanges()时,才会调用

@Input()。如果从某个地方强制改变输入,那么它就不会被调用。

只要让names成为每次更新属性时要执行的代码的getter / setter。

答案 1 :(得分:0)

正如Günter所述,根据我的理解,它并不是那么有效......使用Observables时,您可以使用Observable.next()功能手动触发更改。这里的诀窍是你必须从服务中返回Observable - 这可以这样做:

import {Observable, Subject} from "rxjs/Rx"; // remember the '/Rx', it got me...

export class NamesService {
    private initialNames: Array<string> = ["Joe", "Jack", "Pete"];

    get(){
        let names: Subject<Array<string>> = new Subject<Array<string>>();

        names.next(this.initialNames);
        setTimeout(() => {
            this.initialNames.push('someOtherNames');
            names.next(this.initialNames);
        }, 1000);
        return names.asObservable();
    }
}

然后按照您已经完成的方式订阅它,当.next()运行时,它将触发.subscribe()方法的更改。

我建议从get方法中拆分它,你可以拥有自己的onNameUpdate()方法来返回可观察数组 - 或类似的东西。