gpt4 book ai didi

javascript - 如何访问 $http 调用的 .success 中的类属性?

转载 作者:行者123 更新时间:2023-12-03 12:09:42 29 4
gpt4 key购买 nike

我有这个 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 var。

  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';
})
})

关于javascript - 如何访问 $http 调用的 .success 中的类属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25019475/

29 4 0