двупосочно обвързване на данни в angular2 от родителски компонент към дъщерен компонент

Предавам предмет от родител на дете. В детето правя промени в този обект. Сега, когато правя промяна в този обект в дъщерен, това трябва да се отрази в родителски. Например докато зареждате дъщерен компонент:

<child [record]="record"></child>

Сега, когато променям запис в child.I искам да се отрази в родител.

някакъв начин да се постигне това? Благодаря.


person Bhushan Gadekar    schedule 14.06.2016    source източник


Отговори (3)


Ако не преназначавате record в детето, т.е. не правите нещо като this.record = newRecord;, тогава това, което имате, трябва да работи добре.

Тъй като предавате референтен тип на JavaScript (обект) към дъщерния, всички промени, които правите в свойствата на обекта в дъщерния, например this.record.property1 = someNewValue;, ще бъдат „виждани“ от родителя, тъй като и родителят, и дъщерният имат препратка към същия record обект. Има само един record обект, който се манипулира.

Ако преназначавате record в дъщерния елемент (или ако record вместо това е примитивен тип като цяло число, низ или булев), тогава вижте отговора на @Günter. В този случай има включени множество record обекти, така че трябва да кажете на родителя, когато детето започне да използва нов обект.

person Mark Rajcok    schedule 14.06.2016

Дъщерният компонент се нуждае от @Input() и @Output() за двупосочно свързване, за да работи

@Component({
  selector: 'child',
  ...
})
export component MyChild {
  @Input() record;
  @Output() recordChange = new EventEmitter();

  updateRecord(newRecord) {
    this.record = newRecord;
    this.recordChange.emit(this.record);
  }
}

За да работи [(record)]="....", е важно входът и изходът да имат едно и също основно име („запис“), а изходът да има суфикс Change, в противен случай ще трябва по-дълъг синтаксис

[record]="..." (recordUpdated)="..." 

(ако приемем, че изходът е наречен recordUpdated)

person Günter Zöchbauer    schedule 14.06.2016
comment
можете ли да предоставите източник за тази информация относно наличието на същото основно име и суфикс Change? - person Asqan; 14.12.2016
comment
Документите го споменават. Тази част беше добавена преди няколко седмици. Съжалявам само по телефона. Предполагам, че се споменава някъде близо до синтаксиса на шаблона или двупосочното свързване. - person Günter Zöchbauer; 14.12.2016

Опитвали ли сте синтаксиса на банана в кутията:

 <child [(record)]="record"></child>
person Harry Ninh    schedule 14.06.2016