簡體   English   中英

重置Angular 1.5視圖模型

[英]Reset Angular 1.5 view model

我有一個很大的嘗試,我試圖在按鈕中重置它,但是它沒有按預期工作。

請參閱下面的代碼

function someCtrl() {
    var temp;
    var vm = this;
    someService.then(function (res) {
        vm.data = res;
        temp = res;
    });

    vm.reset = function () {
        vm.data = temp; //so that vm will reset to res;
    }
}

在這里,我在ng-model中使用vm.data來編輯每個字段。 但是當ng-model編輯vm.data時,temp本身也會更新。 我猜正在發生一些可變范圍參考。 因此,在調用vm.reset時,vm.data和temp相同,因此不會發生復位。

請提出一種刪除此可變范圍引用的方法。

使用angular.copy代替賦值, =表示引用,而angular.copy()創建一個新對象作為深層副本。

angular.copy(res, temp );

您的代碼將是

 someService.then(function (res) {
        vm.data = res;
        angular.copy(res, temp );
 });

在javascript中,對象是通過引用傳遞的。 因此,在服務回調中,您將相同的響應對象分配給vm.data和temp。 這樣,在更改vm.data時,您同時也在更改溫度,因為兩者都指向相同的內存位置。

要使其正常工作,請將單獨的實例(深度克隆res對象)分配給vm.data和temp。 像這樣:

someService.then(function (res) {
    vm.data = angular.copy(res);
    temp = res; // no need to deep clone this one. temp can point to the res obj
});

並將重置功能更改為此

vm.reset = function () {
    vm.data = angular.copy(temp); // assign "backup" value to vm.data
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM