2017-04-03 140 views
1

我有樹視圖有兒童複選框的問題。所以,問題是我從事件發射器獲取嵌套的東西。請參閱截圖和代碼。Angular2樹複選框與EventEmitter

這是我的自定義組件,我有遞歸,我只想傳遞選定的子項或父項。

組件

import { Component, Input, EventEmitter, Output } from '@angular/core'; 

@Component ({ 
    selector: 'category-tree-view', 
    template: ` 
    <ul class="tree"> 
     <li *ngFor="let category of treeData"> 
      <label class="control control--checkbox" *ngIf="hasCheckbox"> 
       <input type="checkbox" [checked]="category.checked" (change)="selectedCategory(category, $event)" /> 
       <div class="control__indicator"></div> 
      </label> 
      <span *ngIf="category.subcategories?.length" (click)="toggleChildren(category)" class="toggle">+</span> 
      {{category.name}} 
      <div class="tree-actions" *ngIf="hasActions"> 
       <button class="btn btn-link edit" (click)="editCategory(category)"> 
        <i class="icon-admin-edit"></i> 
       </button> 
       <button class="btn btn-link delete" (click)="deleteCategory(category)"> 
        <i class="icon-admin-close"></i> 
       </button> 
      </div> 
      <category-tree-view [treeData]="category.subcategories" *ngIf="category.visible" (edit)="editCategory($event)" (delete)="deleteCategory($event)" [hasCheckbox]="hasCheckbox" (selected)="selectedCategory($event)" [hasActions]="hasActions"></category-tree-view> 
     </li> 
    </ul> 
    ` 
}) 
export class ProductCategoryTreeView { 
    @Input() treeData: any[]; 
    @Input() hasCheckbox: boolean = false; 
    @Input() hasActions: boolean = false; 
    @Output() edit = new EventEmitter(); 
    @Output() delete = new EventEmitter(); 
    @Output() selected = new EventEmitter(); 

    constructor() {} 

    toggleChildren(node: any) { 
     node.visible = !node.visible; 
    } 

    editCategory(category){ 
     this.edit.emit(category); 
    } 

    deleteCategory(category) { 
     this.delete.emit(category); 
    } 

    selectedCategory(category, event) { 
     this.selected.emit({category, event}); 
    } 
} 

這是我在其它的HTML頁面,這是不同的組件,在這種情況下,產品form.component.html

<category-tree-view [treeData]="categories" (edit)="editCategory($event)" (delete)="deleteCategory($event)" (selected)="selectCategory($event)" [hasCheckbox]="true"></category-tree-view> 

而且我也只是在組件產品的方法form.component.ts

selectCategory(cat, event) { 
    console.log(cat, event); 
} 

以下是我在控制檯登錄該數據時獲得的截圖。

data from console.log

回答

0

可以請你嘗試下面的代碼,並檢查是否正常工作或沒有?

selectedCategory(category, event) { 
    this.selected.emit(event); 
}