【问题标题】:Unable to understand the controller functionality in Angular JS无法理解 Angular JS 中的控制器功能
【发布时间】:2016-07-31 02:13:08
【问题描述】:

我是 Angular JS 的新手。我正在尝试通过了解控制器功能来获得一些深入的知识。

我遇到了以下代码sn-ps。

var App = angular.module('clientApp', ['ngResource', 'App.filters']);
 App.controller('ClientCtrl', ['$scope',function ($scope) {

   }]);

如果我写它有什么显着的区别:

 var App = angular.module('clientApp', ['ngResource', 'App.filters']);
 App.controller('ClientCtrl', function ($scope) {

   });

我的理解: 我确实明白写在方括号中的东西是该特定模块或控制器的依赖项。但是,我无法理解写作的原因

          "['$scope',function($scope)" 

而不是

   App.controller(controllername,function($scope){

   });

非常感谢任何帮助!

【问题讨论】:

  • 你不必这样做,事实上我认为它使角度代码更难扫描/阅读。我不介意使用它的库和其他黑匣子(至少),但我不认为(希望)微小的应用程序文件会减慢启动速度,因为它们没有被缩小......
  • 你试过我的答案了吗?

标签: javascript angularjs dependencies


【解决方案1】:

它可以缩小 AngularJS 代码。 AngularJS 使用参数名称将值注入控制器函数。在 JavaScript 缩小过程中,这些参数被重命名为更短的字符串。通过使用字符串数组告诉函数注入了哪些参数,AngularJS 在重命名参数时仍然可以注入正确的值。

【讨论】:

    【解决方案2】:

    根据John Papa Style Guide其实应该是这样写的:

    首先,我们创建并命名一个名为“app”的module。我们还创建了一个名为“SomeController”的controller

    angular
        .module('app')
        .controller('SomeController', SomeController);
    

    现在我们将需要的依赖注入到控制器中

    SomeController.$inject = ['dataservice', 'logger'];
    

    现在我们为控制器创建相应的函数。注意依赖项是如何包含的?

    function SomeController(dataservice, logger) {
        var vm = this;
        vm.avengers = [];
    
        activate();
    
        function activate() {
            return getAvengers().then(function() {
                logger.info('Activated Avengers View');
            });
        }
    
        function getAvengers() {
            return dataservice.getAvengers()
                .then(function(data) {
                    vm.avengers = data;
                    return vm.avengers;
                });
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多