问题描述
我想在factory中获取并改变顶级控制器里的变量 可以办到吗
问题解答
回答1:一般我在做项目的时候,服务就做俩用途:第一,是作为公共方法,比如提交方法,弹出框的某些服务等等类似的通用的服务。第二,是根据特殊的需求在某几个控制器之间传递参数或对象时候使用,这种情况很少,一般也不推荐~
你说的在服务中去改变顶级控制器的变量,我感觉你是提供了你思路上的一个片段,而不是根本需求点~你的需求是什么?
回答2:没法直接操作,有两种方式: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>回答3:
可以是可以,但是不推荐。将controller的数据封装到一个对象里,然后当作参数传到factory的方法里就可以了。

