首先说这是我第一次尝试AngularJs(1.6)并且我没有足够的经验,所以我可以提出错误的问题。
所以,最近,我开始研究AngularJS 1.6上的项目构建。
我必须完成的任务是在特定路线中运行脚本。让我们说,目前,脚本是以下简单的:
alert('Hello World');
经过长时间的研究,我发现我必须使用$state
我可以访问$state.current.name
,然后在我的代码中,我可以使用if
语句或用于运行我的代码的switch
语句。
该解决方案的问题在于,如果我在加载应用时尝试访问$state.current.name
,则该值为空字符串。
为确保$state.current.name
在某个时刻返回值,我执行了以下操作:
setTimeout(
() => console.log($state.current.name),
3000
);
然后我可以看到我有我需要的价值。
最后,我还尝试了生命周期组件方法,run()
的{{1}}方法以及路由中的modules
,但没有一个对我有效。
在我做过的任何尝试中,resolver
都是空的,而在我使用$state.current.name
时始终有效。
作为最终解决方案,我发现以下不优雅:
setTimeout
所以,实际的问题是,如果有更好的解决方案来访问给定的路由名称。
编辑#1
我只是尝试一下这段代码:
var interval = setInterval(
() => {
if ( 0 !=== $state.current.name ) {
clearInterval(interval);
alert('Hello World');
}
},
250
);
仍然是空字符串:(。还有其他解决方案吗?
答案 0 :(得分:2)
您可以使用 uiRouter stateChange
事件:
在那里你可以给出检查你的州名的条件:
if(toState.name == 'something')
{
alert(toState);
alert(fromState);
}
成功更改state
后:
您必须在run
功能
.run(['$state', '$rootScope', function($state, $rootScope) {
$rootScope.$on('$stateChangeSuccess', function(e, toState, toParams,
fromState, fromParams) {
if(toState.name == 'something')
{
alert(toState);
alert(fromState);
}
});
}])
当state
更改开始时:
$rootScope.$on('$stateChangeStart', function(e, toState, toParams, fromState, fromParams) {
alert(toState);
alert(fromState);
});