2015-06-18 2 views
0

Скажем, у меня есть этот базовый поставщик:Как наследовать от базового провайдера (а не производителя)?

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

И теперь эти 2 другие суб-провайдеров:

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 наследуют секцию поставщик BaseClient таким образом, что Я могу позвонить clientAProvider.setSomething('aaa') и clientBProvider.setSomething('bbb') и сохранить это значение для провайдера, используя ту же самую реализацию setSomething?

У меня есть куча этих поставщиков (больше, чем эти 2), где раздел поставщика всегда один и тот же, реализация конфигурации всегда одна и та же, но фабричная часть этих поставщиков отличается.

Мысли?

ответ

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); 
     } 
    } 
    }; 
}]); 
+0

Мне очень жаль, но, глядя на ответ, который я только что понял, что я сделал неправильный вопрос. Пожалуйста, дайте мне несколько минут, чтобы исправить вопрос. –

+0

Обновлено. Еще раз извините. –

+0

Я добавляю 'angular.extend (это, BaseClientProvider),' в 'ClientA' провайдер, это работа. –

Смежные вопросы