Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular2(RxJS)订阅don';不要一按就开火_Javascript_Angular_Rxjs_Observer Pattern - Fatal编程技术网

Javascript Angular2(RxJS)订阅don';不要一按就开火

Javascript Angular2(RxJS)订阅don';不要一按就开火,javascript,angular,rxjs,observer-pattern,Javascript,Angular,Rxjs,Observer Pattern,我想观察一个组件内部的事件,然后激发另一个组件中的不同事件。我在里面有声明服务和这样的代码 private updateIncomingMaterial = new Subject<IncomingMaterial>(); incomingMaterialUpdate$ = this.updateIncomingMaterial.asObservable(); updateIncMaterial(incomingMaterialToUpdate: Incom

我想观察一个组件内部的事件,然后激发另一个组件中的不同事件。我在里面有声明服务和这样的代码

    private updateIncomingMaterial = new Subject<IncomingMaterial>();

    incomingMaterialUpdate$ = this.updateIncomingMaterial.asObservable();

   updateIncMaterial(incomingMaterialToUpdate: IncomingMaterial) {
       this.updateIncomingMaterial.next(incomingMaterialToUpdate);
   }
这是我想在另一个网站上订阅它的方式

    ngAfterViewInit() {
    this.subscription = this.incMatService.incomingMaterialUpdate$.subscribe((model: IncomingMaterial) => {
        this.isUpdateMode = true;
        this.imForm.setValue(model);
    });
}

我不知道为什么当我第一次点击更新按钮时,它从来没有进入订阅的内部(在内部,我指的是this.UpdateMode=true和this.imForm.setValue(model))。

为什么要使用rxjs而不使用角度输出属性?(见:)这两个组件都存在并且在单击时初始化了视图吗?因为其中一个组件是父组件,我不知道在这种情况下输出属性是否工作?视图可能已初始化,因为它是在ngAfterViewInit内部订阅的,但如果我第二次单击它,它将不在订阅的内部。确定我有要使用ReplaySubject而不是Subject,现在它可以正常工作:)
    ngAfterViewInit() {
    this.subscription = this.incMatService.incomingMaterialUpdate$.subscribe((model: IncomingMaterial) => {
        this.isUpdateMode = true;
        this.imForm.setValue(model);
    });
}