Предполагая, что $ rootScope работает правильно, это проблема асинхронности, а не области действия - при попытке запустить:
console.log($rootScope.newBloodneeded); //gives me undefined
...getBloodRequest
не обязательно завершено.Вы устанавливаете $rootScope.newBloodneeded
в then
, который запускается ТОЛЬКО после разрешения getBloodRequest
, что может быть далеко, далеко после завершения журнала консоли.
Bloodrequest.getBloodrequest($routeParams.id).then(function(data) {
...
$rootScope.newBloodneeded = $scope.newBloodneeded;
...
Один забавный тест, который вы можете попробовать, эточтобы обернуть консольный журнал в setTimeout
на долгое время (когда вы гарантированно / уверены, что getBloodRequest
закончен).Это должно доказать вам, что проблема заключается во времени, а не в определении области действия.
В основном:
setTimeout(() => console.log($rootScope.newBloodneeded), 10000000000) // or whatever timing guarantees completion
Решение здесь также состоит в том, чтобы объединить в цепочку любую логику, которая требует $rootScope.newBloodneeded
в .then
.Если ЭТО не работает, вы можете создать Обещание, к которому у вас есть доступ из других мест.(Это выходит за рамки этого вопроса, и нам нужно больше подробностей, чтобы определить наилучшую реализацию).