我如何访问类属性内的一个$http调用的.success
How can I access class properties inside the .success of an $http call?
我有这个Typescript代码:
class UserService implements IUserService {
data = {
loginMessage: ""
};
static $inject = [
'$http'
];
constructor(
private $http
) {
}
authenticate = () => {
// This works
this.data.loginMessage = 'Authenticating ...';
this.$http({
method: 'POST',
url: '/Token',
data: 'xxx',
})
.success((data1, status, headers, cfg) => {
// Here the this.data is undefined
this.data.loginMessage = 'Okay';
})
})
}
这只是一个例子,但它显示了我的问题。我希望能够修改.success内部的属性数据。然而,当我尝试这样做时,它说this.data
是未定义的。
谁能告诉我怎样才能解决这个问题?
更新:
这是一个解决方案,我发现,这似乎工作。我在身份验证函数中定义了self。有人能对此发表评论吗?这样做是否合理,还是会有其他潜在的问题?
class UserService implements IUserService {
data = {
loginMessage: ""
};
static $inject = [
'$http'
];
constructor(
private $http
) {
}
authenticate = () => {
var self = this;
// This works
this.data.loginMessage = 'Authenticating ...';
self.$http({
method: 'POST',
url: '/Token',
data: 'xxx',
})
.success((data1, status, headers, cfg) => {
// Here the this.data is now defined
self.data.loginMessage = 'Okay';
})
})
}
函数中的this
不是服务,而是函数(请参阅函数作用域)。
使用本地self
变量。
constructor(private $http) {
var self = this; // add this
}
authenticate = () => {
this.data.loginMessage = 'Authenticating ...';
this.$http({
method: 'POST',
url: '/Token',
data: 'xxx',
})
.success((data1, status, headers, cfg) => {
// this is the function!!!
self.data.loginMessage = 'Okay';
})
})
这样的东西可能会起作用吗?
class UserService {
data = {
loginMessage: ""
};
static $inject = [
'$http'
];
constructor(){
this.authenticate();
}
private authenticate(): void {
// This works
this.data.loginMessage = 'Authenticating ...';
this.$http({
method: 'POST',
url: '/Token',
data: 'xxx',
})
.success((data1, status, headers, cfg)=>this.onSuccess(data1, status, headers, cfg));
}
private onSuccess(data1, status, headers, cfg){
// Here the this.data is undefined
this.data.loginMessage = 'Okay';
}
}
基本上,您想要的是成功函数使用主类的this
,对吗?
编译成:
var UserService = (function () {
function UserService() {
this.data = {
loginMessage: ""
};
this.authenticate();
}
UserService.prototype.authenticate = function () {
var _this = this;
// This works
this.data.loginMessage = 'Authenticating ...';
this.$http({
method: 'POST',
url: '/Token',
data: 'xxx'
}).success(function (data1, status, headers, cfg) {
return _this.onSuccess(data1, status, headers, cfg);
});
};
UserService.prototype.onSuccess = function (data1, status, headers, cfg) {
// Here the this.data is undefined
this.data.loginMessage = 'Okay';
};
UserService.$inject = [
'$http'
];
return UserService;
})();
在我看来是正确的(还没有测试)
在这里分享链接
如果您将authenticate
定义为方法而不是函数,它将工作。你不需要按照上面的建议(正确地)执行var self = this;
。
这将使类看起来像这样:
class UserService implements IUserService {
data = {
loginMessage: ""
};
static $inject = [
'$http'
];
constructor(
private $http
) {
}
private authenticate(): void {
// This works
this.data.loginMessage = 'Authenticating ...';
this.$http({
method: 'POST',
url: '/Token',
data: 'xxx',
})
.success((data1, status, headers, cfg) => {
// Here the this.data is undefined
this.data.loginMessage = 'Okay';
})
})
}
相关文章:
- 角度 2:使用一个 http 调用的结果来执行另一个调用
- 多个 Javascript 文件,但只有一个 HTTP 请求
- 当我打开之前下载的网页时,一个 http:// 得到变成了一个 file:/// 得到,为什么
- 调用$http以响应另一个HTTP - Angular JS
- AngularJs:在另一个$http.get request中$http.get request
- 如何在一个 Http 响应中将多个 mime 类型返回到 Web 客户端
- 如何创建一个 http 拦截器以在“响应”中返回错误
- 在上一个$http完成后使用$http
- 修改一个index.aspx文件,然后得到一个http 404
- angular JS刷新了一个http
- 如何在Node.js中每秒发出一个http请求
- Angular 2-如何在我的头中写一个Http-get-promise
- 在php中手动创建一个HTTP响应对象,发送它,并用Javascript捕获它
- 如何在Angular中基于一个http调用进行多个验证
- 我如何访问类属性内的一个$http调用的.success
- 如何调用$http在angularJS顺序?但是我需要根据第一个$http的响应调用它第二个$http
- 如何在一个HTTP请求中处理多个AJAX行为
- 使用Javascript创建一个HTTP POST身份验证基本请求
- 如何在AngularJS中的多个控制器上使用仅一个$http请求
- 使用一个http请求从服务器获取多个资源文件