Angular2: 当被ngFor循环的组件的引用发生变化时,ngDestroy被调用
创始人
2024-10-22 07:01:30
0

在Angular 2中,当使用ngFor循环创建组件列表时,ngDestroy方法只会在组件被销毁时被调用。如果ngFor循环中的组件引用发生变化,ngDestroy方法不会被调用。这是因为ngFor循环是基于对象引用的,而不是基于对象属性的。

但是,你可以通过使用trackBy函数来解决这个问题。trackBy函数可以告诉Angular如何跟踪和比较对象。

下面是一个示例代码:

@Component({
  selector: 'app-item',
  template: `
    
{{ item.name }}
` }) export class ItemComponent implements OnDestroy { @Input() item: any; ngOnDestroy() { console.log('ngDestroy called'); } } @Component({ selector: 'app-list', template: `
` }) export class ListComponent { items = [ { id: 1, name: 'Item 1' }, { id: 2, name: 'Item 2' }, { id: 3, name: 'Item 3' } ]; trackByFn(index, item) { return item.id; // 返回唯一标识项的属性,例如id } changeItems() { this.items = [ { id: 4, name: 'Item 4' }, { id: 5, name: 'Item 5' }, { id: 6, name: 'Item 6' } ]; } }

在上面的示例中,我们创建了一个ItemComponent和一个ListComponent。ListComponent中有一个items数组,通过ngFor循环创建了ItemComponent的实例。在trackByFn函数中,我们返回了每个item对象的id属性作为唯一标识。这样,当items数组发生变化时,Angular将使用trackBy函数来跟踪和比较对象,如果对象的唯一标识发生变化,ngDestroy方法将被调用。

你可以尝试点击“Change Items”按钮来改变items数组,然后观察控制台中的日志信息。

相关内容

热门资讯

第三分钟妙计!hhpoker破... 第三分钟妙计!hhpoker破解工具(透视)总是真的是有辅助插件(哔哩哔哩)1、进入到hhpoker...
九分钟学习!pokemmo脚本... 九分钟学习!pokemmo脚本手机版(透视)竟然是真的有辅助工具(哔哩哔哩)1、进入游戏-大厅左侧-...
第五分钟方针!wepoker正... 第五分钟方针!wepoker正确养号方法(透视)确实存在有辅助透视(哔哩哔哩)1、wepoker正确...
9分钟指引!黑侠破解wepok... 9分钟指引!黑侠破解wepoker(透视)一贯真的是有辅助脚本(哔哩哔哩)黑侠破解wepoker辅助...
六分钟教材!hhpoker是内... 六分钟教材!hhpoker是内部控制吗(透视)确实存在有辅助工具(哔哩哔哩)1、玩家可以在hhpok...
四分钟手册!we poker游... 四分钟手册!we poker游戏下(透视)确实是真的有辅助教程(哔哩哔哩)1)we poker游戏下...
第5分钟大纲!hardrock... 第5分钟大纲!hardrock作必弊(透视)一贯存在有辅助安装(哔哩哔哩)1、hardrock作必弊...
1分钟窍门!wepokerpl... 1分钟窍门!wepokerplus脚本(透视)都是真的有辅助辅助(哔哩哔哩)1、操作简单,无需wep...
第二分钟练习!德普之星app安... 第二分钟练习!德普之星app安卓版破解版(透视)原来是有辅助教程(哔哩哔哩)进入游戏-大厅左侧-新手...
第五分钟妙计!wepoker科... 第五分钟妙计!wepoker科技辅助器(透视)确实有辅助神器(哔哩哔哩)1、进入游戏-大厅左侧-新手...