首页 > 解决方案 > 如何告诉角度不更新视图

问题描述

假设我有这个代码:

<ng-container *ngFor="let item of items;">
    // other stuff
</ng-container>

一旦我的items更改角度重置里面的视图<ng-container>。里面的区域有手风琴,里面有表格。因此,当更新任何表单时,手风琴部分会关闭,这不是一个理想的功能。我怎样才能防止这种情况发生?

标签: angularformsaccordion

解决方案


您需要避免对可以更改的变量进行循环。我不知道你的代码,但总的来说你总是可以做

<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>

推荐阅读