0
以下解决方案不适用于angular router.when当我调用方法时,它正在成功调用服务方法,但父节点egEmployer组件somethingChangedHandler()未得到执行。使用路由器插座的angular2组件通信
@Component({
selector: 'w2',
templateUrl: '../../html/views/w2old.html',
providers:[ListReloadService]
})
export class W2Component implements OnInit {
constructor(private _httpService:HttpService,
private _router : Router,
private _activatedRoute :ActivatedRoute,
private _listReloadService:ListReloadService){
}
submitW2()
{
this._listReloadService.emitEvent(false);
//calling parent somethingChangedHandler()
}
}
**MySevice**
@Injectable()
export class ListReloadService {
@Output()
public somethingChanged: EventEmitter<boolean>;
constructor(private _http: Http){
this.somethingChanged = new EventEmitter();
}
public emitEvent(val: boolean){
console.log("hello");
this.somethingChanged.emit(val);
}
}
**parent component**
@Component({
selector: 'employerhome',
templateUrl: '../../html/views/employerhome.html',
providers:[ListReloadService]
})
export class EmployerHomeComponent
{
constructor(private httpService:HttpService, private listReloadService : ListReloadService){
this.listReloadService.somethingChanged
.subscribe(data=>this.somethingChangedHandler(data));
}
private somethingChangedHandler(someVal)
{
console.log("hello hi");
}
}
https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-service –
您需要在包含''的组件上提供服务,这个组件的祖先或'@NMModule()'。我之前发布的链接显示了一个非常相似的例子,只是子组件不是由路由器添加的。 –
应在'HomeComponent'或'AppComponent'或'@ NgModule'中提供'ListReloadService',具体取决于哪个组件应该参与通信。 –