AngularJS $scope

Есть контроллер:

angular.module('jsRouter.controllers', [])
        .controller('router', ['$rootScope', function($rootScope){
            $rootScope.isExistRoute =  function (route){
                return $rootScope.routes[route] !== 'undefined'? true: false;
            };
        }])
        .run(['$rootScope', 'loadRoutes', function ($rootScope, loadRoutes){
            loadRoutes.get().then(function (response){
                $rootScope.routes = response.data;
            });;
        }]);


Есть директива:
angular.module('jsRouter.directives',[])
        .directive('routerHref', ['$rootScope', function ($rootScope){
            return {
                restrict: 'A',
                replace: true,
                scope: true,
                link: function ($scope, element, attrs){
                    console.log($scope.$parent);
                }
            };
        }]);


В линке директивы вывожу в консоль $rootScope:
Scope {$id: "002", $$childTail: $$childScopeClass, $$childHead: $$childScopeClass, $$prevSibling: null, $$nextSibling: null…}
$$asyncQueue: Array[0]
$$childHead: $$childScopeClass
$$childScopeClass: function () {
$$childTail: $$childScopeClass
$$destroyed: false
$$isolateBindings: Object
$$listenerCount: Object
$$listeners: Object
$$nextSibling: null
$$phase: null
$$postDigestQueue: Array[0]
$$prevSibling: null
$$watchers: null
$id: "002"
$parent: null
$root: Scope
routes: Array[5]
this: Scope
__proto__: Scope


Вижу что в объекте есть массив с роутами, заменяю в директиве console.log($scope.$parent) на console.log($scope.$parent.routes) - пишет undefined!!!

Что я делаю не так??
  • Вопрос задан
  • 2723 просмотра
Решения вопроса 1
Скорее всего этот массив роутов получается с сервера и именно в тот момент когда срабатывает console.log($scope.$parent.routes) он еще не имеет значения. В первом же случае к моменту как вы просматриваете объект выведенный в консоль он успевает загрузиться.

Но опять же это только предположение. Общую картину можно оценить взглянув на весь код а не на конкретный отрывок.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Если у вас возникают штуки типа "$scope.$parent" то вы явно что-то не так делаете.
Ответ написан
Комментировать
maxaon
@maxaon
Без полного кода, со скоупами разобратся крайне сложно.
Попробуйте $scope.$parent.$parent, может еще одна директива создает изолированный скоуп. И где вы выводите $rootScope?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы