2012-11-19 76 views
13

我收到了從我的服務中檢索到的用戶列表。當我選擇任何用戶時,我可以看到並編輯信息(電子郵件,角色等)。問題是我不希望這些更改影響列表中的用戶數據,我只想在保存(單擊按鈕)後更新數據。AngularJS變量之間的綁定

現在我用兩個變量:

$scope.selected - 當前選定的用戶
$scope.editable - 變量存儲我編輯

的數據,我喜歡這個交換數據:

$scope.initEditable = function() 
{ 
    $scope.editable = {}; 
    $.extend($scope.editable, $scope.selected); 
} 

看起來像一個可怕的解決方案。什麼是正確的方法來做到這一點?

回答

15

事實上,這是接近這個問題的角度方式,你正處在正確的軌道上。在像你這樣的場景之一通常會:

  • 複製被選擇後(編輯開始)的項目 - 這是你做什麼用editable
  • 擁有2路數據綁定改變副本(或原始元素)
  • 在編輯完成後,我們可以從傳播的副本更改這個模式原來

的好處之一是,我們可以輕鬆地:

  • 提供用戶可以恢復其更改的「取消」功能
  • 根據此比較,可以比較副本以及用戶界面的原始部分和驅動器部分(例如,如果有,則可以禁用「保存」按鈕沒有變化)

所以,我不認爲這種方法是可怕的。我唯一可以提出的建議是使用angular的angular.copymethod而不是$.extend

+2

自動化我創建的東西** lazy-model **指令https://github.com/vitalets/lazy-model – vitalets