$ location.path()在状态解析之前得到修复

时间:2014-02-06 12:18:55

标签: angularjs promise angular-ui-router

我的页面包含一个静态导航栏和ui-view。我在导航栏中检查当前的$ location:

<div ng-show="checkPath('/browse')"> foo </div>

在导航栏控制器中:

$scope.checkPath = function(path) {
    if ($location.path() === path) {
        return true
    } else {
        return false
    }

但是,我在$ stateProvider中使用了resolve(对于url:'/ browse'),当我重定向到'/ browse'时,navbar的行为就像它已经在'/ browse'中一样,即使承诺是拒绝(所以我得到一些闪烁)。换句话说,当我必须等待1秒才能拒绝承诺时,在等待期间 - 显示'ng-show'部分,并且在此1秒后 - 它就消失了。

.state('browse', {
    [...]
    resolve: {
        foo: ['MyResource', function (MyResource) {
                MyResource.checkIfICanRouteToBrowse();
              }
        ]
    }
}

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

$scope.checkPath = function(path) {
    if ($location.path() === path) {
        return true
    } else {
        return false
    }

执行初始控制器时只会执行一次,状态的任何变化都不会改变这种情况,实现此目的的一种方法

 $rootScope.$on('$stateChangeSuccess',
                function (event, toState, toParams, fromState, fromParams) {
                    $scope.checkPath = toState.name === 'browse'
                });

可能有效的另一种选择,

 $rootScope.$on('$stateChangeSuccess',
                function (event, toState, toParams, fromState, fromParams) {
                    $scope.checkPath = function(path) {
    if ($location.path() === path) {
        return true
    } else {
        return false
    }
                });