2016-02-10 4 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, updateThat методы для каждого двухстороннего ограниченного свойства далеко не хороши, вам не кажется? – user1685095

+0

Фактически, я описал способ определения двусторонней привязки для компонентов. Это работает для всех типов объектов даже примитивных типов. Подход Angular2 заключается в том, чтобы определить четкий «контракт» для компонентов: что они принимают за параметры (ввод) и то, что они могут запускать (выводить). Тем не менее, вы всегда можете указать параметр и работать по ссылке. Это позволяет не определять/обрабатывать 'EventEmitter', но это не работает для примитивных типов ... –

+0

вы можете привести пример« предоставить параметр и работать по ссылке »? Кроме того, я изменил свой код и реализовал двустороннюю привязку через Input и Output, как вы предложили. Теперь, когда я вижу изменения сущности в рекурсивном элементе, я не вижу их в AppComponent – user1685095

Смежные вопросы