AngularJS - 为什么需要依赖模块?

时间:2014-06-11 14:30:26

标签: javascript html angularjs visual-studio-2013

您能告诉我为什么建议将依赖模块添加到模块的创建中吗?

我尝试在不添加模块 TodoApp.controllers TodoApp.services 的情况下运行代码。即使我删除它们,一切都完美运行..(我通过这两个文件调用服务)

app.js

// Injects all the needed modules
var TodoApp = angular.module("TodoApp", [
        "ngRoute",
        "ngResource",
        "TodoApp.controllers",
        "TodoApp.services"
]).
    config(function ($routeProvider) {
        $routeProvider.
            when('/', { controller: "listCtrl", templateUrl: 'list.html' }).
            otherwise({ redirectTo: '/' });
    });

更新

感谢您的回复! :)

不幸的是,这些文件并不共享一个公共变量:

这实际上是我没理解这套问题的原因。对我来说,这段代码无处存储。可能是因为命名中的点符号?

controller.js

angular.module('TodoApp.controllers', []).
    controller('listCtrl', function ($scope, $location, todoApiService) {
        $scope.todos = todoApiService.getMyTodos().query();
});  

services.js

angular.module('TodoApp.services', []).
    factory('todoApiService', function ($resource) {
        var todoApi = {};

        todoApi.getMyTodos = function () {
            return $resource('/api/todo/:id', { id: '@id' }, { update: { method: 'PUT' } });
        };

    return todoApi;
});

1 个答案:

答案 0 :(得分:2)

您无需注入控制器和放大器服务,因为他们必须成为module的一部分。

可以在其他文件中将它们标记为:

TodoApp.controllers(/* ... */)
TodoApp.services(/* ... */)

由于TodoApp变量(反过来是angular.module('TodoApp')),他们已经将自己附加到模块。

看起来你每次都直接调用模块:

angular.module('TodoApp.controllers', []).
    controller('listCtrl', /* etc etc */ );

每种方式,您只需在整个模块中添加更多内容(以典型的圆点表示法),并且角色理解它TodoApp,因为您正在使用它。

但有时您会看到人们以继承模块controllers / directives / services / etc的方式注入其他模块。

var HelperModule = angular.module('HelperModule', /*...*/);
HelperModule.directive('headerLinks', /*...*/);
HelperModule.factory('BaseFactory', /*...*/);
// etc etc

var TodoApp = angular.module("TodoApp", ["HelperModule"]); // <-- Module injected

// TodoApp now contains all the directives/etc from that module!

希望有所帮助!