Angular - Создать свойство в новом свойстве объекта - PullRequest
0 голосов
/ 26 августа 2018

В настоящее время у меня есть элемент select в моем html, который имеет ngModel для объекта details:

[ngModel]="details?.publicInformation?.firstname" 

Однако publicInformation может не существовать в этом объекте, или если онможет быть, firstname не существует.Независимо от случая, в конце я хочу создать следующее:

[ngModel]="details?.publicInformation?.firstname" (ngModelChange)="details['publicInformation']['firstname'] = $event"

В принципе, если выбор активирован, даже если не существует ни publicInformation, ни firstname, я бы хотелсоздайте их внутри details и сохраните значение из выбора.

Проблема в том, что я получаю

Cannot set property 'firstname' of undefined

Может кто-нибудь объяснить, что я здесь делаю неправильно и как мне добиться желаемого результата?

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

Вам нужно инициализировать details и publicInformation для очистки объекта

public details = {publicInformation : {}};
0 голосов
/ 26 августа 2018

Это следует делать при загрузке данных формы.

Например, у вас может быть что-то вроде этого:

ngOnInit() {
    this._someService.loadForm().then((formData: FormData) => {
        this.details = formData;
    });
}

Затем вы можете изменить это, чтобы заполнить недостающиенеобходимые вам пустые свойства:

ngOnInit() {
    this._someService.loadForm().then((formData: FormData) => {
        this.details = formData || {};

        if (!this.details.publicInformation) {
            this.details.publicInformation = { firstname: '' };
        } else if (!this.details.publicInformation.firstname) {
            this.details.publicInformation.firstname = '';
        }
    });
}

Однако было бы лучше поместить эту логику в службы, чтобы они отвечали за добавление всех необходимых пустых свойств к загружаемым данным или, если выиспользуя Redux, то он должен перейти в редукторы.

...