我应该如何将Angular服务与工厂一起用于代码重用?

时间:2015-02-25 02:21:51

标签: angularjs factory angular-services

我有一些角度控制器,总是需要存储一个项目数组,将元素推送到它并使其可访问。

我想我可以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();
  });

但是,我无法使其正常工作,似乎使用服务中的getOrderaddItem无法取得任何效果。

我做错了什么?

我提供plunkr example

1 个答案:

答案 0 :(得分:1)

I forked your plunker.

您可以将范围变量直接绑定到函数。

$scope.addItem = newOrdersService.addItem;

可替换地:

$scope.addItem = function(item){
    newOrdersService.addItem(item);
}

$scope.addItem = newOrdersService.addItem()不起作用,因为这只会在加载控制器时运行一次addItem。

当你添加一个新项目时,创建一个新对象很重要,否则你的数组中的对象将继续绑定到ng-models(当你在文本输入中输入内容时会更改)。 / p>