在AngularJS中,如何从服务本身内部的回调中修改服务属性
In AngularJS how to modify service property from callback inside service itself
我有一个工厂,它执行http调用,在错误回调中,我想为属性设置一个值,例如this.password = null
,但this.password
不指向密码。
另一方面,当我进行POST时,数据被发送得很好:password: this.password
密码属性的范围应该不同,对吗?或者我错过了什么?
.factory('LogInService', function($http) {
return {
username: null,
password: null,
logIn: function() {
return $http({
method: 'POST',
url: 'http://my-domain/api/signin',
data: {
username: this.username,
password: this.password
}
})
.then(
function(success){
},
function(err){
// reset password field
this.password = null; // <-- not working
}
);
}
}
});
我可以将所有属性和方法设置为var,然后返回它,但我更喜欢上面的方法。我的意思是:
var myService = {
// my property and methods...
}
errorCallBack = function(){
myService.password = null;
}
return myService;
您遇到了范围界定问题。做这样的事情应该很容易。和往常一样,未经测试,但似乎会奏效。
.factory('LogInService', function($http) {
return {
username: null,
password: null,
logIn: function() {
var svc = this; //<----
return $http({
method: 'POST',
url: 'http://my-domain/api/signin',
data: {
username: svc.username, //<---
password: svc.password //<---
}
})
.then(
function(success){
},
function(err){
// reset password field
svc.password = null; //<----
}
);
}
}
});
您需要了解this
。
您可以使用箭头函数来解决问题,该函数不会改变this
的含义。
您可能希望使用Babel将ES6代码编译为ES5,这样浏览器就可以很好地使用现代代码库。
相关文章:
- 从函数内部、类内部、模块内部访问 Angular 服务
- 测试angular服务内部方法调用
- 在异步内部函数返回 [UI-路由器和 HTML 服务] 之后返回外部 fn
- 将服务字符串参数转换为数组的 Angular 内部
- 内部服务器错误在 post 请求中使用 Angular js 中的自定义服务
- AngularJS - 在服务内部对数组进行排序,在控制器/视图中保留绑定
- mdSidenav服务可以'当一个组件's在Angular组件内部
- 服务内部的数据更改不会更新作用域
- 当数组是服务内部对象的属性时,如何在页面上逐个显示数组元素
- Express.js:调用内部服务
- 我需要一个地图服务,将显示鸟瞰图(用于内部使用非公众-登录所需)
- 如何为消息属性提供公共服务,仍然可以从web项目内部访问它们
- forEach内部提供商服务AngularJS
- 如何在angularjs中读取服务内部的变量
- angular服务内部的函数(又一次)没有被视为函数
- 从AngularJS服务内部访问$scope属性
- 不能在angular服务中更新函数内部的值
- AngularJS服务内部的promise返回值似乎会改变
- wcf服务内部服务器错误
- 在Angular JS中从decorator内部调用工厂服务