Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular ngFor在组件上的任何事件上重新绘制,即使在ngFor之外_Angular_Ngfor - Fatal编程技术网

Angular ngFor在组件上的任何事件上重新绘制,即使在ngFor之外

Angular ngFor在组件上的任何事件上重新绘制,即使在ngFor之外,angular,ngfor,Angular,Ngfor,我的问题与Angular(2)有关,使用Angular.io sample plunkr中的RC1 fork。ngFor模板中的数据绑定功能运行时,就像在ngFor之外的任何事件中发现更改检测为真一样。在我的示例中,单击ngFor外部的按钮 我试过使用和不使用trackBy函数(尽管它的文档目前很差,所以不确定我是否正确使用了它);我不知道如何确保每一个操作都不会导致ngFor的重新绘制,因为这可能会非常昂贵 单击时的日志结果: 钮扣 绘图 绘图 您可以通过查看控制台日志实时查看问题: impo

我的问题与Angular(2)有关,使用Angular.io sample plunkr中的RC1 fork。ngFor模板中的数据绑定功能运行时,就像在ngFor之外的任何事件中发现更改检测为真一样。在我的示例中,单击ngFor外部的按钮

我试过使用和不使用trackBy函数(尽管它的文档目前很差,所以不确定我是否正确使用了它);我不知道如何确保每一个操作都不会导致ngFor的重新绘制,因为这可能会非常昂贵

单击时的日志结果:

  • 钮扣
  • 绘图
  • 绘图
  • 您可以通过查看控制台日志实时查看问题:

    import { Component } from '@angular/core';
    
    @Component({
      selector: 'my-app',
      template: `
          <button (click)="clickOustideFunction()" >hi</button>
          <h1 *ngFor="let d of data;trackBy:a">
            My First Angular 2 App{{drawingForFunction()}}
          </h1>`
    })
    export class AppComponent { 
        data= [{"a":1}, {"a":2}];
    
        clickOustideFunction(): void {
            console.log("button");
        }
    
        drawingForFunction(): void {
            console.log("drawing");
    
        }
    
    }
    
    从'@angular/core'导入{Component};
    @组成部分({
    选择器:“我的应用程序”,
    模板:`
    你好
    我的第一个Angular 2应用程序{{drawingForFunction()}}
    `
    })
    导出类AppComponent{
    数据=[{a:1},{a:2}];
    clickOustideFunction():void{
    控制台日志(“按钮”);
    }
    drawingForFunction():void{
    控制台日志(“图纸”);
    }
    }
    
    默认情况下,在每个事件后都会检查所有模板绑定的更改。通常,NgFor循环将具有像
    {{data.a}}
    这样的绑定,并且每次运行更改检测时都会对这些绑定进行脏检查。如果您有一个函数,比如
    {{drawingForFunction()}}
    ,那么每次运行更改检测时都会对这些函数进行评估

    Angular只会在看到/检测到更改时修改DOM,因此除非有更改,否则不会重新渲染任何内容。并且仅重新呈现更改的项目(而不是整个视图)


    您可能可以使用
    OnPush
    更改检测策略来减少检查组件更改的频率。

    这不是我所希望的答案,因为似乎很容易让某些东西运行不好,但我将研究可以通过组件装饰器使用的更改检测策略。非常感谢。有谁能找到一个资源指南来帮助防止落入这个陷阱?