directive ngIf
ngIf指令删除或重新创建基于表达式的DOM树的一部分。如果分配给ngIf的表达式计算为假值,那么元素将从DOM中删除,否则元素的克隆将被重新注入到DOM中。
ngIf不同于ngHide和ngShow,ngIf完全删除并重新创建DOM中的元素,而不是通过显示的css属性更改其可见性。当这种差异非常明显时,一个常见的情况是使用依赖于DOM中的元素位置的css选择器,例如::first-child
or :last-child的
伪类。
注意,当使用ngIf删除元素时,它的作用域将被销毁,当元素被恢复时将创建一个新的范围。在ngIf中创建的范围从其父范围继承了原型继承。这是一个重要的暗示,如果ngIf中使用了ngModel来绑定到在父范围内定义的javascript原语。在这种情况下,对子范围内变量的任何修改将覆盖(隐藏)父范围内的值。
另外,ngIf使用编译后的状态重新创建元素。这种行为的一个例子是,如果元素的class属性在编译后被直接修改,使用jQuery的.addClass()方法,然后删除元素。当ngIf重新创建元素时,添加的类将会丢失,因为原始编译的状态被用于重新生成元素。