AngularJS:添加依赖项(内联数组与注入)

时间:2017-02-28 16:30:31

标签: javascript angularjs spring dependency-injection

所以我在GitHub(https://github.com/spring-projects/spring-boot)上找到了一个练习Spring Boot的项目。该应用程序允许用户创建项目列表及其描述;还有删除列表中项目的功能。该项目试图使用AngularJS将自己暴露给SPA(单页应用程序)。

代码使用注入向已定义的控制器和工厂添加依赖项。这是一个名为" controller.js"的示例类。它使用了这个实现:

var AppController = function($scope, Item) {
    Item.query(function(response) {
      $scope.items = response ? response : [];
    });

    $scope.addItem = function(description) {
      new Item({
        description: description,
        checked: false
      }).$save(function(item) {
        $scope.items.push(item);
      });
      $scope.newItem = "";
    };

    $scope.updateItem = function(item) {
      item.$update();
    };

    $scope.deleteItem = function(item) {
      item.$remove(function() {
        $scope.items.splice($scope.items.indexOf(item), 1);
      });
    };
  };

  AppController.$inject = ['$scope', 'Item'];
  angular.module("myApp.controllers").controller("AppController", AppController);

现在(如果我错了,请纠正我)还有另外两种方法可以向控制器和工厂添加依赖项:

  1. 内联数组
  2. 隐式注射
  3. 我的观点是,我可以使用注入了所有依赖项的应用程序,并重写代码,其中控制器和工厂定义将使用内联阵列方法添加其依赖项。这是" controller.js"但使用内联数组:

    angular.module("myApp.controllerModule").controller("AppController", ['$scope', 'Item', function($scope, Item){
    Item.query(function(response) {
        $scope.items = response ? response : [];
    });
    
    $scope.addItem = function(description) {
        new Item({
            description: description,
            checked: false
        }).$save(function(item) {
            $scope.items.push(item);
        });
        $scope.newItem = "";
    };
    
    $scope.updateItem = function(item) {
        item.$update();
    };
    
    $scope.deleteItem = function(item) {
        item.$remove(function() {
            $scope.items.splice($scope.items.indexOf(item), 1);
        });
    }; }]);
    

    当我尝试这样做时,我的代码不像原始代码那样工作。我不知道它是否是语法错误,或者在不同样式的应用程序中是否存在一些重要差异。谁能告诉我为什么这不起作用?

2 个答案:

答案 0 :(得分:0)

我在两个代码示例中看到的唯一区别是模块的名称。由于您没有提供错误消息,我假设您没有在模块应该注入的所有文件中将myApp.controllers更改为myApp.controllerModule

答案 1 :(得分:0)

您可以使用ng-annotate从参数名称自动生成这些注释。这是大多数项目应该使用的。手动复制依赖项不太实用。