Angularjs $location.path()在状态解析之前已修复
我的页面由一个静态导航栏和它下面的ui视图组成。我正在navbar中检查当前$location:Angularjs $location.path()在状态解析之前已修复,angularjs,promise,angular-ui-router,Angularjs,Promise,Angular Ui Router,我的页面由一个静态导航栏和它下面的ui视图组成。我正在navbar中检查当前$location: <div ng-show="checkPath('/browse')"> foo </div> 但是,我正在使用$stateProvider中的解析(对于url:“/browse”),当我重定向到“/browse”时,navbar的行为就像它已经在“/browse”中一样,即使承诺被拒绝(因此我得到一些闪烁)。换句话说,当我不得不等待1秒钟,等待承诺被拒绝时,在等待期间,“
<div ng-show="checkPath('/browse')"> foo </div>
但是,我正在使用$stateProvider中的解析(对于url:“/browse”),当我重定向到“/browse”时,navbar的行为就像它已经在“/browse”中一样,即使承诺被拒绝(因此我得到一些闪烁)。换句话说,当我不得不等待1秒钟,等待承诺被拒绝时,在等待期间,“ng show”部分显示,在这1秒钟之后,它消失了
.state('browse', {
[...]
resolve: {
foo: ['MyResource', function (MyResource) {
MyResource.checkIfICanRouteToBrowse();
}
]
}
}
我怎样才能解决这个问题
$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
}
});
真是太棒了!同时,我找到了另一个解决方案—只需使用$state.current.name而不是$location.path()
$rootScope.$on('$stateChangeSuccess',
function (event, toState, toParams, fromState, fromParams) {
$scope.checkPath = function(path) {
if ($location.path() === path) {
return true
} else {
return false
}
});