【问题标题】:AngularJS: Adding dependencies (Inline Array vs Injection)AngularJS:添加依赖项(内联数组与注入)
【发布时间】:2017-07-19 17:39:31
【问题描述】:

所以我在 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. 隐式注入

我的观点是,我可以使用注入了所有依赖项的应用程序并重写代码,其中控制器和工厂定义将使用内联数组方法添加其依赖项。这是相同的“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);
    });
}; }]);

当我尝试这样做时,我的代码不像原始代码那样工作。不知道是语法错误,还是不同风格的应用有什么重要的区别。谁能告诉我为什么这不起作用?

【问题讨论】:

  • 如果你定义my code does not work like the original code会很有帮助。
  • 注入依赖有三种方式:内联数组注解、$inject属性注解和隐式注解。前两个是缩小安全的。最后一个不是。有关详细信息,请参阅AngularJS Developer Guide - Dependency Injection

标签: javascript angularjs spring dependency-injection


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 是这样吗??我已经将$inject 符号与缩小代码一起使用,它就像魅力一样工作。您指的是任何特殊的缩小过程吗?
    • 你是对的。两种方式都可以,但仍然建议使用 ng-annotate。更正了答案。
    猜你喜欢
    • 2017-11-14
    • 2016-04-25
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 2022-10-16
    相关资源
    最近更新 更多