即使在另一个对象中复制(和修改),成功数据上的 $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