当然,我可以自己检查一下。 这是更具概念性/架构性的问题以及它为何如此构建。
angular.module('appmodule1').directive('mydir', function(){});
angular.module('appmodule2').directive('mydir', function(){});
那么我们应该期待mydir
?
UPD : 模块之间的依赖关系:
angular.module('app',['appmodule1', 'appmodule2'])
或
angular.module('appmodule1', ['appmodule2']);
答案 0 :(得分:1)
一件简单的事情是,如果您的模块仅直接/间接加载模块中的一个,那么将仅使用该指令工厂。但是,如果您的问题是如果两个模块都加载了,例如angular.module('app',['appmodule1', 'appmodule2'])
,并且您的应用程序使用模块app
进行自举,那么指令工厂将被添加到一起,即指令工厂是附加的,并且这样的组件使用时将与两个工厂一起呈现。
angular.module('app1', []).directive('mydir', function() {
return {
restrict: 'E',
link: function() {
console.log("App1");
}
}
});
angular.module('app2', []).directive('mydir', function() {
return {
restrict: 'E',
link: function() {
console.log("App2");
}
}
});;
angular.module('app', ['app1', 'app2']).config(function($provide) {
$provide.decorator('ngRequiredDirective', function($delegate) {
console.log($delegate); //Check the console on the configuration you will see array of 2 configurations
return $delegate;
})
});;

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.min.js"></script>
<div ng-app="app">
<mydir></mydir>
<test ng-required="true"></test>
</div>
&#13;
通常,两者都不能指定范围,模板等(规则与元素具有多个指令时相同),并且这些指令通常在同一模块中定义(或即使在不同的模块中)也有意图和特殊目的。例如,angular内部有一个带有选择器select
的指令,该指令与ng-options
指令一起使用,现在在您的应用程序中要说明要将所有select
转换为引导选择选项或使用ng重复的材料选择。您可以使用选择器select
抽象出仍然创建另一个指令,并添加您的逻辑以通过解析ng-options
表达式并呈现新的下拉列表来呈现它。
一个例子是角度本身,ng-required
和其他类似指令的实现方式see this answer for example。您可以通过执行ng-required
指令工厂的控制台日志来查看它。
.config(function($provide) {
$provide.decorator('ngRequiredDirective', function($delegate) {
console.log($delegate); //Check the console on the configuration you will see array of 2 configurations
return $delegate;
})
});
为什么要建造?
通过赌注将是可扩展性并在不同的工厂中划分不同的责任。
所以简而言之,如果你有同一个选择器的多个指令工厂,它不应该是偶然的,而是有明确的目的创建,否则它可能会变成一场灾难!
答案 1 :(得分:0)
它将取决于实例化指令的模块。如果您在appmodule1下,将使用相应的指令。这里不会有冲突,除非我遗漏了什么。