0

假设我有这个基础提供者:

angular.module('app').provider('BaseClient', function () {
    this.setSomething = function (something) {
        // Store `something` somewhere
        return this;
    };
});

现在这两个其他子提供者:

angular.module('app').provider('ClientA', function () {
    this.$get = function () {
        return {
            foo: function () {
                console.log('FOO', /* Read `something`, needs to output 'aaa' */);
            }
        }
    };
});

angular.module('app').provider('ClientB', function () {
    this.$get = function () {
        return {
            bar: function () {
                console.log('BAR', /* Read `something`, needs to output 'bbb' */);
            }
        }
    };
});

angular.module('app').config(function (clientAProvider, clientBProvider) {
    clientAProvider.setSomething('aaa');
    clientBProvider.setSomething('bbb');
});

如何在使用相同实现的同时,以我可以调用和存储每个提供者的值的方式创建和ClientA继承ClientB提供者部分?BaseClientclientAProvider.setSomething('aaa')clientBProvider.setSomething('bbb')setSomething

我有一堆这样的提供者(超过这两个),其中提供者部分总是相同的,配置实现总是相同的,但这些提供者的工厂部分是不同的。

想法?

4

1 回答 1

1

您可以注入BaseClientProvider您的ClientA提供商。

完整代码在这里plnkr


app.provider('BaseClient', function() {
  this.config = {
    something: null
  };

  this.setSomething = function(something) {
    this.config.something = something;
    return this;
  };

  this.$get = function() {};
});

app.provider('ClientA', ['BaseClientProvider', function(BaseClientProvider) {
  var self = this;
  angular.extend(self, BaseClientProvider);
  self.$get = function() {
    return {
      foo: function() {
        console.log('FOO', self.config.something);
      }
    }
  };
}]);
于 2015-06-18T17:26:42.903 回答