javascript - 为什么 ngif 忽略优先级?

标签 javascript angularjs angularjs-directive angularjs-ng-if

我创建了一个优先级为 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链接:

https://plnkr.co/edit/86mauwbt5I2aV4aoySpz?p=preview

最佳答案

我不确定为什么优先级不能那样工作。我可以建议使用终端来消除优先级较低的指令。这里更新了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/

相关文章:

javascript - Bootstrap - 如何从元素中清除 css 以重新开始?

javascript - 如何从 webpack 中排除模块,而是使用 es6 导入它

angularjs - AngularJS 指令范围内的 '@' 和 '=' 有什么区别?

angularjs - 在 Angular js日期选择器指令中仅隐藏清除按钮

javascript - 当 ng-model 值更改时,AngularJS View 不会更新

javascript - 递归检查对象字段(+嵌套)为真

javascript - Azure cosmos DB 仅在查询中允许最多 5 个联接

javascript - 如何将元素插入数组而不重复它们?

javascript - Ionic Android 应用程序启动后出现黑屏

javascript - 如何使用wijmo flex grid获取选定行的值