2016-11-21 1 views
0

내가 구성 요소를 가지고,라고한다.컴포넌트 메소드에서 관찰 만들고, 그는 다음과 같습니다 이벤트 핸들러

클릭, 흐림 등의 "기본"DOM 이벤트에 대한 처리기가 있다면 Observable.fromEvent을 사용했을 것입니다. 그러나이 경우에는 적용 할 수없는 것 같습니다 관련된 기본 이벤트가 아님). 이 관련된 여러 핸들러가있는 경우 유지 관리가 매우 지루한해야하기 때문에, 더 나은 방법이있을 것 같다

@Component({ 
    template: ` 
    ... 
    <child-component (childEvent)="onChildEvent()"></child-component> 
` 
}) 
export class ParentComponent implements OnInit, OnDestroy { 
    private childEventStream: Observable<void>; 

    // I am not sure, what is the type of this, 
    // seems like an internal RxJS thing 
    private observer: any; 

    onChildEvent() { 
     this.observer.next(); 
    } 

    ngOnInit() { 
     this.childFinishedStream = Observable.create(
      observer => this.observer = observer; 
     ); 
    } 

    ngOnDestroy() { 
     this.observer.completed(); 
    } 
} 

것을 : 마음에 오는

유일한 것은이 같은 것입니다.

답변

0

EventEmitter을 원하지 않으십니까?

는 다음과 같이 생성됩니다

@Component({ 
    template: ` 
     <child-component (finished)="onChildFinished($event)"></child-component> 
    ` 
}) 
export class ParentComponent { 

    onChildFinished(data: number) { 
     //... 
    } 
} 

그리고 하위 구성 요소는 Output를 사용하여.

@Component({ 
    selector: 'child-component', 
    template : `hi` 
}) 
export class ChildComponent { 

    @Output() 
    public finished: EventEmitter<number> = new EventEmitter<number>(); 

    private _imFinishing(): void { 
     finished.emit(1); 
    } 
} 

아마도 귀하의 질문을 이해하지 못하고 있지만 이것이 원하는 것으로 보입니다.

+0

이것이 바로 _child_ 측면에서 수행 된 방법입니다 (그렇지 않은 경우 상위 컨트롤러에서 하위 이벤트를 수신하는 방법은 무엇입니까?) – shylent

+0

아, 이제는 더 잘 이해할 수 있습니다. 당신은 일종의 자식 이벤트가 끝나기를 기다린다. 이것은 angular2 가이드에 대한 것입니다. 데이터가 다운되고, 이벤트가 올라갑니다 .. 서비스를 사용하고 거기에'EventEmitter'를 설정하는 것이 더 낫습니다. 부모 구성 요소가이를 수신하게하고 childComponent가 처리하는 내용을 모두 그대로 두십시오. – PierreDuc

+0

아니요, 죄송합니다. "완료 중"과 아무런 관련이 없습니다. 아마, 나는 그 사건에 대해 나쁜 (암시적인) 이름을 선택했다. 나는 "finish"라는 단어를 생략하는 질문을 편집했다. 그것은 특별한 의미가없는 자식 컨트롤러에 의해 방출되는 이벤트 일뿐입니다. – shylent