0

我想在Angular2上溝通組件,並發現使用輸出裝飾器是我最好的方法,所以我遵循了文檔的指南,並做了完全相同的步驟。雖然當我嘗試登錄控制檯時,我從子節點收到的是一個Event對象,而不是它應該是的字符串。這個EventEmitter爲什麼會返回一個事件而不是一個字符串?

這是子組件發出的事件(TreeView控件組件):

@Component ({ 
    selector: 'tree-view', 
    template: ` 
    <ul> 
    <li *ngFor="let node of treeData | derp"> 
     <input type="checkbox" name="isActive" *ngIf="node._name?.length > 0" (click)="choose(node)"> 
    [...] 
     </li> 
    </ul> 
    ` 
}) 

export class TreeView implements OnInit { 
    @Output() onChosen = new EventEmitter<string>(); 

    choose(feature: string) { 
    this.onChosen.emit(feature); 
    } 
} 

這是接收它的父組件:

<tree-view (change)=onChosen($event) [treeData]=myTree></tree-view> 

這是被稱爲在回調包含以上模板的父組件:

onChosen(feature: string) { 
    console.log(feature); 
    } 

我該幹什麼克錯了?

回答

0

你似乎調用錯誤事件:

對孩子的事件應該是不是「點擊」,因爲它是一個複選框「變」:

<input type="checkbox" name="isActive" *ngIf="node._name?.length > 0" (change)="choose(node)">  

父事件應該是'onChosen'而不是'change'。

<tree-view (onChosen)=onChosen($event) [treeData]=myTree></tree-view> 
+0

我認爲是這樣,我試過了,但是當它發生時,事件永遠不會被觸發,也沒有任何事情記錄到控制檯。 –

+0

編輯我的文章。 – Lionel

+0

它仍然不起作用。當我點擊複選框時沒有任何反應。 –

相關問題