如果$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
方法返回的对象。。
所以我的问题是:
为什么第一个例子会给我一个错误?
我该怎么做?
非常感谢!
@estus对服务/提供商问题一针见血。关于提供者的文档告诉我们,当提供者被实例化时,服务还不存在。在创建服务时,不允许与提供者进行交互。
来自文档:
在应用程序引导过程中,在Angular开始创建所有服务之前,它会配置和实例化所有提供程序。我们称之为应用程序生命周期的配置阶段。在此阶段,由于尚未创建服务,因此无法访问这些服务。
一旦配置阶段结束,就不允许与提供者进行交互创建服务开始。我们将应用程序生命周期的这一部分称为运行阶段。
如果你需要访问其他服务,似乎你需要创建一个服务/工厂,而不是一个提供商。
此外,关于this.initial
不起作用的原因,提供程序仅公开$get
方法中返回的内容。