了解AngularJS $ rootScope功能

时间:2014-07-23 21:37:14

标签: angularjs

我正在使用Angular和AngularUI来构建应用程序,我正在通过$stateChangeStart事件实现一些路由保护。当我的应用程序首次启动时,我想将$rootScope.currentChevron初始化为V形列表中的第一个元素。从那时起,另一个控制器将在其自己的范围内修改此currentChevron对象,但看起来这些更改不会持续回到$rootScope。这是我的代码

Angular Run

app.run(function ($rootScope) {
        $rootScope.Chevrons = [
            {
                'name': 'Start',
                'state': 'new.start',
                'active': true,
                'next': 'review-accounts'
            },
            {
                'name': 'Review Accounts',
                'state': 'new.review-accounts',
                'active': false,
                'next': 'settings'
            },
            {
                'name': 'Backup Settings',
                'state': 'new.settings',
                'active': false,
                'next': 'final-review'
            },
            {
                'name': 'Final Review',
                'state': 'new.final-review',
                'active': false,
                'next': null
            }
        ];
        $rootScope.currentChevron = $rootScope.Chevrons[0];


        $rootScope.$on('$stateChangeStart',
            function (event, toState, toParams, fromState, fromParams) {
                var e = event;
                // This is where we need to do route protection

                // First lets find what Chevron we are currently on
                var indexOfChev = $rootScope.Chevrons.indexOf($rootScope.currentChevron);
            });
    });

内部控制器

$scope.navigate = function (chevron, ind) {
            $state.go(chevron.state);

            $scope.step.active = false;
            chevron.active = true;
            $scope.step = chevron;
            $scope.currentChevron = $scope.step;
            $scope.Index = ind;

        }

问题是在navigate执行后,$rootScope.currentChevron未更新为新的{{1}}。有没有办法让这个功能起作用?

1 个答案:

答案 0 :(得分:0)

将$ rootScope注入控制器,而不是

$scope.currentChevron = $scope.step;

$rootScope.currentChevron = $scope.step;