引用AngularUi和AngularStrap时出错

时间:2014-07-17 04:17:10

标签: angularjs angular-ui-bootstrap angular-strap

在我的一个angularjs项目中,我使用的是AngularUi和AngularStrap。当我点击一个按钮时,它应显示一个弹出窗口,但它显示“$ modal.open不是一个函数”。在搜索时,我发现这是由于引用了两个角度库。

$modal.open({ template: '<h1>Hello</h1>' });

有没有办法克服这个?

像Angular.UI。$ modal之类的东西?

1 个答案:

答案 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内部更改或您的依赖项发生更改,它也可能在将来发生变化。

我会推荐第一个选项:消除冲突。