在角度2我有2个父组件需要发出和听,但我的代码不起作用

时间:2016-11-10 19:06:43

标签: angular

在角度2中,我有2个父组件需要发出和收听,但我的代码无法正常工作

我基本上有一个父组件需要对另一个父组件进行广播,以便该组件可以自行更新。

这是我发布的组件:

  @Output() userUpdated = new EventEmitter();

  userUpdated = "userUpdated($event)";

  userUpdated.emit("test");

这是我的另一个父组件,它正在侦听emit:

  userUpdated(item) {
    this.getAllUnReadMessages();
  }

结果是很多控制台错误。

  

我试图遵循这个:http://learnangular2.com/outputs/

但问题是他们希望我将发射器支付给我在这种情况下无法做的组件。

我只需要对另一个组件进行基本发射或广播。 它变得很简单。

我只是为父子对子组件工作。

但我现在需要它为父母工作。

1 个答案:

答案 0 :(得分:3)

好的,这里是plunker:http://plnkr.co/edit/qMnXG7oxF3SdTptKHUen?p=preview

在stackoverflow上有很多关于这个问题的答案,你是不是第一次发布这个问题..

您将首先为您的应用制作共享服务

import {Subject} from 'rxjs/Subject';

@Injectable()
export class MyService {

    public invokeEvent:Subject<any> = new Subject();

    constructor() {}
}

然后在您的模块中提供它,以便组件将共享此组件的相同实例(单例)

@NgModule({
  imports: [ BrowserModule ],
  providers: [MyService]
  declarations: [ App, AnotherApp ],
  bootstrap: [ App ]
})
export class AppModule {}

从这一点开始,关于组件中Subject的使用情况。

如果您要发出活动,请使用next

进行调用
this._myService.invokeEvent.next(this.counter++);

并接收/收听,只需订阅:

this._myService.invokeEvent.subscribe((value) => {
           console.log(value); 
           this.name = value;
         });