如何动态设置属性
How to dynamically set properties of this
我有一个AngularJS工厂方法,它是这样设置属性的(特别是在getPageInformation
方法中):
function factoryMethod($http, $q) {
return function(id) {
return {
id: id,
getPageInformation: function() {
var deferred = $q.defer();
$http({
method: "post",
url: 'getInfo.php',
data: {
id: this.id
},
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
}).then(function(successResponse) {
console.log(successResponse);
deferred.resolve('Fetched');
for (var attr in successResponse.data) {
this[attr] = successResponse.data[attr];
}
}, function(errorResponse) {
console.log(errorResponse);
deferred.reject('Unable to fetch');
});
return deferred.promise;
}
}
}
}
问题不在于AngularJS,正如你所看到的,我正在返回和对象(从花括号语法),但我需要能够动态设置对象属性。我通过从响应中获得的适当信息进行了循环,但它没有设置它:
for (var attr in successResponse.data) {
this[attr] = successResponse.data[attr];
}
相反,我认为问题是当我安慰。登录this
,它给我带来了整个浏览器窗口对象),这是失败的引用当前实例。是否有任何我可以实现我正在做的事情,或者这应该是如何工作的,还有另一个问题?
this
变量在Javascript中的含义是一种痛苦。你可以试着在网上搜索血腥的细节。对于这个问题,我认为可以说回调中的this
很可能是而不是您直观期望的。您需要使用实际this创建一个闭包,通常为:
return {
...
getPageInformation: function() {
var self = this; // The closed variable here
...
$http({...})
.then(function(successResponse) {
...
for (var attr in successResponse.data) {
self[attr] = successResponse.data[attr]; // Use like this
}
...
相关文章:
- Javascript使用变量设置属性
- 如何在自动完成时设置属性标题
- 未捕获的类型错误:无法设置属性'innerHTML'如果为null,则将脚本移动到正文不会;不起作用
- 未捕获的类型错误:无法设置属性'背景'的未定义
- 无法设置属性'innerHTML'在javascript中为null
- Haxe Javascript:在不使用Reflect的情况下按名称获取和设置属性
- Jquery为每个元素设置属性
- 从骨干集合筛选模型,然后为这些模型设置属性
- 我们可以设置属性'id'到不同的'按钮'通过使用javascript或jquery的循环
- 如何在javascript对象中设置属性的类型,就像mongoose模式设计一样
- emscripten+sdl=引发异常:TypeError:无法设置属性'widthNative'的未定
- 未捕获的类型错误:无法设置属性'onclick'为null.已尝试window.onload
- Backbone JS Promises在模型上设置属性之前解析
- Highcharts无法设置属性'的值;要点':对象为null或未定义
- 无法设置属性'round'的未定义
- 通过 Javascript 设置 C# 属性值
- 在 app.locals 上设置属性和调用 app.set() 有什么区别?
- 不引人注目地设置属性后函数失败
- j查询在设置属性后在后续单击时不读取数据属性
- IE错误:无法设置属性'的值;样式':对象为null或未定义