習慣沉默2017-05-15 17:08:12
一般我在做项目的时候,服务就做俩用途:
第一,是作为公共方法,比如提交方法,弹出框的某些服务等等类似的通用的服务。
第二,是根据特殊的需求在某几个控制器之间传递参数或对象时候使用,这种情况很少,一般也不推荐~
你说的在服务中去改变顶级控制器的变量,我感觉你是提供了你思路上的一个片段,而不是根本需求点~你的需求是什么?
某草草2017-05-15 17:08:12
没法直接操作,有两种方式:
1、通过回调函数的方式改变值
2、通过传对象参数的方式改变值(array,object)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body ng-app="myApp" >
<p ng-controller="myCtrl">
{{ value.name }} {{ value.value }}
</p>
<hr />
<p ng-controller="myCtrl2">
{{ value.name }} {{ value.value }}
</p>
<script>
var app = angular.module('myApp', []);
app.service('myService', function() {
this.valueSet = function(value){
this.valueFunction(value);
};
this.valueCallback = function(callback){
var newValue = {
name : "hello",
value : "world"
};
this.valueFunction(newValue);
callback(newValue);
};
this.valueFunction = function(value){
value.name += ",";
value.value += "!";
return value;
};
});
app.controller('myCtrl', ['$scope', 'myService', function($scope, myService) {
$scope.value = {
name : "你好",
value : "世界"
};
//回调方式改版 $scope 的值
myService.valueCallback(function(value){
$scope.value = value;
});
}]);
app.controller('myCtrl2', ['$scope', 'myService', function($scope, myService) {
$scope.value = {
name : "你好",
value : "世界"
};
myService.valueSet($scope.value);
}]);
</script>
</body>
</html>