我的页面包含一个静态导航栏和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();
}
]
}
}
我该如何解决这个问题?
答案 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
}
});