什么是app.run(appRun);用于AngularJS?

时间:2015-03-31 10:52:18

标签: angularjs

我有一个app.run(appRun);在我的代码中,但我不清楚为什么需要它。 appRun函数有一些基本的东西,但看起来没有任何东西不能在appController中。

我已经有一个在这里使用的app控制器:

<html lang="en" class="light"
      id="ngApp"
      ng-app="app"
      ng-cloak
      ng-controller="appController"

希望有些人可以帮我解释一下这个区别。感谢

1 个答案:

答案 0 :(得分:5)

您可以在文档中找到有关app.run()模块的详细信息here

据我所知,在配置完所有服务并创建了注入器之后执行了run方法。我们将这些东西放在运行块中,这对于进行单元测试并不是那么容易。

以下是我网站的示例: 这个例子基于django和angularjs网站,这里我配置了我的应用程序。

var AppName = angular.module('AppName', [

    'ngRoute',
    'ngCookies',

]);

// use for cookie
AppName.provider('myCSRF',[function(){

    var headerName = 'X-CSRFToken';
    var cookieName = 'csrftoken';
    var allowedMethods = ['GET'];

    this.setHeaderName = function(n) {
       headerName = n;
    }
    this.setCookieName = function(n) {
       cookieName = n;
    }

    this.setAllowedMethods = function(n) {
       allowedMethods = n;
    }
    this.$get = ['$cookies', function($cookies){
    return {
        'request': function(config) {
        if(allowedMethods.indexOf(config.method) === -1) {
            config.headers[headerName] = $cookies[cookieName];

            }
        return config;
    }
    }
    }];
}])


AppName.config(['$routeProvider',
        '$httpProvider','$interpolateProvider', function($routeProvider,$httpProvider,$interpolateProvider) {

    $interpolateProvider.startSymbol('{$');
    $interpolateProvider.endSymbol('$}');

    $httpProvider.interceptors.push('myCSRF');
    $httpProvider.defaults.xsrfCookieName = 'csrftoken'; 
    $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
    $httpProvider.defaults.withCredentials = true;

    $routeProvider
    .when('/anyPage',{
        templateUrl: '/anyPage/'
    })
    .otherwise({
        redirectTo: '/'
    })


}])


AppName.run(['$http', '$cookies', function($http, $cookies) {

    $http.defaults.headers.post['X-CSRFToken'] = $cookies.csrftoken;

}]);