двусторонняя привязка с безопасным навигационным оператором

Как лучше всего использовать двустороннюю привязку (синтаксис-сахар) в Angular 2 с оператором безопасной навигации. Я пробовал следующее.

<input [(ngModel)]="x?.y?.z"> 

Но это не поддерживается.

Есть ли способ использовать sth. как это?


person Manfred Steyer    schedule 15.03.2016    source источник


Ответы (3)


Вы можете разделить привязку вверх и вниз, например

<input [ngModel]="x?.y?.z" (ngModelChange)="x?.y?.z ? x.y.z = $event : null"> 
person Günter Zöchbauer    schedule 15.03.2016
comment
Просто любопытно, но разве оператор Элвиса не осуждает привязку банана в коробке, поскольку вы вынуждены разделять привязки? - person rivanov; 17.10.2018
comment
@rivanov не уверен, что вы имеете в виду, но его нужно разделить, потому что вы не можете присвоить значение и выражение, использующее оператор Элвиса (x?.y?.z = 'foo' недопустимо). - person Günter Zöchbauer; 17.10.2018
comment
То, что я имею в виду, похоже, уже является запросом функции: github.com/angular/angular/issues/ 7697 - person rivanov; 17.10.2018
comment
Я понимаю, что люди этого хотят, но если вы проверите 2-й последний комментарий, вы увидите, что неясно, возможно ли это технически. - person Günter Zöchbauer; 17.10.2018

<input [ngModel]="x?.y?.z" (keyup)="changeMe($event.target.value)"> {{x?.y?.z}}

export class ParentCmp {
  x={y:{z:"a"}}
   changeMe(val)
    {
      console.log(val);
      this.x.y.z=val;
    }
}

http://plnkr.co/edit/ZBeSPqf4HUwLOeWSNfZJ?p=preview

person micronyks    schedule 15.03.2016

Angular не поддерживает оператора безопасной навигации в двусторонних привязках. Вместо этого вы можете сделать так:

<!-- <input [(ngModel)]="x?.y"> -->
<input [(ngModel)]="x && x.y"> 

(проверено с Angular 9)

person Guido Mocha    schedule 11.01.2021