【发布时间】:2015-03-25 20:18:19
【问题描述】:
我的自定义指令编译函数在 ngRepeat (priority=1000) 和 ngInclude (priority=400) 之前执行,尽管默认优先级是 0,所以它应该在之后执行。
片段显示 myDir 指令附加的内容丢失,仅显示来自 ngInclude 模板的包含内容:
angular.module("app", [])
.run(function($templateCache) {
$templateCache.put('test.html', '<p>Content included by ngInclude</p><span>Number {{$index}}</span>');
})
.directive("myDir", function() {
return {
compile: function(elm){
elm.append('<span>apended by directive myDir, 1+1={{1+1}}</span>');
return function link(){};
}
};
})
.controller("myApp", function($scope){
$scope.items = [1,2,3];
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="myApp">
<div ng-repeat="item in items" my-dir="" ng-include="'test.html'"><p>First content</p></div>
</div>
我在这里的 jsfiddle 中有相同的代码:jsfiddle-link 在那里它显示了预期的行为。显示了来自指令的附加文本。 因为在 ngRepeat 和 ngInclude 编译函数之后附加了最低优先级的文本。
示例之间的区别仅在于角度版本。 Snipped here 在 v1.2.23 上运行(与我在运行 v1.3.0 的项目中的行为相同)并且 jsfiddle 在 v1.2.1 上运行
欢迎任何建议,在此先感谢 ;)
PS:在jsfiddle示例中,视图中缺少“<span>Number {{$index}}</span>”部分,告诉我原因的人会加分。
【问题讨论】:
-
我知道如何绕过这个问题,但在我看来它是 angularjs 中的错误,不是吗?
-
是问题:“为什么 Angular 版本之间的行为存在差异”还是问题“我如何使用 Angular ver. Y 完成 X”?
-
为什么 Angular v1.2.23+ 忽略指令优先级并在更高优先级的 inbuild 指令 ngInclude 和 ngRepeat 之前运行最低优先级的自定义指令,这会破坏文档?
标签: javascript angularjs angularjs-directive angularjs-ng-repeat angularjs-ng-include