我正在构建一个angular8应用程序,并且我的组件之一具有如下所示的HTML:
<mat-grid-list cols="4" style="margin: 5px">
<mat-grid-tile *ngFor="let tile of tiles">
<my-component [type]="tile.kind"
[row] = "tile.row"
[column] ="tile.column"
[state] = "tile.state"></my-component>
</mat-grid-tile>
</mat-grid-list>
my-component
组件的视图根据tile.state
的内部值而变化。
我注意到,每当更新tiles
数组时,视图都会改变,但会重新创建所有my-component
元素。
是否有一种方法可以防止重新创建这些元素,而仅根据状态对象中的数据进行更改?
我想我没有尽我所能解释自己...
网格中的所有图块均应更新,而不仅仅是其中之一。
我的问题是正在创建网格中的组件-我认为这确实损害了性能。
如果我的<my-component>
里面有一个<img>
,并且它是从state
对象获取其值的,那么我只想重新创建<img>
,但是<my-component>
不应该。
有可能吗?
答案 0 :(得分:0)
In the documentation,您会发现ngForTrackBy
。语法是
*ngFor="let x of y; trackBy: myFn"
您的功能将通过
myFn(index: number, itemOfTheList: YourCustomType): number | string {}
此功能将是跟踪您的元素的功能。它应该返回一个原始类型(布尔,数字或字符串)以唯一地标识每个对象。
一旦对象具有您创建的唯一ID,for循环将仅重新创建所需的ID。
答案 1 :(得分:0)
您可能想看看容器组件的if(this.word$ < this.words.length) {
this.word$++;
} else {
clearInterval(this.interval)
}
标志
https://angular.io/api/core/ChangeDetectionStrategy
changeDetection
现在发生的事情只有在有新输入时才会重新渲染。现在,如果您执行tile [0] .state = new State(),则只会更新该元素。
答案 2 :(得分:-1)
我认为您应该设置另一个变量来设置状态,而不是在“ title”变量中声明它。