通过条件解决角度应用中的依赖关系

时间:2015-02-15 11:26:35

标签: angularjs

我正计划实施基本角度模块base和2个子模块m1m2。在模块base中将实现所有服务,指令和控制器。模块m1m2将是服务,控制器,具有相同名称的指令的不同实现。

在我的应用程序中将是2个几乎相同的编辑器,但也将在服务,指令或控制器的实现方面存在差异。

想象一下,base模块中有控制器

function IndexCtrl($scope, userService) {

}

但在模块m1m2中是userService的不同实现。

我正在使用ui.router开发SPA并使用ng-app指令启动应用程序。

angular.module('test', ['base', 'm1', 'm2'])
<html ng-app="test">
</html>

将根据userService模块定义中的模块顺序解决服务test

在这种情况下,如何管理解析依赖项? 我不能使用提供程序,因为基本模块对儿童模块一无所知。我也不能使用angular.bootstrap

2 个答案:

答案 0 :(得分:0)

目前AngularJS 不处理服务的命名空间冲突,这意味着,您有2个不同的模块,其服务名称相同,并且您在应用中包含这两个模块,只有一个服务将有空。正如您刚才所说,服务将根据模块注入的顺序得到解决。

解决此问题的正确方法是为服务添加前缀,而不是使用完全相同的名称。

答案 1 :(得分:0)

您不能拥有两个具有冲突命名空间的模块。但是如果条件是常量并且在早期状态下可用,则可以注册正确的服务和指令集:

var userService1 = function(...) {...};
var userService2 = function(...) {...};

var module = angular.module("m", []);

if (condition) {
    module.service("userService", userService1);
} else {
    module.service("userService", userService2);
}