定义后立即参考运行中的服务?

时间:2015-12-09 12:13:07

标签: angularjs angularjs-service angularjs-http angularjs-module angularjs-injector

我想将service中的字符串附加到每个请求中。尝试:

'use strict';

angular.module('main')
    .service('Foo', function () {
        self.bar = 'haz';
    })
    .run(function ($injector, Foo) {
        $injector.get('$http').defaults.transformRequest = function (data, headersGetter) {
            headersGetter()['X-Bar'] = Foo.bar;
        };
    });
  

错误:[$injector:nomod]模块'Foo'不可用!您要么错误拼写了模块名称,要么忘记加载它。如果注册模块,请确保将依赖项指定为第二个参数。

注意:我正在使用ui-router并拥有多个文件;但是一个module;如果这有所作为。

2 个答案:

答案 0 :(得分:0)

请务必在HTML中的某处ng-app="main",因为肯定会出现错误消息,说您正在尝试加载模块Foo ...

接下来,您的方法几乎是正确的。首先,self在Foo服务中应该是什么 - 使用this。而且,你为什么要使用$injector?只需直接注入$http ...您的代码如下:

angular.module('main')
   .service('Foo', function () {
      this.bar = 'haz';
   })
   .run(function ($http, Foo) {
      $http.defaults.transformRequest = function (data, headersGetter) {
         headersGetter()['X-Bar'] = Foo.bar;
      };
   });

答案 1 :(得分:0)

我的$injector方法来自:http://engineering.talis.com/articles/elegant-api-auth-angular-js/

查看文档:{​​{3}} $ http,这里是我重写的方式:

angular.module('main')
   .service('Foo', function () {
      this.bar = 'haz';
   })
   .run(function ($injector, Foo) {
      $injector.get('$http').defaults.headers.common['X-Bar'] = Foo.bar;
   });

哪个工作正常。此外,看起来我的代码中还有另一个导致问题的错误...这是午夜编码的问题>。<