Javascript Angularjs-如何在整个应用程序加载后运行代码?
首先,我要说这是我第一次尝试AngularJs(1.6),我没有足够的经验,所以我可能会问错误的问题 所以,最近,我开始在AngularJS 1.6上开发一个项目 我必须完成的任务是在特定路径中运行脚本。比如说,目前的脚本如下所示:Javascript Angularjs-如何在整个应用程序加载后运行代码?,javascript,angularjs,Javascript,Angularjs,首先,我要说这是我第一次尝试AngularJs(1.6),我没有足够的经验,所以我可能会问错误的问题 所以,最近,我开始在AngularJS 1.6上开发一个项目 我必须完成的任务是在特定路径中运行脚本。比如说,目前的脚本如下所示: alert('Hello World'); 经过长时间的研究,我发现我必须使用$state来访问$state.current.name,然后在我的代码中,我可以使用if语句或switch语句来运行代码 该解决方案的问题是,如果在加载应用程序时尝试访问$state.
alert('Hello World');
经过长时间的研究,我发现我必须使用$state
来访问$state.current.name
,然后在我的代码中,我可以使用if
语句或switch
语句来运行代码
该解决方案的问题是,如果在加载应用程序时尝试访问$state.current.name
,则该值为空字符串
为了确保$state.current.name
在某个时刻返回一个值,我执行了以下操作:
setTimeout(
() => console.log($state.current.name),
3000
);
然后我可以看到我有我需要的价值
最后,我还尝试了生命周期组件方法,modules
的run()
方法,最后是路由中的resolver
,但没有一种方法对我有效
在我所做的任何尝试中,$state.current.name
都是空的,而当我使用setTimeout
时,它总是起作用
作为最终解决方案,我发现以下问题并不完美:
var interval = setInterval(
() => {
if ( 0 !=== $state.current.name ) {
clearInterval(interval);
alert('Hello World');
}
},
250
);
因此,实际的问题是,是否有更好的解决方案来访问给定的路由名称
编辑#1
我只是尝试一下这段代码:
// ...
require('angular')
.module(config.appName, moduleCollection)
.run(
$state => console.log($state.current.name)
);
并且仍然得到空字符串:(.任何其他解决方案?您可以使用
uiRouter stateChange
事件:
在这里,您可以提供检查您的州名的条件:
if(toState.name == 'something')
{
alert(toState);
alert(fromState);
}
成功更改状态时:
$rootScope.$on('$stateChangeStart', function(e, toState, toParams, fromState, fromParams) {
alert(toState);
alert(fromState);
});
您必须在run
函数中使用它们
.run(['$state', '$rootScope', function($state, $rootScope) {
$rootScope.$on('$stateChangeSuccess', function(e, toState, toParams,
fromState, fromParams) {
if(toState.name == 'something')
{
alert(toState);
alert(fromState);
}
});
}])
当状态开始更改时:
$rootScope.$on('$stateChangeStart', function(e, toState, toParams, fromState, fromParams) {
alert(toState);
alert(fromState);
});
您可以使用
uiRouter stateChange
事件:
在这里,您可以提供检查您的州名的条件:
if(toState.name == 'something')
{
alert(toState);
alert(fromState);
}
成功更改状态时:
$rootScope.$on('$stateChangeStart', function(e, toState, toParams, fromState, fromParams) {
alert(toState);
alert(fromState);
});
您必须在run
函数中使用它们
.run(['$state', '$rootScope', function($state, $rootScope) {
$rootScope.$on('$stateChangeSuccess', function(e, toState, toParams,
fromState, fromParams) {
if(toState.name == 'something')
{
alert(toState);
alert(fromState);
}
});
}])
当状态开始更改时:
$rootScope.$on('$stateChangeStart', function(e, toState, toParams, fromState, fromParams) {
alert(toState);
alert(fromState);
});
应该是正确的地方。你用
运行时尝试了什么?
?它怎么不起作用?@Phil这是我想的。老实说,我不记得昨天我是如何尝试运行的()
,因为我做了一个实验。从我记得的情况来看,当我在运行()中做控制台.log(arguments)
method,我获取了一个大的参数列表,没有一个参数与路由相关(至少在我可以搜索的级别之前)。你认为我可以在run()
方法中注入$state
吗?我没有找到任何引用。你可以在run
hmmm!!:)中注入任何提供程序值@Phil让我试试,我会回来的!:)谢谢。@Phil我刚刚更新了我的问题。我尝试了一下,但在run
method上它是空的(应该是正确的位置。你用run
尝试了什么?它怎么不起作用?@Phil这是我想的。老实说,我不记得昨天我是如何尝试run()
的,就像我做了一次实验一样。从我记得的,当我在run()中做console.log(arguments)
时
method,我获取了一个大的参数列表,没有一个参数与路由相关(至少在我可以搜索的级别之前)。你认为我可以在run()
方法中注入$state
吗?我没有找到任何引用。你可以在run
hmmm!!:)中注入任何提供程序值@Phil让我试试,我会回来的!:)谢谢。@Phil我刚刚更新了我的问题。我尝试了一下,但在run
method上它是空的(谢谢你的回复。给我一分钟试试看,然后我又回来了:)这个解决方案非常有效!!:)非常感谢@Sravan。谢谢你的回复。给我一分钟试一试,然后我又回来了:)这个解决方案非常有效!!:)非常感谢@Sravan。