Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.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
Javascript “用户界面路由器集成器”;TypeError:无法读取属性';全球';“无效”的定义;_Javascript_Angularjs_Angular Ui Router - Fatal编程技术网

Javascript “用户界面路由器集成器”;TypeError:无法读取属性';全球';“无效”的定义;

Javascript “用户界面路由器集成器”;TypeError:无法读取属性';全球';“无效”的定义;,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,我正在使用ui路由器状态的onEnter属性重定向到不同的状态,具体取决于用户类型 问题是,当在ui sref中使用“仪表板”状态(带onEnter的一个)时,它会给出TypeError:无法读取$state.transition.resolved.then.$state.transition的null属性'globals'。如果使用了ng click带$state.go('dashboard'),则会出现相同的错误 我还创建了一个非常简单的示例,没有解决这个问题 我错过什么了吗 模板中 &l

我正在使用ui路由器状态的
onEnter
属性重定向到不同的状态,具体取决于用户类型

问题是,当在
ui sref
中使用“仪表板”状态(带onEnter的一个)时,它会给出
TypeError:无法读取$state.transition.resolved.then.$state.transition的null属性'globals'。如果使用了
ng click
带$state.go('dashboard'),则会出现相同的错误

我还创建了一个非常简单的示例,没有解决这个问题

我错过什么了吗

模板中

<a href="" ui-sref="dashboard">DASHBOARD</a>
廷利·科布伦斯基的回答

该问题是由于将仪表板状态上的OnNet属性与$state.go()和ui sref一起使用而导致的

作为解决办法:

  • 在onEnter属性函数中使用$location.path()
  • 并使用
    ng href=“/”
    $location.path('/')
    导航到“dashboard”状态

  • 在一个onEnter函数中调用$state.go会导致问题,因为某些类型的变量设置不正确


    他们在帖子中建议的一个解决方案/技巧是尝试使用$location.path()函数。

    调用$state.go进入onEnter函数会导致问题,因为某些变量设置不正确。下面是同一问题的git问题


    他们在帖子中建议的一个解决方案/技巧是尝试使用$location.path()函数。

    为了避免这个问题,我尝试了
    $timeout
    和宾果游戏。它为我解决了这个问题。可能只是给ui路由器代码流一些喘息的空间

    onExit:  function($timeout){
               'ngInject';
               $timeout(function(){
                 // your code
               });
             }
    

    为了避免这个问题,我尝试了
    $timeout
    和宾果游戏。它为我解决了这个问题。可能是,它只是给了ui路由器代码流一些喘息的空间

    onExit:  function($timeout){
               'ngInject';
               $timeout(function(){
                 // your code
               });
             }
    

    除了上面@Thinley Koblensky的答案之外,我发现更好的解决方法是捕获
    $stateChangeStart
    事件,然后将其委托给各个州,如下所示:

    .run(function($rootScope, $injector) {
        $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
            if (!toState.data || !angular.isFunction(toState.data.stateChangeStart)) return;
              $injector.invoke(toState.data.stateChangeStart, null, {
                event: event,
                toState: toState,
                toParams: toParams,
                fromState: fromState,
                fromParams: fromParams
              });
         });
      })
    

    除了上面@Thinley Koblensky的答案之外,我发现更好的解决方法是捕获
    $stateChangeStart
    事件,然后将其委托给各个州,如下所示:

    .run(function($rootScope, $injector) {
        $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
            if (!toState.data || !angular.isFunction(toState.data.stateChangeStart)) return;
              $injector.invoke(toState.data.stateChangeStart, null, {
                event: event,
                toState: toState,
                toParams: toParams,
                fromState: fromState,
                fromParams: fromParams
              });
         });
      })
    

    在状态配置解析中使用$state.go()很可能会导致您的问题。我以前已经处理过这个问题。现在在我的手机上,但如果没有人回答,我会给出更好的解释。使用$state.go()在状态配置中,resolve很可能导致您的问题。我以前已经处理过。现在在我的手机上,但如果没有人回答,我会给出更好的解释。是的,这就是问题的原因。解决方案/破解并不总是有效。例如,我需要重定向到$stateChangeError和$stateChangeStart中的“dashboard”但是$state.go('dashboard')和$location.path('/')在那里都不起作用。在OneNet中更改$state.go至$locatio.path,并将
    ui sref=“dashboard”
    更改为
    ng ref=“/”
    $state.go('dashboard')
    更改为
    $location.path('/')
    “转到仪表板”的任何地方正如我在前面的评论中所描述的那样,在某些情况下是需要的,但不是所有情况下都需要。是的,这导致了问题。解决方案/破解并不总是有效。例如,我需要重定向到$stateChangeError内的“dashboard”和$stateChangeStart内的“dashboard”,但既不能重定向到$state.go('dashboard'),也不能重定向到$location.path('/')将$state.go更改为onnet中的$locatio.path,并将
    ui sref=“dashboard”
    更改为
    ng ref=“/”
    $state.go('dashboard')
    更改为
    $location.path('/')
    ,在某些情况下需要“转到dashboard”,但并非所有情况下都可以,正如我在前面的评论中所述。