Angularjs 模块如何在没有依赖项的情况下访问另一个模块
我有点搞不清楚模块是如何加载的。以以下代码为例:Angularjs 模块如何在没有依赖项的情况下访问另一个模块,angularjs,angularjs-module,Angularjs,Angularjs Module,我有点搞不清楚模块是如何加载的。以以下代码为例: var app = angular.module("app", [ "app.widgets", "app.core"]); var core = angular.module("app.core", []); core.factory("foo", function(){ return { ping: function(){ return "pong"; }
var app = angular.module("app", [ "app.widgets", "app.core"]);
var core = angular.module("app.core", []);
core.factory("foo", function(){
return {
ping: function(){
return "pong";
}
}
});
var widgets = angular.module("app.widgets", []);
widgets.controller("WidgetController", function($scope, foo){
$scope.items = [1,2,3,foo.ping()];
});
<body ng-app="app">
<ul ng-controller="WidgetController">
<li ng-repeat="item in items">
{{item}}
</li>
</ul>
</body>
var-app=angular.module(“app”、[“app.widgets”、“app.core”);
var core=angular.module(“app.core”,[]);
core.factory(“foo”,function(){
返回{
ping:函数(){
返回“pong”;
}
}
});
var widgets=angular.module(“app.widgets”,[]);
widgets.controller(“WidgetController”,函数($scope,foo){
$scope.items=[1,2,3,foo.ping()];
});
-
{{item}}
我对我的“app.widgets”模块如何访问“app.core”模块感到困惑,即使它没有声明为依赖项
这似乎是因为“app.widgets”和“app.core”都是在第三个模块中声明的,这非常方便。但我觉得这不是很直观
所以我想我的问题是“如果两个模块在第三个模块中声明,它们会相互“了解”吗?”。这是记录在案的行为吗?您在应用程序模块中包含了两个模块,即
[“app.widgets”,“app.core”]
,然后您在应用程序内部使用WidgetController
。尽管您没有对app.widgets
module建立任何明确的依赖关系,但您仍然可以从app模块内部的模块app.core
访问工厂foo,因为您的app模块依赖于app.core
。
如果你尝试
<body ng-app="widgets ">
<ul ng-controller="WidgetController">
<li ng-repeat="item in items">
{{item}}
</li>
</ul>
</body>
-
{{item}}
这是行不通的,因为在您的ng app=“widgets”
中定义的工厂foo与之不同。
因此,为了理解,请将应用程序模块视为两个模块的容器
[“app.widgets”,“app.core”]
,您可以在其中访问所有控制器、工厂等,就像它们是应用程序模块本身的一部分一样。我认为它是这样的:
1) “app”已注入“app.core”,因此所有“app.core”服务、工厂等都可用于“app”模块
2) 在“app”模块中,您还可以插入“app.widgets”,然后它可以访问“app”模块可以访问的所有内容
所以:app访问app.core&&app.widgets访问app->app.widgets访问app.core
我不确定它是否被记录在某个地方,如果是的话,我很乐意阅读。
查看此脚本了解更多有趣的内容:
似乎父模块上声明的foo没有被子模块中的foo覆盖。
如果注入模块都有foo,则使用后者:
var app = angular.module("app", [ "app.core", "app.widgets"]);
使app.widgets.foo成为app.foo和app.core.foo。它覆盖app.core.foo 刚刚添加了html@Naeem ShaikhYou应该阅读该部分。