这是我的代码:
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>
点击按钮会更新控制器的范围以及服务吗?我很困惑如何去做这件事。
答案 0 :(得分:1)
是的,因为服务中的privateScope
和$scope.tests
将引用到同一个数组。
如果你想将它们分开,那么你应该从服务中返回一个copy
数组。
深层复制
getScope: function() {
return angular.copy(privateScope);
}
浅拷贝
getScope: function() {
return privateScope.slice();
}