Angular ng для отображения измененного массива

В моем приложении есть панель инструментов, где пользователь может добавлять и удалять виджеты. Для этого я использую angular-gridster2. Это хорошо работает, но когда я добавляю или удаляю виджет из панели мониторинга, сначала никакие виджеты больше не отображаются, а затем только после обновления происходят корректные изменения. Мой список виджетов, через который перебирает директива ngFor, построен из наблюдаемого. Эти значения изменяются правильно.

Это мой HTML:

<gridster #dashboardgrid [options]="options" class="widget-container">
    <gridster-item *ngFor="let widget of widgetList()" (mouseup)="setCurrentWidgetId(widget.id)" [item]="widget.position" class="gridster-design drag-handler">
      <!-- some stuff-->
    </gridster-item>

В моем ngOnInit Я подписываюсь на заметное:

this.dataService.currentDashboardId.subscribe(dashboardId => this.currentDashboardId = dashboardId);
this.dataService.currentSheetId.subscribe(sheetId => this.currentSheetId = sheetId);
this.dataService.projectData
  .subscribe((project: Project) => {
    this.project = project;

});

И это метод, возвращающий list of widgets который должен отображаться:

widgetList(): Array<Widget> {
return this.project.dashboards
  .find(x => x.id === this.currentDashboardId).sheets
  .find(x => x.id === this.currentSheetId).widgets;

}

Я действительно не могу найти причину такого поведения, поэтому, если кто-то и делает, я ценю это. Заранее спасибо.

2 ответа

Вы пытались его отладить? Попробуйте изменить цикл foreach на список вместо функции

*ngFor="let widget of widgetList()"

*ngFor="let widget of list"

и в вашем ngOnInit:

this.list = this.widgetList ()

таким образом, вы можете отладить его и посмотреть, есть ли в вашем списке какие-либо элементы. Если это так, то я бы заглянул глубже в ваш компонент gridster-item и убедился, что [item]="widget.position" имеет значение в соответствии с логикой компонента

Сохранить массив в некоторой переменной, скажем, виджет List

widgetList : any;
widgetList(): Array<Widget> {
return this.widgetList = this.project.dashboards
  .find(x => x.id === this.currentDashboardId).sheets
  .find(x => x.id === this.currentSheetId).widgets;
}

и использовать ngfor в HTML, как это

*ngFor="let widget of widgetList"
Другие вопросы по тегам