Я использую вкладки материалов, чтобы показать кучу форм в моем приложении. У меня есть основная форма, которая делится некоторыми своими данными со вторичными формами, каждая из которых находится на отдельной вкладке, которые добавляются и удаляются динамически. Чтобы поделиться данными основной формы, я использую сервис, который содержит тему поведения, на которую подписываются другие формы. Вот мой сервис:
import { Injectable } from "@angular/core";
import { BehaviorSubject } from "rxjs";
@Injectable()
export class DataService {
private MessageSource = new BehaviorSubject<any>({});
getMessage = this.MessageSource.asObservable();
constructor() {}
setMessage(message: any) {
this.MessageSource.next(message);
}
}
В других моих формах я получаю данные и обновляю форму новыми значениями следующим образом:
this.dataFromMain.getMessage.subscribe(message => {
if (message.user) {
this.form.patchValue({
user_name: message.user.name,
user_address: message.user.address,
user_city: message.user.city
});
}
if (message.placeOfDecl) {
this.form.patchValue({
placeOfDecl: message.placeOfDecl
});
}
if (message.dateOfDecl) {
this.form.patchValue({
dateOfDecl: message.dateOfDecl
});
}
if (message.items) {
this.form.patchValue({
item_id: message.items.id,
item_code: message.items.code,
item_desc: message.items.desc,
});
}
});
Теперь, потому что вторичные формы часто созданный после заполнения основной формы, когда я помещаю вышеуказанный код в функцию ngOnInit
, новые значения не отображаются в новой форме.
Когда я помещаю вышеуказанный код в функцию ngAfterViewInit
, только что созданная форма обновляется, но я также получаю ошибку "Expression has changed after it was checked"
.
Чтобы решить эту проблему, я использовал один и тот же код на ngOnInit
и ngAfterViewInit
.
Я подозреваю, что я делаю что-то не так или что-то упускаю. Повторение одного и того же кода в двух местах кажется неправильным. Не так ли?
Вот блиц ... https://stackblitz.com/edit/my-dynamic-tabs