2015-02-11 2 views
1

У меня возникли проблемы с установкой $ rootScope для Angularjs.

Ниже моя функция

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.

У меня возникли проблемы с получением динамического объема в моем контроллере, который создается в службе.

+0

Я хотел бы использовать $ сферу в вашем случае, как доступ к„тест“в одном контроллере. –

+0

Так можете ли вы установить $ rootScope в $ scope? Мне нужно получить доступ к «области» в другом контроллере. – Demodave

+0

Возможно, вы хотите использовать службу для обмена данными между контроллерами, чтобы не загрязнять '$ rootScope'. Но '$ rootScope' должен быть доступен. –

ответ

2

Для того, чтобы решить мою проблему, я должен был

1) Pass $ rootScope в мой 2-й контроллер

App.controller ($ rootScope) {

2) Установите функцию моего 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 Я инициализирую «$ rootScope.orderId»

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

5) Я повторно вызываю функцию контроллера из моего служебного вызова! Это то, что для меня приложило магию «переменная»

$ rootScope.functionCall();

6) Я также тестирование, чтобы увидеть, если функция существует вызывать разные страницы использовать вспомогательный код, но не может иметь функцию для выполнения

если (TypeOf $ rootScope.functionCall == Функция» «)

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

Как я писал ранее, я использовал бы область использования по возможности, и если вам нужно обмениваться данными через несколько контроллеров, вы можете использовать сервис. Код должен быть что-то вроде:

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

Я уже пробовал что-то вроде этого, как его можно использовать, если служба подключается к http.get. – Demodave

+0

То же самое, в моем примере служба инициализирует сами данные, но вместо этого может инициировать запрос http.get. –

+0

Можете ли вы привести пример? – Demodave

Смежные вопросы