Каков порядок настройки свойства Input компонента Angular и привязки ngModel? - PullRequest
0 голосов
/ 04 июля 2019

Я разрабатываю компонент, и он используется внутри родительского компонента (поэтому мы можем назвать мой компонент дочерним компонентом в этом случае).

Мой компонент имеет свойство @Input с именем selectedValue.

Также используется привязка ngModel (поскольку контекст использования находится в форме). NgModel связывается со свойством модели родительского компонента.

Я хочу, чтобы ngModel при изменении значения обновил свойство selectedValue моего компонента (это делается путем реализации ControlValueAccessor и функции writeValue).

На виде компонента будет отображаться значение selectedValue.

Краткое описание кода:

<parent-component ...>
   <my-child-component
      [(ngModel)]="parentModel.propertyMyComponentNeedToBind"
      [selectedValue]="defaultValue">
   </my-child-component>
</parent-component>

Реализация ControlValueAccessor

writeValue(value) {
   this.selectedValue = value:
}

Моя текущая проблема связана с редактированием (загрузкой существующих данных):

  • Если я не установлю [selectedValue] для компонента в шаблоне представления, то ожидаемое значение из ngModel не будет загружено в представление, вместо этого оно равно null / empty
<parent-component ...>
   <my-child-component
      [(ngModel)]="parentModel.propertyMyComponentNeedToBind"
      **does not have [selectedValue] here**>
   </my-child-component>
</parent-component>
  • Однако, если я установлю [selectedValue] для компонента в шаблоне представления (как в приведенной выше сводке кода), он может загрузить ngModel данных в представление

Итак, я предполагаю, что при установке @Input property вместе с ngModel из шаблона, существует ли какой-то определенный порядок угловых процессов, который один перед другим? И особенно, как в моем случае, когда изменение ngModel также приведет к обновлению свойства @Input, есть ли здесь какой-то определенный порядок или конфликт?

И, конечно, будет признателен, если кто-то может помочь указать причину моей проблемы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...