How do you set $rootScope within Angular Service function?

限于喜欢 提交于 2019-12-11 10:36:11

问题


I'm having trouble setting $rootScope for Angularjs.

Below is my function

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();   

});

Additional Info:

One of the ways that might work is to set up a service that is interacted between multiple controllers. Does anybody know how to do this with the service returning an http.get json object.

I'm having trouble getting a dynamic scope in my controller that is instantiated within a service.


回答1:


In order to address my issue I had to

1) Pass $rootScope into my 2nd controller

App.controller($rootScope) {

2) Set my 2nd controller's function to $rootScope

$rootScope.functionCall = function () {};

3) Set my passed value to $rootScope ($rootScope.orderId)

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

4) within my utility controller, I loop through my results, parsing them, and setting them to $rootScope as you can see in #3 I am initializing "$rootScope.orderId"

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

5) I am re-calling the controller's function from within my service call! This is what did the magic for me putting my variable "in scope"

$rootScope.functionCall();

6) I am also testing to see if the function exist cause different pages utilize the utility code but may not have the function to execute

if (typeof $rootScope.functionCall == 'function')

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();



回答2:


As I wrote before I would use $scope when possible and if you need to share data across multiple controllers you can use a service. The code should be something like:

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;
});


来源:https://stackoverflow.com/questions/28463410/how-do-you-set-rootscope-within-angular-service-function

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!