如何在 Angular2 中手动强制重新渲染组件?
How to manually force a rerender of a component in Angular2?
我正在使用 ng Smarttable 并通过事件更改数据源数组(更改是数组内值的 id 更改)。问题是 angular 没有检测到更改,并且直到我将鼠标悬停在页面上或单击某处时才发生任何事情。
所以这些更改会在幕后正确应用,并且 angular "sees" 一旦我单击某处,这些更改就会发生。
所以我可以手动点击很多次来查看变化 属性,但这不是我们想要的。
我试过:
- 在我更改数组的函数中使用 ChangeDetectorRef(markAsChanged 和 DetectChange)
- 更改数组后手动创建点击事件
- 使用不变性 (this.data= [...this.data];)
有没有可能有这样的东西?
this.renderer.refresh();
或者只使用 ng smartable 的一个功能?
编辑:看来问题出在我这边。当你 "refresh" 智能表时,你会得到一个只有在加载完成后才会执行的承诺。
我没有使用承诺。将普通的 DetectChange() 放入 promise 中使其工作
您可以使用应用程序引用手动重新渲染。
将 ApplicationRef 注入您的组件。
constructor(appRef: ApplicationRef) {}
然后每当你想重新渲染时调用 tick 方法
appRef.tick();
我正在使用 ng Smarttable 并通过事件更改数据源数组(更改是数组内值的 id 更改)。问题是 angular 没有检测到更改,并且直到我将鼠标悬停在页面上或单击某处时才发生任何事情。
所以这些更改会在幕后正确应用,并且 angular "sees" 一旦我单击某处,这些更改就会发生。
所以我可以手动点击很多次来查看变化 属性,但这不是我们想要的。
我试过:
- 在我更改数组的函数中使用 ChangeDetectorRef(markAsChanged 和 DetectChange)
- 更改数组后手动创建点击事件
- 使用不变性 (this.data= [...this.data];)
有没有可能有这样的东西?
this.renderer.refresh();
或者只使用 ng smartable 的一个功能?
编辑:看来问题出在我这边。当你 "refresh" 智能表时,你会得到一个只有在加载完成后才会执行的承诺。
我没有使用承诺。将普通的 DetectChange() 放入 promise 中使其工作
您可以使用应用程序引用手动重新渲染。
将 ApplicationRef 注入您的组件。
constructor(appRef: ApplicationRef) {}
然后每当你想重新渲染时调用 tick 方法
appRef.tick();