在我的一个angularjs项目中,我使用的是AngularUi和AngularStrap。当我点击一个按钮时,它应显示一个弹出窗口,但它显示“$ modal.open不是一个函数”。在搜索时,我发现这是由于引用了两个角度库。
$modal.open({ template: '<h1>Hello</h1>' });
有没有办法克服这个?
像Angular.UI。$ modal之类的东西?
答案 0 :(得分:1)
当前版本的Angular无法解决冲突或完全限定所需的依赖项。
所以考虑到这一点,首先要看的是你是否可以消除冲突(要么摆脱其中一个引导模块,要么编辑一个以删除或重命名你不需要的服务和指令或者更好的是,编辑一个以删除不需要的所有东西。
另一方面,可能能够按照加载的方式进行游戏,以使其使用您想要的游戏。如果考虑两个模块A和B,每个模块定义$modal
,Angular将使用最后一个模块的依赖项加载。
var A = angular.module('A', []);
A.factory('serviceA', function(){
return function(){
console.log('using serviceA defined in module A');
};
});
var C = angular.module('C', []);
C.factory('serviceA', function(){
return function(){
console.log('using serviceA defined in module C');
};
});
// to demo the concept, i'm just injector straight. in your code, you'd just change the order they're specified in your angular.module call.
// notice here we load C before A
var $injector = angular.injector(['C', 'A']);
$injector.invoke(function(serviceA){
serviceA(); // serviceA will be from module A
});
上面我想使用模块serviceA
中的A
,因此我在C
之后定义它。如果您需要C
的{{1}},请将其换掉。
serviceA
但是,如果您的应用程序的模块由多个子模块组成,每个子模块可能依赖于其中一个引导模块,那么您可能很难按要求加载它。如果某些Angular内部更改或您的依赖项发生更改,它也可能在将来发生变化。
我会推荐第一个选项:消除冲突。