如何管理不同的 Angular 模块依赖关系

How to manage different Angular module dependencies

本文关键字:Angular 模块 依赖 关系 何管理 管理      更新时间:2024-02-17

我是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 应用程序,其中包含许多可重用的部分等......因此不能保证someCtrl总是会在anotherCtrl之前包含在内。换句话说,我需要每个模块都是"自包含的",除非附加到父myApp,否则无法声明控制器/服务。

我知道以后没有办法将依赖项动态(重新(注入模块:myApp.addDependancy(['dep7', 'dep8'])

因此,我能想到的唯一解决方案是在<head>中仅声明一次myApp,其中包含任何潜在控制器/服务的所有可能的依赖项......

var myApp = angular.module('myApp', ['dep1', 'dep2', 'dep3' ... ]);

。并且永远不要重新声明它。这将使管理不同的依赖项更容易,但它基本上不是破坏了依赖项注入的目的吗?因为我会注入一堆不需要的依赖项?

我是否误解了这应该如何工作?解决这个问题的正确方法是什么?非常欢迎指向文档等的链接。

注意:我也读过过度使用相同的父模块(myApp(是一个常见的 Angular 错误,但我需要控制器/服务通过$rootScope$watch等相互通信......所以我认为它们都必须扩展myApp对吗?

这样将子模块注入主模块怎么样: 小提琴

angular.module("main", ['sub'])
angular.module("sub", []).controller("subctrl", function ($scope){
    $scope.hello = "hello I am sub-module";
}) 

对于小型 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

在此处查看有关此内容的官方文档。

我希望这有所帮助。