2017-03-03 97 views
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"); 
     } 
    } 
+1

https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-service –

+0

您需要在包含''的组件上提供服务,这个组件的祖先或'@NMModule()'。我之前发布的链接显示了一个非常相似的例子,只是子组件不是由路由器添加的。 –

+0

应在'HomeComponent'或'AppComponent'或'@ NgModule'中提供'ListReloadService',具体取决于哪个组件应该参与通信。 –

回答

0

创建服务,例如:

import {Injectable} from '@angular/core'; 

@Injectable() 
export class HiService { 

    sayHi() { 
     console.log("Hi!") 
    } 

}

注入在你AppComponent:

... 
providers: [HiService] 
... 

用它在你的组件:

constructor(private hi: HiService) { 
    console.log("constructor") 
} 
ngOnInit(): void { 
    this.hi.sayHi() 
}