我正在尝试将AngularJS添加到我正在处理的Grails应用程序中。
具体而言,我将Angular功能添加到我的网站的一个部分,例如添加到用户的所有页面。
我开始创建一个用户模块,我正在添加控制器和服务。然后我找到了一个我需要一些基本配置代码的地方,我知道我会想要在我的网站的其他区域 - 转换http参数,以便我的后端可以理解它们(http://victorblog.com/2012/12/20/make-angularjs-http-service-behave-like-jquery-ajax/)。
这让我相信我的整个应用程序需要一个基本模块。但是,我仍然是Angular的新手,我不明白我的Users模块将如何从基本模块继承此配置。这甚至可能吗?或者我应该只有一个基本模块,我将整个应用程序的每个控制器和服务添加到?
编辑:经过一些测试后,看起来如果我定义一个模块,然后将其作为另一个模块的依赖项:
var moduleB = angular.module('ModuleB', ["ModuleA"])
ModuleB中的我的配置将在ModuleB中得到尊重。这对我来说没有任何意义,如果我列出两个具有冲突配置的依赖项怎么办?
答案 0 :(得分:1)
如果来自两个不同模块的指令尝试在同一元素上创建范围,Angular会抱怨。如果您有不同的具有相同名称的指令,则可能更有可能发生这种情况。
为了降低指令冲突的可能性,您应该在具有唯一命名空间的模块中定义指令(采用ng)。
我建议你有一个带有依赖项的ng-app。
答案 1 :(得分:1)
我们解决这个问题:
创建特定模块。例如:
var task = angular.module('task', ["core"]);
然后,如果需要我们将基本服务(如utils工厂)注入“任务”#39;控制器或服务,只需使用它。但有时我们需要从基本服务继承并添加/覆盖方法。为此,我们使用klass.js(您可以使用任何其他继承库)。例如:
核心'模块
(function (module) {
module.factory("baseHttp", baseHttp);
baseHttp.$inject = ['baseRest'];
function baseHttp(baseRest) {
var api = {
createItem: function (item) {
return this.post("create", item);
},
// ... other methods
};
return baseRest.extend(api);
};
})(angular.module("core"));
' baseRest'是角度的装饰者' $ http'。
任务'模块:
(function (module) {
module.factory("baseHttp", taskHttp);
taskHttp.$inject = ['baseHttp'];
function taskHttp(baseHttp) {
var api = {
// override base method
createItem: function (item) {
return this.post("createTask", item);
},
// add new method
read: function (id) {
return this.get("readTask", id);
},
// ... other methods
};
return baseHttp.extend(api);
};
})(angular.module("task"));
因此,我们可以从核心继承一些服务,或者只是在代码中使用核心服务。