【发布时间】:2015-08-27 03:46:52
【问题描述】:
我有点不小心写了一些有用的东西,但我觉得不应该......!基本上我有一个以 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 的新手,可能有更好的方法来做到这一点,所以我的问题是两部分 - 为什么代码会这样做,还有更好的方法吗?
【问题讨论】:
标签: javascript angularjs variables scope