即使在另一个对象中复制(和修改),成功数据上的 $http 也是相同的
$http on success data is the same even if copied (and modified) in another object
我有一个小问题,我不确定它是 "angular problem" 还是纯粹的 "javascript problem"。
我正在尝试用我的简历制作某种“7 错误游戏”(通过做你知道的来学习)并且我在将 "good version" 与 "bad version" 分离时遇到了问题(理解修改后的)。
这是代码:
var that = this;
function clone(obj) {
if (null == obj || "object" != typeof obj) return obj;
var copy = new Object();
for (var attr in obj) {
if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];
}
return copy;
}
this.resume = null;
this.wrongResume = null;
// get the json
$http.get('resources/resume.json')
.success(function(data) {
that.resume = clone(data);
//
// --> OUT: [...] gagné.
//
console.log(that.resume.description[1]);
that.wrongResume = clone(data);
for (var i = 0; i < dataServe.errors.length; i++) {
that.wrongResume = dataServe.errors[i].action(that.wrongResume);
};
//
// --> OUT: [...] <span ng-click="errors[0].resolution()" class="pointer" ng-hide="errors[0].resolved">mang</span><span ng-show="errors[0].resolved">gagn</span>é.
// --> should still be: [...] gagné.
//
console.log(that.resume.description[1]);
});
像mang
这样的<span ng-click="e[...]">gagn</span>é.
部分是可以点击的,点击它会降低分值并再次显示gagn
(这是原来的)。
如您所见,我试图硬复制对象,因为我只是在分配 that.resume = data;
之类的值,但运气并不好。
提前致谢! :)
您需要对象的深层副本 - 复制本身是数组或对象的属性是不够的 - 您还需要复制它们的属性等等(如果它们嵌套 objects/arrays)。 .. 所以这更像是 javascript 而不是 angular 问题。
因此,如果您使用 angular,您可以只使用 angular.copy
,事情应该会正常进行。
https://code.angularjs.org/1.4.5/docs/api/ng/function/angular.copy
我有一个小问题,我不确定它是 "angular problem" 还是纯粹的 "javascript problem"。 我正在尝试用我的简历制作某种“7 错误游戏”(通过做你知道的来学习)并且我在将 "good version" 与 "bad version" 分离时遇到了问题(理解修改后的)。
这是代码:
var that = this;
function clone(obj) {
if (null == obj || "object" != typeof obj) return obj;
var copy = new Object();
for (var attr in obj) {
if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];
}
return copy;
}
this.resume = null;
this.wrongResume = null;
// get the json
$http.get('resources/resume.json')
.success(function(data) {
that.resume = clone(data);
//
// --> OUT: [...] gagné.
//
console.log(that.resume.description[1]);
that.wrongResume = clone(data);
for (var i = 0; i < dataServe.errors.length; i++) {
that.wrongResume = dataServe.errors[i].action(that.wrongResume);
};
//
// --> OUT: [...] <span ng-click="errors[0].resolution()" class="pointer" ng-hide="errors[0].resolved">mang</span><span ng-show="errors[0].resolved">gagn</span>é.
// --> should still be: [...] gagné.
//
console.log(that.resume.description[1]);
});
像mang
这样的<span ng-click="e[...]">gagn</span>é.
部分是可以点击的,点击它会降低分值并再次显示gagn
(这是原来的)。
如您所见,我试图硬复制对象,因为我只是在分配 that.resume = data;
之类的值,但运气并不好。
提前致谢! :)
您需要对象的深层副本 - 复制本身是数组或对象的属性是不够的 - 您还需要复制它们的属性等等(如果它们嵌套 objects/arrays)。 .. 所以这更像是 javascript 而不是 angular 问题。
因此,如果您使用 angular,您可以只使用 angular.copy
,事情应该会正常进行。
https://code.angularjs.org/1.4.5/docs/api/ng/function/angular.copy