Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs $location.path()在状态解析之前已修复_Angularjs_Promise_Angular Ui Router - Fatal编程技术网

Angularjs $location.path()在状态解析之前已修复

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秒钟,等待承诺被拒绝时,在等待期间,“

我的页面由一个静态导航栏和它下面的ui视图组成。我正在navbar中检查当前$location:

<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
    }
                });