2017-02-07 68 views
0

我正在使用Angular Bootstrap,實際上我正在嘗試使用模態正確更新我的模型。Angular Bootstrap模態綁定問題

這裏是非常簡單的代碼:

控制器:

function open(room) { 
    var roomModal = $uibModal.open({ 
    templateUrl: 'room-modal.html', 
    controller: 'RoomModalController', 
    controllerAs: 'modal', 
    resolve: { 
     room: room 
    } 
    }); 

    roomModal.result.then(function (response) { 
    RoomsService.update({ 
     roomId: response._id 
    }, response).$promise (etc...); 
    }); 
} 

模態控制器:

var vm = this; 

    vm.room = room; 

    vm.save = function() { 
     $uibModalInstance.close(vm.room); 
    }; 

    vm.cancel = function() { 
     $uibModalInstance.dismiss('cancel'); 
    }; 

基本上我解析室得到關於它的一些信息,然後如果需要,我希望更新關於模式中的房間的一些信息。

它工作正常,除非我不想更新一些信息,我點擊「關閉」。

發生什麼事情是:如果我更新了一些信息,然後點擊「關閉」信息沒有在數據庫上更新(確定),但已在主視圖中更新...因爲Angular綁定了模態信息到主視圖...

這是很奇怪,因爲我傳遞那些信息到一個單獨的範圍(VM),除非我不單擊保存,我不應該期待這種行爲......

什麼我在這裏做錯了?!?

+0

如果您在輸入中使用綁定數據('$ scope.objname')作爲'ng-models',這些綁定會在值更改時自動更改。據我可以看到'房間'對象是通過你的函數調用者可能使用範圍對象。爲了防止這種情況,您可以創建一個獨立的範圍變量(以處理手動操作中的更改)。 –

+0

我使用'vm'格式,而不是'$ socpe'。謝謝 –

+0

這是同樣的事情,而不是'$ scope'你的綁定對象被命名爲'vm'。這不會更改摘要循環和綁定方法。 –

回答

1

在您的​​深層複製room對象以防止更新時模型也被更新。

vm.room = angular.copy(room); 

現在,這個目標會照顧模式綁定的,當改爲你的根範圍vm.room對象不會干涉。

要最終確定保存這些數據,您必須將vm.root模態對象保存到您的數據庫中,並根據這些模態中所做的更改更新根範圍vm.room對象。

+0

真棒,它幫助我理解它:'angular.copy' made訣竅!謝謝你的幫助! –

+0

它幫助你了不起! :) –