AngularJS服务返回数据,但在编辑时会编辑原始服务数据
AngularJS service returns data but when edited it edits the original service data?
我不小心写了一些有效的东西,但我觉得不应该..! 基本上我有一个以 JSON 格式返回的项目列表,用户可以选择其中一个,对其进行编辑并保存更改。 这是我代码的简化版本:
app.service("ItemData", ["$http", function ItemDataService($http) {
this.items = [];
var _this = this;
this.fetch = function() {
var promise = $http.get("items.json");
promise.then(
function(payload) {
_this.items = payload.data;
console.log(_this.items);
}
);
return promise;
};
this.getFirstItem = function() {
return this.items[0];
}
this.update = function() {
console.log(this.items)
};
}]);
app.controller("PageCtrl", ["$rootScope", "ItemData", function($rootScope, ItemData) {
var _this = this;
$rootScope.item = null;
var promise = ItemData.fetch();
promise.then(
function(payload) {
setTimeout(function() {
$rootScope.item = ItemData.getFirstItem();
$rootScope.item.name = "why does this change the original service?";
ItemData.update();
}, 5000);
}
);
}]);
调用 ItemData.update
时,记录的项将显示我所做的更改。 但我希望$rootScope.item
是副本,而不是对原件的引用。 这不是函数返回值的标准吗? 为什么它也在这里编辑我的原版?
我是 AngularJS 的新手,可能有更好的方法来做到这一点,所以我的问题分为两部分 - 为什么代码要做它的样子,还有更好的方法吗?
这是基本的JS。它返回对对象的引用,因此当您更改它时,它也会更新"根"。您可以使用 angular.copy() 在返回之前制作新版本。
相关文章:
- 编辑HTML表的源数据
- 如何在corona sdk中从CK编辑器中检索数据
- 基于数据类型的编辑框的汇总列表
- 如何在ng-reeat中使用ng-switch来编辑JSON API数据
- 如何从自定义对话框编辑数据网格中的选定行
- JQGrid使用服务器编辑后的更新数据刷新数据
- 将数据推送到MongoDB,而无需在MEAN中编辑整个条目
- 获取OData Binding的编辑数据
- 通过CK编辑器获取值和存储数据
- 使用AJAX传递的数据编辑XML文件-正在删除XML数据
- 编辑组件中的Vuejs数据
- 用Javascript编辑范围数据(时间序列)
- 如何根据某些条件向可编辑的jquery数据表添加或删除按钮
- 编辑后更改切片网格单元格数据
- AngularJS中的可编辑数据网格
- X 可编辑:停止向服务器发送数据
- MVC:拒绝同时数据编辑
- 自定义sharepoint 2010 xslt列表-通过编辑后未刷新的数据编辑项目
- 如何同步声明JS对象,然后用依赖于并发操作的数据编辑对象的属性
- 使用HTML标签和innerHTML、setAttribute()等传递数据.编辑和更新存储在数据库中的新闻文章