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

标签 javascript html angularjs visual-studio-2013

你能告诉我为什么建议在创建模块时添加依赖模块吗?

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

应用程序.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: '/' });
    });

更新

感谢您的回复! :)

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

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

Controller .js

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

服务.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;
});

最佳答案

您不需要注入(inject) Controller 和服务,因为无论如何它们都必须是模块的一部分。

可以在其他文件中像这样标记它们:

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

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

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

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

无论哪种方式,您都只是向整个模块添加更多内容(以典型的点表示法),并且 Angular 理解它是 TodoApp,因为您是从它开始的。

但有时您会看到人们以继承模块 Controller /指令/服务等的方式注入(inject)其他模块。

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!

希望对您有所帮助!

关于javascript - AngularJS - 为什么需要模块依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24165595/

相关文章:

javascript - 根据内容调整一行所有面板的高度

html - 是什么导致我的 CSS Accordion 不下降?

javascript - AngularJS 是一种可以代替 JQuery 用于动画的 "front-end"语言吗?

javascript - Kendo Grid 工具栏项目未触发单击功能 :

javascript - 如何在单击按钮时从 ng-repeat 的特定列过滤 GridView 数据

javascript - 如何使用javascript获取div的值

javascript - 将 jQuery 翻译为纯 JavaScript

html - 使用 XSLT 为 XML 中的唯一元素着色

javascript - 滚动文本框并设置属性

Javascript 生成更改位置