angular - 如何告诉角度不更新视图
问题描述
假设我有这个代码:
<ng-container *ngFor="let item of items;">
// other stuff
</ng-container>
一旦我的items
更改角度重置里面的视图<ng-container>
。里面的区域有手风琴,里面有表格。因此,当更新任何表单时,手风琴部分会关闭,这不是一个理想的功能。我怎样才能防止这种情况发生?
解决方案
您需要避免对可以更改的变量进行循环。我不知道你的代码,但总的来说你总是可以做
<ng-container *ngFor="let foo of count;let i=index">
// other stuff but you use
items[i]
</ng-container>
你有一个变量的地方
count:any[];
请记住,当您更改需要写入的项目长度时
this.count = new Array(items.length);
如果您不担心何时更改项目长度,则可以使用字符串的重复和拆分函数“即时”创建数组:
<ng-container *ngFor="let foo of ' '.repeat(items.length).split('');let i=index">
// other stuff but you use
items[i]
</ng-container>
另一种方法是创建一个指令重复
@Directive({
selector: '[repeat]'
})
export class RepeatDirective {
constructor(
private templateRef: TemplateRef<any>,
private viewContainer: ViewContainerRef) { }
@Input() set repeat(times: number) {
let count=this.viewContainer.length;
for (let i=this.viewContainer.length;i>times;i--)
this.viewContainer.remove(i-1);
for (let i = count ; i < times ; i++)
this.viewContainer.createEmbeddedView(this.templateRef,
{
$implicit:i
});
}
}
并使用
<ng-container *repeat="items.length;let i">
..use item[i]...
</ng-container>
推荐阅读
- android - 使用 kotlin 诗人使用挂起修饰符实现接口
- javascript - 如何访问我想要的目录?
- javascript - React Firebase 集成 - 类型错误:firebase_app__WEBPACK_IMPORTED_MODULE_0__.default 未定义
- javascript - Display elements of an array in javascript
- shopify - "error_description": "授权码未找到或已被使用" Shopify
- nuxt.js - 上一个和下一个的 Nuxt/内容环绕
- node.js - NestJS typeorm @OneToMany 子数组未正确插入
- javascript - 如何从 intl-tel-input 中删除重复的国家/地区
- json - 使用 WITH 时,如何获取 OPENJSON 中数组项的“键”?
- java - TEIID30538 java.lang.IllegalStateException: WFTXN0007: 事务已与当前线程关联