Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 在启动angular应用程序时执行代码_Angularjs - Fatal编程技术网

Angularjs 在启动angular应用程序时执行代码

Angularjs 在启动angular应用程序时执行代码,angularjs,Angularjs,有没有办法在启动AngularJS应用程序时执行一些JavaScript代码?我有一些常用代码,我需要确保在任何应用程序指令/控制器之前运行这些代码。我不想被绑定到路由和ng视图,我需要它成为任何ng应用程序的通用解决方案 我想我可以使用模块配置,实际上我已经尝试过了,但我正在尝试调用一个服务,在模块加载时似乎无法访问该服务。您可以使用模块API中的“run”函数: 此代码将在创建喷油器后执行,因此您应该能够获得您希望使用的服务。您可以这样做 var app = angular.module(

有没有办法在启动AngularJS应用程序时执行一些JavaScript代码?我有一些常用代码,我需要确保在任何应用程序指令/控制器之前运行这些代码。我不想被绑定到路由和
ng视图
,我需要它成为任何
ng应用程序
的通用解决方案

我想我可以使用模块配置,实际上我已经尝试过了,但我正在尝试调用一个服务,在模块加载时似乎无法访问该服务。

您可以使用模块API中的“run”函数:

此代码将在创建喷油器后执行,因此您应该能够获得您希望使用的服务。

您可以这样做

var app = angular.module('myApp',[]);

app.run(function($rootScope) {
    //.....
});
短版 您需要使用
module.run(initializationFn)
函数,其中实际的方法可以依赖于服务。您可以按常规方式注入依赖项:

var app = angular
    .module('demoApp', [])
    .run(['$rootScope', function($rootScope) {
        $rootScope.bodyClass = 'loading';
        // Etc. Initialize here.
    }]);
该示例的初始化依赖于
$rootScope
,但您也可以注入服务等

较长版本 这是相当简洁的,其他(优秀)答案也是如此。让我将其合并到一个更详细的示例中,该示例还显示了如何在
初始化fn
中插入
工厂创建的服务:

var-app=angular.module('demoApp',[]);
//我们也将在.run方法中使用的服务
app.factory('myService',[function()){
var服务={currentItem:{started:new Date()}};
service.restart=函数(){
service.currentItem.started=新日期();
};
回程服务;
}]);
//用于演示目的
app.controller('demoCtrl',['$scope','myService',function($scope,myService){
$scope.header='Demo!';
$scope.item=myService.currentItem;
$scope.restart=myService.restart;
}]);
//这就是您的初始化代码所在的位置
//可能取决于模块上声明的服务。
app.run(['$window','myService',function($window,myService){
myService.restart();
$window.alert('Started!');
}]);

{{header}}
当前项目已启动:{{item.started}

重新启动


这为控制器调用提供了竞争条件。当函数执行时,似乎不是所有的控制器都准备好了。@Dan…是的,哈。我指的是路线。我也经历了同样的事情——在app.run块之前执行控制器的resolve fns时出现意外行为。我需要等待异步$http调用完成(它获取api密钥以进行跟踪)是否越长版本越好?为什么?在越长的版本中,我可以使用
this
而不是
服务。
?然后什么也不归还?这也一样吗?越长的解释就越长。两个版本的机制完全相同。如果您对这两种情况下的
用法感到困惑,我建议您阅读中的内容和相关工作,如果您有问题(对另一个问题的评论并不是提出新问题的好地方),请带着一个特定的问题/问题回来。