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