Angular Provider - $http не определен, когда $get возвращает объект
Если $get
настроено так:
Конфиг:
.config( function( authProvider ){
authProvider.initial();
})
Провайдер:
.provider('auth', function() {
this.initial = function() {
obj.user = JSON.parse( localStorage.getItem('user') );
}
var obj = {
get: function() {
return this.user;
},
set: function( userData ) {
this.user = userData;
localStorage.setItem( 'user', JSON.stringfiy( userData ) );
},
send: function( data ) {
$http.post( 'user/' + data )
.then( res => { // Arrow Functions
this.set(res.data);
};
},
};
this.$get = function( $http ) {
return obj;
}
})
я получил $http is not defined
Ошибка - Когда send()
призвание
И если это так:
.provider('auth', function() {
// This method will not work !
this.initial = function() {
obj.user = JSON.parse( localStorage.getItem('user') );
}
this.$get = function( $http ) {
return
{
get: function() {
return this.user;
},
set: function( userData ) {
this.user = userData;
localStorage.setItem( 'user', JSON.stringfiy( userData ) );
},
send: function( data ) {
$http.post( 'user/' + data )
.then( res => { // Arrow Functions
this.set(res.data);
};
}
};
}
})
У меня нет ошибки
Но this.initial()
Не работает.
потому что он не может получить доступ к объекту, который $get
метод возврата..
Итак, мои вопросы:
Почему в первом примере выдает ошибку вообще?
Как я должен это делать?
Большое спасибо!
1 ответ
@estus находится в центре внимания проблемы службы / провайдера. Документы на провайдеров говорят нам, что когда провайдеры создаются, сервисы еще не существуют. А когда создаются сервисы, взаимодействие с поставщиками запрещено.
Из документов:
Во время начальной загрузки приложения, прежде чем Angular завершит создание всех служб, он настраивает и создает экземпляры всех поставщиков. Мы называем это этапом настройки жизненного цикла приложения. На этом этапе службы недоступны, поскольку они еще не созданы.
После завершения этапа настройки взаимодействие с поставщиками не разрешается, и начинается процесс создания служб. Мы называем эту часть жизненного цикла приложения фазой запуска.
Похоже, вам нужно создать сервис / фабрику, а не провайдера, если вам нужен доступ к другим сервисам.
Кроме того, почему this.initial
не будет работать, провайдер только выставляет то, что возвращается в $get
метод.