Javascript Angularjs-如何在整个应用程序加载后运行代码?

Javascript Angularjs-如何在整个应用程序加载后运行代码?,javascript,angularjs,Javascript,Angularjs,首先,我要说这是我第一次尝试AngularJs(1.6),我没有足够的经验,所以我可能会问错误的问题 所以,最近,我开始在AngularJS 1.6上开发一个项目 我必须完成的任务是在特定路径中运行脚本。比如说,目前的脚本如下所示: alert('Hello World'); 经过长时间的研究,我发现我必须使用$state来访问$state.current.name,然后在我的代码中,我可以使用if语句或switch语句来运行代码 该解决方案的问题是,如果在加载应用程序时尝试访问$state.

首先,我要说这是我第一次尝试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
);
然后我可以看到我有我需要的价值

最后,我还尝试了生命周期组件方法,
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。