【发布时间】: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);
现在(如果我错了,请纠正我)还有另外两种方法可以将依赖项添加到控制器和工厂:
- 内联数组
- 隐式注入
我的观点是,我可以使用注入了所有依赖项的应用程序并重写代码,其中控制器和工厂定义将使用内联数组方法添加其依赖项。这是相同的“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