我正在使用ES6和Controller As语法处理AngularJS项目并遇到一些新问题。我有一个ng-repeat
调用函数来更新一些数据。我希望传递给ng-repeat
内的函数的项在promise返回时更新。问题是,在诺言回来后,我似乎无法再次引用它。
<div ng-repeat="item in ctrl.thing.items">
<div ng-click="updateItem(item)">Update Item</div>
</div>
然后更新功能在这里:
updateItem(item) {
let i = new this.Item(item);
i.update().then(function(response) {
item = response.data; // Item does not get updated in controller
});
}
我已经尝试将项目设置为函数中的变量以及我可以尝试重新引用的各种其他内容,但是都没有成功。
我唯一的成功就是传递索引,然后通过在promise之前设置let t = this;
然后t.thing.items[index] = response.data
来引用原始对象。这可行,但与通常能够更直接地引用对象相比,感觉有点难看。我在这里缺少什么?
答案 0 :(得分:0)
正如您已经指出的那样,通过调用item =
,您实际上只是重新分配对传递给updateItem
的参数的引用 - 您实际上并未实际更新原始item
1}}对象。
要解决此问题,您可以使用item
使用response.data
中的所有数据更新Object.assign
的属性:
updateItem(item) {
let i = new this.Item(item);
i.update().then(function(response) {
Object.assign(item, response.data); // Copy the enumerable properties from response.data into item
});
}
但请注意,以前在item
但不再位于response.data
的