0

我想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;如果这有所作为。

4

2 回答 2

0

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

查看文档:https : //docs.angularjs.org/api/ng/service/$http,这是我重写它的方式:

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

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

于 2015-12-09T23:17:57.323 回答
0

确保ng-app="main"在您的 HTML 中有某个地方,因为错误消息肯定表明您正在尝试加载模块Foo...

接下来,您的方法几乎是正确的。首先,selfFoo 服务中应该有什么 - 使用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;
      };
   });
于 2015-12-09T13:01:15.740 回答