2017-03-27 63 views
4

我正在创建一个DOM结构,并且只想在第一时间添加一些可视组件中的某些部分,并且不希望它们被一次又一次刷新,这是* ngIf的工作方式。这是为了避免绑定一次又一次地执行,因为我知道一旦创建就不会改变。换句话说,Angular1有::运营商,这有助于实现这一点。Angular2:一次绑定* ngIf可用吗?

在Angular2中有没有一次性绑定*ngIf?如果在其他问题中讨论这个问题,请指出我的问题。

+0

如果该值没有改变,'* ngIf'不会刷新并再次刷新。不,没有一次性绑定Angular2 + –

+0

感谢您的评论。这是我的不好,我的意思是优化绑定。 – Abhi

+0

也许你绑定了一个方法或getter。这通常不是一个好主意。而是调用某个生命周期回调或事件处理程序的方法或getter,并将其分配给一个字段,然后绑定到该字段。变化检测对于字段比对方法更有效。 –

回答

1

您可以创建自己的结构指令,它会评估通过表达对初始页面加载和显示或基于传递条件值在DOM中不显示模板,像这样:

import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core'; 

@Directive({ selector: '[customNgIf]' }) 
export class CustomNgIfDirective { 

    @Input("customNgIf") condition: boolean; 

    constructor(
     private templateRef: TemplateRef<any>, 
     private viewContainer: ViewContainerRef) { 
    } 

    ngOnInit() { 
     if (condition) { 
      this.viewContainer.createEmbeddedView(this.templateRef); 
     } else { 
      this.viewContainer.clear(); 
     } 
    } 
} 

你会使用它像这样:

<div *customNgIf="expression"> 
    Test 
</div>