2017-12-04 1 views
0

EventEmitters를 사용하여 중첩 된 구성 요소 체인을 통해 데이터/이벤트를 전달하려고합니다. 그러나 나는 하나의 문제를 해결하는 방법이 이것을 막을 수 있다고 생각한다.포함 된보기의 이벤트를 각도로 구독 할 수 있습니까?

구성 요소 중 하나에 포함 된 뷰를 생성하므로 테이블 구조가 엉망이되지 않습니다. 해당 구성 요소에 대한 관련 코드는 다음과 같습니다.

@ContentChild(DataTableAddRecordComponent) adder: DataTableAddRecordComponent; 
@ViewChild('dtAdder', { read: ViewContainerRef }) adderContainer: ViewContainerRef; 

ngAfterContentInit(): void { 
    if (this.adder && this.adderContainer) { 
     this.adderContainer.createEmbeddedView(this.adder.templateRef); 
    } 

    } 

여기에는 동일한 구성 요소에 대한 일부 HTML이 나와 있습니다. 이벤트를 구독하려고하는 것이 실제 구성 요소가 아닌 컨테이너에 어떻게 적용되는지 주목하십시오. 다시 이것은 <data-table-adder> 태그가 내 테이블을 망쳐 놓지 않도록하기 위해서입니다. 그러나 템플릿에없는 경우 해당 구성 요소의 이벤트를 어떻게 잡을 수 있습니까 (아니면 내가 누락 된 다른 것이 있습니까?).

+0

무엇이'this.adder.templateRef'입니까? –

+0

위의 코드를 자세히 살펴보면 가산기가 contentchild로 선언 된 구성 요소임을 알 수 있습니다. TemplateRef는 이러한 내장 된 뷰를 생성하기 위해 구성 요소의 속성 (뷰 템플릿에 대한 참조)입니다. https://angular.io/api/core/TemplateRef – 333Matt

답변

0

이것은 쉽게 알 수 있습니다. 구성 요소에 대한 참조가 있으며 프로그래밍 된 방식으로 방출 된 이벤트에 등록 할 수 있습니다.

if (this.adder && this.adderContainer) { 
    this.adderContainer.createEmbeddedView(this.adder.templateRef); 
    this.adder.added.subscribe(data => 
    this.add.emit(data)); 
} 
관련 문제