Я предполагаю, что для этого есть простой (может быть, тривиальный) ответ, который я просто не обмотал.
Почему это делает то, что я хочу - то есть, вставлять ссылку на $provide
в мою службу:
angular.module('error_reporting', [])
.provider('RaygunLogger', function() {
var provide = undefined;
this.setProvide = function(p){
provide = p;
}
this.$get = function() {
// use $provide in p
};
})
.config(function(RaygunLoggerProvider, $provide) {
RaygunLoggerProvider.setProvide($provide);
});
в то время как это приводит к ошибке формы Unknown provider: $provideProvider <- $provide <- RaygunLogger <- RaygunLogger
?
angular.module('error_reporting', [])
.provider('RaygunLogger', function() {
this.$get = function($provide) {
// use $provide
};
});
RaygunLogger.$get()
ли RaygunLogger.$get()
до того, как инжектор настроен? Я предполагаю, что это проблема порядка операций, когда мне нужно дождаться фазы конфигурации модуля, прежде чем я могу ввести $provide
, но я не знаю, где это проверить в документе.
$provide
доступ только во время фазы конфигурации. Функция $get
запускается после фазы конфигурации, чтобы создать то, что предоставляет поставщик.
На данный момент вы не можете делать то, что вы пытаетесь сделать.
Чтобы использовать его внутри $get
вы обычно запускаете свою функцию поставщика с помощью
var self = this;
и в определении $get
(factory) вы используете self
.
Например
angular.module('foo',[])
.provider('myFoo', function myFooProviderFn() {
var self = this;
self._debug = false;
self.setDebug = function() { self._debug = true; }
self.$get = ['$location', function($location) {
self.setDebug();
});
});
Неправильно думать, что вы не можете использовать его внутри вашего $get
. Таким образом, фактический экземпляр чистого провайдера может быть доступен и управляться только во время фазы конфигурации. Обоснованием этого дизайна является, вероятно, то, что поставщики, как полагают, являются некоторым механизмом для настройки заводов.
Больше из документов (рецепт поставщика)
this
вself
ничего не делает для предотвращения исключения Неизвестного провайдера, о котором я спрашиваю. Я хочу знать, почему я не могу ввести$provide
непосредственно в$get
; Я не обеспокоен связываниемthis
внутри внутренних функций.