javascript - Angular ngFor不显示更改的数组

标签 javascript html angular ngfor angular-gridster2

在我的应用程序中,我有一个仪表板,用户可以在其中添加和删除小部件。为此,我使用了 angular-gridster2。这很好用,但是当我从仪表板添加或删除小部件时,首先不再显示小部件,然后只有在刷新后才会发生正确的更改。 ngFor 指令正在迭代的我的 Widget 列表是从一个可观察对象构建的。这些值会正确更改。

这是我的 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>
</gridster>

在我的 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;
  });

这是返回应该显示的小部件列表的方法:

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

我真的找不到这种行为的原因,所以如果有人找到了,我将不胜感激。提前致谢。

最佳答案

你试过调试它吗? 尝试将 foreach 循环更改为列表,而不是函数

*ngFor="let widget of widgetList()"

*ngFor="let widget of list"

在你的 ngOnInit 中:

this.list = this.widgetList()

这样您就可以调试它并查看您的列表是否包含任何项目。如果是这样,那么我会更深入地研究您的 gridster-item 组件并确保 [item]="widget.position" 根据组件逻辑具有值

关于javascript - Angular ngFor不显示更改的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52942725/

相关文章:

javascript - 我们可以在没有 jQuery 的情况下在纯 JavaScript 中将对象分配给 html 元素吗

javascript - 外部文件 - 良好的编程习惯

使用类装饰器时需要 Angular4 core.es5.js 未捕获的反射元数据垫片

Angular:使用 ngFor 的索引会引发错误期望数字类型

javascript - 当我将多个内联 JavaScript 函数添加到 onclick 处理程序时会发生什么?

javascript - 无法使用 Bootstrap 模式执行验证

asp.net - 在 ASP.NET 站点上添加事件

jquery - 使用 jQuery 隐藏和显示列表菜单项

javascript - 从 Angular 中的 BehaviorSubject 访问嵌套数据

javascript - 如何对多层深度的对象强制执行空检查?