我有一些角度控制器,总是需要存储一个项目数组,将元素推送到它并使其可访问。
我想我可以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:
答案 0 :(得分:1)
您可以将范围变量直接绑定到函数。
$scope.addItem = newOrdersService.addItem;
可替换地:
$scope.addItem = function(item){
newOrdersService.addItem(item);
}
$scope.addItem = newOrdersService.addItem()
不起作用,因为这只会在加载控制器时运行一次addItem。
当你添加一个新项目时,创建一个新对象很重要,否则你的数组中的对象将继续绑定到ng-models(当你在文本输入中输入内容时会更改)。 / p>