我创建了一个优先级为 1000 的自定义指令。在指令的编译函数中,我从元素中删除了 ng-if
。我的假设是,由于 ng-if
的优先级较低,为 600,因此不应对其进行编译。
app.js
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
});
app.directive('myDirective', function(){
return {
priority: 1000,
compile: function(element){
angular.element(element).removeAttr('ng-if').removeAttr('my-directive1');
}
};
});
app.directive('myDirective1', function(){
return {
compile: function(){
console.log('in mydirective1');
}
};
});
index.html
<div my-directive ng-if="false" my-directive1>
This div should be visible.
</div>
我创建了另一个指令来检查我对优先级的理解是否正确。 myDirective
正在成功删除 myDirective1
,但不是 ngIf
。
以下是plunker链接:
最佳答案
我不确定为什么优先级不能那样工作。我可以建议使用终端来消除优先级较低的指令。这里更新了Plunker .
app.directive('myDirective', function(){
return {
priority: 1000,
terminal: true,
compile: function(element){
//element.removeAttr('ng-if').removeAttr('my-directive1');
}
};
});
另请参阅有关 terminal
的这些问题:
关于javascript - 为什么 ngif 忽略优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42973435/