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

时间:2018-04-26 06:19:01

标签: javascript angularjs

首先说这是我第一次尝试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
);

仍然是空字符串:(。还有其他解决方案吗?

1 个答案:

答案 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);
}); 

Here is the Documentation