Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.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
Angular2 ngFor:何时添加/删除DOM?如何强制它重新创建DOM?_Angular_Ngfor - Fatal编程技术网

Angular2 ngFor:何时添加/删除DOM?如何强制它重新创建DOM?

Angular2 ngFor:何时添加/删除DOM?如何强制它重新创建DOM?,angular,ngfor,Angular,Ngfor,我正在玩Angular2*ngFor,对它何时重新创建DOM有点困惑 如果我在onClick()中只有case1代码,那么它将重新创建两个,但我只是将相同的值赋给this.objArr 如果在onClick()中只有case2代码,那么它不会重新创建两个,只需再添加一个。我想知道ngFor如何确定何时重新创建DOM 我想做的是: 如果我只是将更多对象推送到现有数组中,除了为推送的对象添加DOM外,我如何让它为我重新创建现有DOM?与案例2一样,我希望ngFor可以为我重新创建前两个 Html:

我正在玩Angular2*ngFor,对它何时重新创建DOM有点困惑

如果我在
onClick()
中只有case1代码,那么它将重新创建两个
  • ,但我只是将相同的值赋给this.objArr

    如果在
    onClick()
    中只有case2代码,那么它不会重新创建两个
  • ,只需再添加一个
  • 。我想知道ngFor如何确定何时重新创建DOM

    我想做的是

    如果我只是将更多对象推送到现有数组中,除了为推送的对象添加DOM外,我如何让它为我重新创建现有DOM?与案例2一样,我希望ngFor可以为我重新创建前两个
  • Html:

    
    
    
    .ts文件:

    constructor(){
    this.objArr=[
    {
    “id”:0,
    “内容”:“test0”
    },
    {
    “id”:1,
    “内容”:“test1”
    }
    ];
    }
    onClick(){
    //案例1:重新创建两个
  • this.objArr=[ { “id”:0, “内容”:“test0” }, { “id”:1, “内容”:“test1” } ]; //案例2:只需在现有的两个
  • 之后添加一个
  • 这是推({ “id”:“2”, “内容”:“test2” }); }
  • 您可以临时将
    objArr
    设置为null,并通过调用
    detectChanges来“强制”Angular来更新DOM,方法是:

    构造函数(私有cdRef:ChangeDetectorRef){}
    onClick(){
    var tmp=this.objArr;
    this.objArr=null;
    this.cdRef.detectChanges();
    this.objArr=tmp;
    this.cdRef.detectChanges();
    }
    
    您可以将管道用于that@VinayPandya你能根据我的例子解释更多细节吗?谢谢。
    this.objArr=null
    this.objArr=[]?Will
    this.objArr=[]只保留原始引用?更改
    objArr
    的值并运行更改检测强制
    *ngFor
    删除所有项目,并将它们添加回,使
    *ngFor
    重新添加它们。我明白了。谢谢你的帮助。你不能使用OnPush策略,然后使用
    cdRef.markForChange()
    ?我想是的,但是问题中没有提到
    OnPush