0
以下のソリューションは、角度ルータでは機能しません。メソッドを呼び出すと、サービスメソッドが正常に呼び出されていますが、親ieEmployerコンポーネント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 –
「」を含むコンポーネントでサービスを提供する必要があります。このコンポーネントの祖先か '@NgModule()'です。私が前に投稿したリンクは、かなり類似した例を示しています。ちょうどその子コンポーネントがルータによって追加されていないということです。 –
'ListReloadService'は' HomeComponent'か 'AppComponent'か' @ NgModule'で提供されるべきです。 –