我是Angular的新手,但随着我越来越自在,我正在编写更多的模块化代码,将更少的逻辑塞进控制器,更加独立的服务。但是我遇到的问题是我最终多次重新声明父模块,当下游声明注入的依赖项不同于前一个声明时,我遇到了冲突。
这是我目前正在做的简化版本:
<body ng-app="myApp">
//first instance of "myApp" for some controller
var myApp = angular.module('myApp', ['dep1', 'dep2']);
var someCtrl = myApp.controller('someCtrl', ['dep3','dep4']);
//later... another instance of "myApp" for another controller
if (!myApp)
var myApp = angular.module('myApp', ['dep2']);
var anotherCtrl = myApp.controller('anotherCtrl', ['dep3','dep4']);
在这个简单的例子中重新声明myApp
似乎很愚蠢,但真正的项目是一个大型的MVC PHP应用程序,有很多可重用的部分等...所以不能保证{{ 1}}总是会被包含在someCtrl
之前。换句话说,我需要每个模块都是&#34;自包含&#34;,除非附加到父anotherCtrl
,否则无法声明控制器/服务。
我知道不是一种在以后动态(重新)注入依赖项的方法:myApp
因此,我能想到的唯一解决方案是在myApp.addDependancy(['dep7', 'dep8'])
中仅使用任何潜在控制器/服务的所有可能依赖性声明myApp
...
<head>
... 从不重新声明它。这样可以更轻松地管理不同的依赖关系,但它是否基本上破坏了依赖注入的目的?因为我会注入一堆不需要的依赖项?
我是否误解了这应该如何运作?接近这个的正确方法是什么?非常欢迎链接到文档等。
注意:我还读到过度使用相同的父模块(var myApp = angular.module('myApp', ['dep1', 'dep2', 'dep3' ... ]);
)是一个常见的Angular错误,但我需要控制器/服务通过相互通信myApp
,$rootScope
等......所以我认为它们必须全部延伸$watch
吗?
答案 0 :(得分:0)
如何将子模块注入主体:Fiddle
angular.module("main", ['sub'])
angular.module("sub", []).controller("subctrl", function ($scope){
$scope.hello = "hello I am sub-module";
})
答案 1 :(得分:0)
对于小型Angular应用,声明angular.module
一次并包含所有依赖项是最好的方法。
但是,大型应用的推荐Angular设置是创建多个modules
和一个主要module
,这取决于其他应用。
angular.module('xmpl.service', []);
angular.module('xmpl.directive', []);
angular.module('xmpl.filter', []);
angular.module('xmpl', ['xmpl.service', 'xmpl.directive', 'xmpl.filter']);
通过此设置,您可以实现创建特定功能模块的目标,并且仍然可以使用$rootScope
。
请参阅此here上的官方文档。
我希望这会有所帮助。