如何更新服务范围?

时间:2013-11-24 21:33:03

标签: javascript angularjs angularjs-scope angularjs-ng-repeat

这是我的代码:

angular.module("testApp", [])
   .service("testService", function() {
      var privateScope = [1,2,3];
      return {
         getScope: function() {
           return privateScope;
         },
         addToScope:function(num) {
           privateScope.push(num);
         }
      }
   })
   .controller("testCtrl", ["$scope","testService"], function($scope, testService) {
      $scope.tests = testService.getScope();
      $scope.current = $scope.tests[0];
      $scope.addToScope = testService.addtoScope;
   });

观点:

<div ng-controller="testCtrl">
    <div ng-repeat="num in tests">
        <div>{{num}}</div>
    </div>
    <input type="button" ng-click="addToScope(Math.round(Math.random() * 10))" />
</div>

点击按钮会更新控制器的范围以及服务吗?我很困惑如何去做这件事。

1 个答案:

答案 0 :(得分:1)

是的,因为服务中的privateScope$scope.tests 引用到同一个数组。

如果你想将它们分开,那么你应该从服务中返回一个copy数组。

深层复制

     getScope: function() {
       return angular.copy(privateScope);
     }

浅拷贝

     getScope: function() {
       return privateScope.slice();
     }