Я использую Angular 7. У меня есть родительский компонент, который получает список пользовательских моделей из API.Когда "get" завершается успешно, он используется вместе с циклом ngFor для внедрения каждого пользователя в дочерний компонент с помощью @input, который будет отображать список пользователей.
Когда обновляется свойство в модели одного пользователядочерние компоненты не отражают это изменение.Я понимаю, почему это происходит.Я понимаю, что обнаружение изменений сработает только при изменении ссылки в списке.Однако я не знаю, как обойти эту проблему.Я попытался реализовать массив пользовательских моделей как наблюдаемый и использовать асинхронный канал, который работает при отображении данных, но не при внесении изменений.
В моем конкретном примере у меня есть свойство «selected» для моего пользователяВ модели у меня есть кнопка «Выбрать все» на родительском компоненте, которую я хотел бы использовать, чтобы изменить свойство «выбранные» для всех пользователей в моем массиве и впоследствии отобразить его в пользовательском интерфейсе.Вот очень простая версия моего кода
export class ParentComponent {
users: UserModel[];
ngOnInit() {
this.userService.getUsers().subscribe(users => {
this.users = users;
});
}
onSelectAll() {
for (let user of this.users) {
user.selected = true;
}
}
}
Родительский компонент имеет следующее в шаблоне:
<tr users-item [index]="i + 1" [user]="user" *ngFor="let user of users; let i = index"></tr>
И это дочерний компонент, который использует пользовательскую модель для отображенияданные:
export class ChildComponent {
@Input() user: UserModel;
firstname: string;
lastname: string;
selected: boolean;
ngOnChanges() {
if (this.user) {
this.firstname = this.user.firstname;
this.lastname = this.user.lastname;
this.selected = this.user.selected;
}
}
}
и шаблон дочернего компонента:
<td><input type="checkbox" [checked]="selected"></td>
<td>{{ fullname }}</td>
<td>{{ lastname }}</td>