2016-02-10 65 views
2

結合,我想創建一個使用自身遞歸基於jsonschema創造各種輸入角度分量親子遞歸雙向的角2.0

你可以看到完整的代碼here

我知道,創建雙向數據綁定我們可以使用ngModel,但我不知道如何在自定義組件中使用它。

回答

2

您還可以利用@Input@Output如下所述:

@Component({ 
    selector: 'custom', 
    template: ` 
    <div> 
     {{value}} - <span (click)="updateValue()">Update</span> 
    </div> 
    ` 
}) 
export class CustomComponent { 
    @Input() 
    value:string; 
    @Output() 
    valueChange:EventEmitter; 

    constructor() { 
    this.valueChange = new EventEmitter(); 
    } 

    updateValue() { 
    this.valueChange.emit('other value'); 
    } 
} 

這樣你綁定到自定義組件的值的情況下將充分利用雙向綁定。當updateValue是所謂的自定義組件,相應的屬性(這裏someProperty)也將被更新父組件:

@Component({ 
    (...) 
    template: ` 
    <custom [(value)]="someProperty"></custom> 
    `, 
    directives: [ CustomComponent ] 
}) 
export class MyComponent { 
    someProperty:string; 

    constructor() { 
    this.someProperty = 'test'; 
    } 
} 

下面是相應的plunkr:https://plnkr.co/edit/ubtMXpGefgybGK4A3Pho?p=preview

+1

我認爲有很多代碼可以做這麼簡單的事情。沒有更好的方法嗎?寫一堆@Output和updateThis,更新每個雙向有界屬性的方法都不是很好,你不覺得嗎? – user1685095

+0

實際上,我描述了爲組件定義雙向綁定的方式。這適用於所有對象類型甚至原始類型。 Angular2的方法是爲組件定義一個明確的「契約」:它們接受什麼作爲參數(輸入)以及它們可以觸發(輸出)什麼。也就是說,你可以隨時提供一個參數和參考工作。這允許不必定義/處理'EventEmitter's,但這對原始類型不起作用... –

+0

您能否提供「提供參數並以參考方式工作」的示例?另外,我已經改變了我的代碼,並按照您的建議通過輸入和輸出實現了雙向綁定。現在,雖然我可以看到遞歸元素中實體的變化,但我無法在AppComponent中看到它們 – user1685095