即使在另一个对象中复制(和修改),成功数据上的$ http也是相同的

时间:2015-10-11 18:57:15

标签: javascript angularjs object copy

我有一个小问题,我不确定它是一个“角度问题”还是纯粹的“javascript问题”。 我正在尝试用我的简历制作某种“7错误游戏”(通过了解你知道)并且我有一个问题将“好版本”与“坏版本”分离(理解修改过的版本)。

以下是代码:

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]);
});

<span ng-click="e[...]">gagn</span>é. mang部分可以点击,点击它会降低得分值并再次显示gagn(这是原始的)。

正如你所看到的,我试图硬拷贝这个对象,因为我只是分配了像that.resume = data;这样的值,但没有更多的运气。

提前谢谢! :)

1 个答案:

答案 0 :(得分:0)

您需要对象的深层副本 - 复制本身是数组或对象的属性是不够的 - 您还需要复制它们的属性等等(如果它们有嵌套的对象/数组)...所以这个是一个javascript而不是角度问题。

因此,如果您使用角度,您可以使用angular.copy并且事情应该正常。 https://code.angularjs.org/1.4.5/docs/api/ng/function/angular.copy