Javascript “用户界面路由器集成器”;TypeError:无法读取属性';全球';“无效”的定义;
我正在使用ui路由器状态的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
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”,但并非所有情况下都可以,正如我在前面的评论中所述。