2017-04-18 3 views
0

다른 구성 요소 (부모) 안에 구성 요소 (하위 구성 요소)가 있습니다. 자식을 호출하는 태그는 router-outlet입니다. 이 상황에서 나는 EventEmitterOutput을 사용할 수 없기 때문에 부모 변수를 변경할 수있는 서비스를 작성했지만 작동하지 않습니다.Angular 2의 서비스를 통한 업데이트가 없음

서비스 :

import {Subject} from 'rxjs/Subject'; 

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

@Injectable() 
export class TabStatusService { 


    private sub=new Subject<boolean>(); 
    dataStatus$ = this.sub.asObservable(); 

    changeStatus(data:boolean){ 

    this.sub.next(data); 
    } 
} 

부모 :

@Component({ 
    ... 
    providers:[TabStatusService] 
}) 


export class SecondarytabsComponent implements OnInit { 


private status:boolean=false; 
    constructor(private tabStatusService: TabStatusService) { 


    ngOnInit() { 


    this.tabStatusService.dataStatus$.subscribe(
     data => { 
     this.status = data; 

     }); 
    } 
} 

템플릿 :

<div> 



    <p>{{status}} </p> 


</div> 
<router-outlet></router-outlet> 

아이 :

@Component({ 
    .... 
    providers:[ConfirmationService, TabStatusService] 
}) 
export class ProceduresComponent implements OnInit { 

    constructor(private confirmationService: ConfirmationService, private tabStatusService:TabStatusService) { 


    } 

    ngOnInit() { 
    } 

    setStatus(value){ 
    this.tabStatusService.changeStatus(value); 
    } 

} 

템플릿 :

<div> 

<button type="button" class="btn btn-primary btn-lg btn-block login-button"(click)="setStatus(true)">Back</button> 

</div> 

어디에서 문제가 발생합니까?

+0

"작동하지 않습니다"는 문제에 대한 설명이 아닙니다. 그게 효과를 내기 위해 무엇을하려 했습니까? –

+0

자식 버튼을 클릭하면 부모의 "status"변수가 false에서 true로 변경됩니다. – dstyle

+0

왜 모든 구성 요소에'공급자 : [TabStatusService]'가 있습니까? – zeroflagL

답변

0

자녀 구성 요소의 providers 메타 속성 필드에서 [TabStatusService]을 제거 감사드립니다.

현재 동일한 서비스의 여러 인스턴스를 만듭니다. 동일한 서비스 인스턴스를 공유하려면 루트 구성 요소 또는 @NgModule을 제공해야합니다.

이렇게하면 예상대로 작동합니다.

+0

감사합니다. 이제 작동합니다! – dstyle

+0

@dstyle ok, 문제가 해결되면 답변을 수락 해주십시오. 감사. – unitario

관련 문제