2017-02-15 4 views
0

у меня есть это в моих AppCtrl.js:

$scope.facebookUserDone = $q.defer(); 

, и я хотел бы получить доступ к этой переменной из контроллера открывается вид в:

WeightLevel.js:

$q.when($scope.facebookUserDone.promise).then(function() { 
       $scope.userFaceUrl = userr.pictureUrl; 
}); 

Возможно ли это, или я должен поместить переменную на $ rootScope?

Thanks

ответ

0

Создать сервис и ввести в обоих контроллерах.

+0

Вы можете указать код, пожалуйста? – Louis

2

Создайте фабрику для хранения переменной, а затем введите эту фабрику в оба контроллера.

завод

angular 
    .module('app') 
    .factory('dataservice', dataservice); 

function dataservice($http, logger) { 
    var dataStore = {}; 
    return { 
     setVariable: setVariable, 
     getVariable: getVariable 
    }; 

    function setVariable(name,value) { 
     dataStore[name] = value; 
    } 

    function getVariable(name){ 
     return dataStore[name] 
    } 
} 

Контроллеры

angular.module('app').controller('MyCtrl', myCtrl); 

myCtrl.$inject = ['$scope','dataservice']; 

function myCtrl($scope,dataservice){ 
    dataservice.setVariable('foo','bar'); 
    $scope.foo = dataservice.getVariable('foo'); 
} 

Используя DataService теперь можно SetVariable и сохранить это на заводе, и получить доступ к этому от любого контроллера с помощью dataservice.getVariable метода.

+0

Вы заметили, что это отложенная переменная ($ q)? Смогу ли я легко разрешить и отвергнуть это? – Louis

+0

@ Louis ah Я не сделал этого, лучше всего сохранить переменную на фабрику, а затем, когда она завершит трансляцию события, которое я думаю. – KieranDotCo

+0

ОК спасибо. Кажется сложным! Разве это не простое решение поместить его на rootScope? – Louis

0

Просто чтобы предложить другие решения. Вы можете использовать либо значения, либо события (зависит от вашей установки, так как у вас могут быть проблемы с параллелизмом).

В следующем примере описывается использование угловых значений в вашем случае и предполагается, что ваш модуль называется «приложение».

angular 
    .module('app') 
    .value('states', { 
     facebookUser: null 
    }); 

Затем в AppCtrl, вы можете вводить «государство» значение, установленное его отложенное обещание:

angular 
    .module('app') 
    .controller('AppCtrl', ($q, states) => { 
     states.facebookUser = $q.defer(); 
    }); 

Таким образом, вы можете получить доступ к впрыснуть и значение в ваших других контроллерах.

Использование значений может быть отличным, если вам просто нужно какое-то глобальное состояние. Если вам нужно что-то более надежное, использование сервиса или фабрики может быть более уместным.