gpt4 book ai didi

javascript - AngularJS 服务返回数据,但是在编辑时它会编辑原始服务数据吗?

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

我不小心写了一些有用的东西,但我觉得不应该......!基本上我有一个以 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()在退回之前制作一个新版本。

关于javascript - AngularJS 服务返回数据,但是在编辑时它会编辑原始服务数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30780942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com