无法在指令控制器内访问状态名称

时间:2015-04-16 21:55:03

标签: javascript angularjs angularjs-directive angularjs-scope angular-ui-router

由于某种原因,当我尝试从指令控制器访问时,$ state.current.name始终为空。指令是否在状态评估之前加载?如果是这样,有没有解决这个问题?我需要根据SPA中的状态显示正确的导航

例如,在我看来,我有:<navigation></navigation>

我的指示:

angular.module('app')
        .directive('navigation', function($state){
            return {
                restrict: 'E',
                controller: function() {
                    alert($state.current.name);
                }
            }
         });

我的路线:

angular.module('app')
        .config(function ($stateProvider, $urlRouterProvider, $locationProvider) {
            $urlRouterProvider.otherwise('/home');
            $stateProvider
                    .state('home', {
                        url: '/home',
                        views: {
                            "title": {
                                template: "<title>Home</title>"
                            },
                            "body": {
                                templateUrl: 'app/components/home/homeView.html',
                            },
                            "navigation" : {
                                templateUrl: 'app/shared/navigation/homeNavBarView.html'
                            }
                        }

                    })
        });

我设置它的方式是我单独创建模块,然后我在一个单独的文件中设置路由,并且该指令也在一个单独的文件中。然后将它们按顺序加载到索引文件中。不确定这是否与它有关。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

您的控制器是否还必须将$ state作为参数? 只是一个猜测,因为一切看起来都很坚固:

controller: function($state) {
    alert($state.current.name);
}

答案 1 :(得分:-2)

使用$ state。$current object代替$state.current