【问题标题】:Passing dependencies to a module angular将依赖项传递给模块
【发布时间】:2016-10-08 18:43:06
【问题描述】:

所以我对 Angular 有点陌生,但不是 javascript。我正在使用其他人编写的应用程序,并试图在现有模块中创建一个新控制器。就依赖关系而言,控制器几乎彼此相同。我的问题是如何将相同的依赖项传递给两个控制器?看来您可以像这样传递它们:

`angular.module('ApertureForm', ['dialogs.main','dialogs.default-translations','ui.bootstrap'])`

当我对两个模块都这样做时,无论出于何种原因,控制器都会返回 undefined。那就是我卡住的地方。上面的代码之类的依赖怎么传入?任何建议都会很棒。

【问题讨论】:

    标签: javascript angularjs controller dependencies


    【解决方案1】:

    angular.module('ApertureForm', ['dialogs.main','dialogs.default-translations','ui.bootstrap']) 告诉 AngularJS 初始化一个名为 ApertureForm 的 Angular 模块,并将其他 Angular 模块加载为 该模块的依赖项。

    要将依赖项添加到控制器,请执行以下操作:

    angular.module('ApertureForm').controller('ControllerName', function($scope, $location, $timeout) {...});

    angular.module('ApertureForm') = 获取名为 ApertureForm 的模块。

    然后创建一个名为ControllerName 的控制器。闭包是您注入依赖项的地方。

    要防止控制器的依赖项在缩小时被重命名,您可以这样做:

    angular
        .module('ApertureForm')
        .controller('ControllerName', ControllerName);
    
    
        ControllerName.$inject = ['$scope', '$location', '$timeout'];
    
        function ControllerName($scope, $location, $timeout) {...}
    

    文档:https://docs.angularjs.org/guide/di

    【讨论】:

    • 好的,这完全有道理。你能解释一下这个模块的第二个参数是什么吗?例如angular.module('ModuleName', [])
    • angular.module('ModuleName', []) 是 setter,angular.module('ModuleName') 是 getter。该数组用于任何依赖项,但即使没有,也必须传递给angular.module 以设置/创建模块。
    • @JeffNeal 看看这个链接中的依赖注解部分:docs.angularjs.org/guide/di
    【解决方案2】:

    在angular.module('ApertureForm',[ 中列出要注入模块的模块。您为您拥有的每个模块列出一次。如果您想在其中一个模块中创建一个控制器,那么您可以使用:

    var myApp = angular.module('ApertureForm');
    
    myApp.controller('GreetingController', ['$scope', function($scope) {
      $scope.greeting = 'Hola!';
    }]);
    

    这里的$scope是控制器的依赖

    您可以阅读更多关于它的信息here

    【讨论】:

      【解决方案3】:

      AngularJS Controllers 和 Dependency Injection:

      angular
          .module('ApertureForm', ['dialogs.main','dialogs.default-translations','ui.bootstrap'])
          .controller('FormController', ['$scope', '$http', function($scope, $http) { 
              // FormController code...
          }])
          .controller('WebinarController', ['$scope', '$http', function($scope, $http) {
              // WebinarController code...
          }]);
      

      【讨论】:

      • 但这是我遇到的问题,我不太明白。也许我使用了错误的术语。 angular .module('ApertureForm', ['dialogs.main','dialogs.default-translations','ui.bootstrap']) .controller('MyController', ['$scope', 'depService', function($scope, depService) { // your code... }]); 如果我尝试在同一个模块下创建另一个控制器,例如将相同的第二个参数传递给模块,它会失败。
      • 创建了一个关于如何在 AngularJS 中使用控制器和依赖注入的示例;还添加了官方文档的链接..您是否安装了所有依赖项?您在控制台中遇到错误吗?你能展示你创建的控制器的代码吗?
      • pastebin.com/EPZLtHkn 以相同的模块名称创建另一个控制器并传入相同的参数完全失败。两者之间唯一真正的区别是控制器名称。
      • 在同一个AngularJS模块ApertureForm你可以有多个控制器..看到我的答案已经更新
      • 所以如果传入模块期间,应该是可用的吧?我认为这就是我缺少的链接所在。因为无论如何模块都应该知道传入的其他依赖项。在这一点上,控制器是第二个想法。也许它也应该以不同的方式声明。也许像angular.module('ApertureForm', dependencies); 然后在另一个文件中或独立于该代码块声明我的控制器。我现在明白了。完全有道理!
      【解决方案4】:

      感谢大家的帮助!所有这些对于学习 angular 的结构以及如何正确使用框架都非常有用。 @Yosvel Quintero 能够解释该模块的工作原理以及我收到错误的原因。当依赖项被传递到模块而不是控制器时,它们对所有控制器都可用,因为它自己的模块现在知道依赖项,这就是为什么我在尝试再次传递它们时不断出错的原因。希望针对该问题给出的答案也可以帮助某人学习角度。谢谢大家!

      【讨论】:

        猜你喜欢
        • 2017-08-07
        • 2019-12-30
        • 2013-11-29
        • 1970-01-01
        • 2016-05-30
        • 2021-04-22
        • 1970-01-01
        • 1970-01-01
        • 2019-07-26
        相关资源
        最近更新 更多