如何在Angular Service函数中设置$ rootScope?

时间:2015-02-11 20:02:01

标签: angularjs service controller angularjs-scope rootscope

我无法为Angularjs设置$ rootScope。

以下是我的功能

App.controller('Controller',
function (UtilityService, $rootScope) {

var setSession = function () {

  $rootScope.test = "yes"; // <-- I get this

  UtilityService.getSession().success(
  function () {       
    $rootScope.test = "No"; // <-- I don't get this How do I get/set this value?       
  });      
};

setSession();   

});

其他信息:

可能有效的方法之一是设置在多个控制器之间交互的服务。有没有人知道如何使用返回http.get json对象的服务来执行此操作。

我在控制器中获取动态范围时遇到问题,该范围在服务中实例化。

2 个答案:

答案 0 :(得分:2)

为了解决我的问题,我必须

1)将$ rootScope传递给我的第二个控制器

  

App.controller($ rootScope){

2)将我的第二个控制器的功能设置为$ rootScope

  

$ rootScope.functionCall = function(){};

3)将我传递的值设置为$ rootScope($ rootScope.orderId)

$rootScope.functionCall = function () {
 Service.getItems($rootScope.orderId).success(
    function(results) {
      $scope.items = results;
    });
};

4)在我的实用程序控制器中,我遍历我的结果,解析它们,并将它们设置为$ rootScope,正如您在#3中看到的那样我正在初始化&#34; $ rootScope.orderId&#34;

angular.forEach(results, function (value, key) {
      if (key != null) {
        $parse(key).assign($rootScope, value);
      }
    });   

5)我正在服务电话中重新调用控制器的功能!这就是我将变量&#34;放入范围&#34;

  

$ rootScope.functionCall();

6)我也在测试是否存在该功能导致不同页面使用实用程序代码但可能没有执行功能

  

if(typeof $ rootScope.functionCall ==&#39; function&#39;)

var setSession = function () {

  UtilityService.getSession().success(
  function (results) {             

    // Place the rootscope sessions in scope
    angular.forEach(results, function (value, key) {
      if (key != null) {
        $parse(key).assign($rootScope, value);
      }
    });                

    // Have to bypass "scope" issues and thus have to execute these fns()
    if (typeof $rootScope.functionCall == 'function') {
      $rootScope.functionCall();
    }

});

};
setSession();

答案 1 :(得分:0)

正如我之前所写,我会尽可能使用$ scope,如果你需要跨多个控制器共享数据,你可以使用服务。代码应该是这样的:

var app = angular.module('myApp', []);

app.factory('$http', 'myService', function ($http, myService) {
    var customers = {};
    $http.get("http://www.w3schools.com/website/Customers_JSON.php")
        .success(function (response) {
            customers = response;
        });

    return {
        customers: customers
    };
});

app.controller('controller_one', function($scope, myService) {
  $scope.serv = myService.customers;
});

app.controller('controller_two', function($scope, myService) {
  $scope.serv = myService.customers;
});