AngularJS app.run()文档?


337

如何使用以及在哪里app.run()使用?在模块定义之后,之后app.config()还是之后app.controller()

我正在采用BreezeJS Angular Q,它询问是否可以在app.run()函数中运行某些代码。


2
并设置了任何角度模块.constants()之后
alfonsob 2013年

Answers:


650

这是呼叫顺序:

  1. app.config()
  2. app.run()
  3. 指令的编译功能(如果在dom中找到)
  4. app.controller()
  5. 指令的链接功能(同样,如果找到)

这是一个简单的演示,您可以在其中观看每个示例的执行情况(并根据需要进行实验)。

Angular的模块文档中

运行块 -创建注射器后执行,并用于启动应用程序。只能将实例和常量注入运行块中。这是为了防止在应用程序运行期间进行进一步的系统配置。

运行块是Angular中最接近main方法的。运行块是启动应用程序所需运行的代码。在配置完所有服务并创建了注射器后,将执行该命令。运行块通常包含难以进行单元测试的代码,因此,应在隔离的模块中声明它们,以便可以在单元测试中将其忽略。

使用运行块的一种情况是在身份验证期间。


4
@KayakDave我不确定这不是主题,但与您上面提到的运行顺序有关,何时启动服务以及何时运行服务?
珍妮

3
帮助您@jonnieM可能有点晚了,但是服务将根据首先需要它们的时间来执行-即,如果您首先在run块中需要一个服务,它将在该块之前立即执行。对于提供程序,令人讨厌的是,它们将在配置块之前或之后运行-取决于它们在代码中的顺序。考虑到您唯一直接使用提供程序的时间是在配置阶段,这似乎不正确。
Zac Seth 2014年

2
嗨,我已经分叉并修改了您的小提琴样本,以显示工厂负载: jsfiddle.net/lorezz/4cxgpLqj/1
Lorezz

1
太棒了 确切地说,app.constant()函数在所有内容之前都被调用...并且app.factory()和其他服务函数被“懒惰地”调用。换句话说,只有在控制器或其他服务需要注入时,Angular才使用提供的函数来创建服务实例,即使在初始化应用程序后很长时间也是如此。
Niko Bellic 2015年

在Ionic项目中,默认情况下,运行在配置之前被调用。这是为什么 ?
Rayjax

28

特别...

如何使用以及在哪里app.run()使用?在模块定义之后还是 app.config()之后app.controller()

哪里:

在您的package.js中 /packages/dashboard/public/controllers/dashboard.js

怎么样:

使它看起来像这样

var app = angular.module('mean.dashboard', ['ui.bootstrap']);

app.controller('DashboardController', ['$scope', 'Global', 'Dashboard',
    function($scope, Global, Dashboard) {
        $scope.global = Global;
        $scope.package = {
            name: 'dashboard'
        };
        // ...
    }
]);

app.run(function(editableOptions) {
    editableOptions.theme = 'bs3'; // bootstrap3 theme. Can be also 'bs2', 'default'
});
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.