AngularJS app.run()文档?

use*_*284 332 angularjs

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

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

Kay*_*ave 648

这是调用顺序:

  1. app.config()
  2. app.run()
  3. 指令的编译函数(如果它们在dom中找到)
  4. app.controller()
  5. 指令的链接功能(再次,如果找到)

这是一个简单的演示,您可以在其中观看每个执行(如果您愿意,可以进行实验).

来自Angular的模块文档:

运行块 - 在创建注入器后执行并用于启动应用程序.只有实例和常量才能注入运行块.这是为了防止在应用程序运行时进一步进行系统配置.

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

使用运行块的一种情况是在认证期间.

  • @KayakDave我不确定这是否属于主题,但与您上面提到的运行顺序有关,何时启动服务以及何时运行? (4认同)
  • 帮助你@jonnieM可能有点晚了,但服务将根据他们首先需要的时间执行 - 即如果你首先需要在运行块中提供服务,它将在该块之前立即执行.至于提供商,令人讨厌的是,它们将在配置块之前或之后运行 - 取决于它们在代码中的顺序.考虑到您直接使用提供程序的唯一时间是在配置阶段,这似乎不正确. (3认同)
  • 嗨,我已经分叉并修改了您的小提琴样本以显示工厂负载:https://jsfiddle.net/lorezz/4cxgpLqj/1 (2认同)

Mic*_*ole 29

特别...

如何以及在哪里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'
});
Run Code Online (Sandbox Code Playgroud)