我应该如何将 Angular 服务与工厂一起使用以实现代码重用?
How should I use Angular services with factories for code reuse?
我有一些 Angular 控制器,其中总是需要存储项目数组,将元素推送到其中并使其可访问。
然后我想我可以有一个 ServicesModule
和一个 工厂 提供这样的服务。
所以我得到了这个服务声明:
angular.module('ServicesModule',[]);
angular.module('ServicesModule')
.factory('newOrdersService', function($rootScope,$http) {
var newOrder = [];
return {
getOrder: function() {return newOrder;},
addItem: function(item) {newOrder.push(item);}
};
});
我在使用服务时得到了这个控制器示例:
angular.module('app',['ServicesModule']);
angular.module('app').
controller('MainController', function($scope, $http, newOrdersService){
$scope.order = newOrdersService.getOrder();
$scope.addItem = newOrdersService.addItem();
});
但是我无法让它工作,似乎使用服务中的 getOrder
或 addItem
不会产生任何效果。
我做错了什么?
我提供一个plunkr example:
您可以将作用域变量直接绑定到函数。
$scope.addItem = newOrdersService.addItem;
或者:
$scope.addItem = function(item){
newOrdersService.addItem(item);
}
$scope.addItem = newOrdersService.addItem()
不起作用,因为这只会在控制器加载时 运行 您的 addItem 一次。
并且当您添加一个新项目时,创建一个新对象很重要,否则您数组中的对象将继续绑定到 ng-models(并在您向文本输入中输入内容时更改) .
我有一些 Angular 控制器,其中总是需要存储项目数组,将元素推送到其中并使其可访问。
然后我想我可以有一个 ServicesModule
和一个 工厂 提供这样的服务。
所以我得到了这个服务声明:
angular.module('ServicesModule',[]);
angular.module('ServicesModule')
.factory('newOrdersService', function($rootScope,$http) {
var newOrder = [];
return {
getOrder: function() {return newOrder;},
addItem: function(item) {newOrder.push(item);}
};
});
我在使用服务时得到了这个控制器示例:
angular.module('app',['ServicesModule']);
angular.module('app').
controller('MainController', function($scope, $http, newOrdersService){
$scope.order = newOrdersService.getOrder();
$scope.addItem = newOrdersService.addItem();
});
但是我无法让它工作,似乎使用服务中的 getOrder
或 addItem
不会产生任何效果。
我做错了什么?
我提供一个plunkr example:
您可以将作用域变量直接绑定到函数。
$scope.addItem = newOrdersService.addItem;
或者:
$scope.addItem = function(item){
newOrdersService.addItem(item);
}
$scope.addItem = newOrdersService.addItem()
不起作用,因为这只会在控制器加载时 运行 您的 addItem 一次。
并且当您添加一个新项目时,创建一个新对象很重要,否则您数组中的对象将继续绑定到 ng-models(并在您向文本输入中输入内容时更改) .