2016-06-24 11 views
0

データベースからユーザーデータを取得して保存しました$rootScope.currentUser これらのデータを更新フォームに渡して、ユーザーが古い値を参照できるようにしたいと思います。AngularJS更新フォーム

ng-model="currentUser.name"を使用し

1)... =>ザッツは$に影響を与える: 私は、ユーザーの更新が

私はそのthrought 2ソリューションを実現しようとした私の$rootScope.currentUserので、私は保つことができ、古い値に影響しないことを望みますrootScope、フォームチェンジ内のすべての変更を自動的$ rootScopeが

2値) =>ザッツは$ rootScopeには影響しません同じ入力にng-values="currentUser.name"ng-model="updatedUser.name"を使用したが、フォームの検証がupdatedUserので、空のようにフォームを検討しています(モデル)にはデフォルト値のonloadがありません!! (また、ng-valueはtextAreaでは機能しません!理由はわかりません)

これを達成するための最良の解決策は何ですか?既存のユーザーを取得するとき

+1

で初期化され

ng-model="updatedUser" 

を使用し、[MCVE] –

+0

あなたの特定の問題を明確にしたり、必要な正確に何を強調表示するために、追加の詳細情報を追加してくださいを提供してください。現在書かれているとおり、あなたが求めていることを正確に伝えるのは難しいです。この質問を明確にする方法については、How to Askページを参照してください。 –

+0

$ rootScopeを入力コントロールにバインドしたいと思っていますが、変更したくありません。私は正しい? –

答えて

2

、ちょうど編集を制御コントローラ内でこのような何かを:あなたの形で続いて

function myController($scope, $rootScope) { 

    // make a copy of the current user 
    $scope.editUser = angular.copy($rootScope.currentUser); 

    $scope.save = function() { 
     // save copy of edited in rootscope 
     $rootScope.currentUser = angular.copy($scope.editUser); 
    } 
} 

<form ng-controller="myController"> 
    <input type="text" 
      ng-model="editUser.name" /> 
    <button type="button" 
      ng-click="save()">Save</button> 
</form> 

this jsfiddle

+0

現在のユーザーが深いオブジェクトの場合、 'angular.merge'が必要です – Walfrat

+1

なぜですか?マージする必要はなく、コピーするだけです。 – devqon

+0

コピーは浅いコピーを作成します。つまり、サブフィールドの参照は複製されず、そのまま維持されます。マージはディープコピーを実行します。私が言ったように、彼の 'currentUser'オブジェクトに複数のレベルがある場合のみです。 – Walfrat

0

を参照してください。ユーザーオブジェクトをコピーする

updatedUser = angular.copy(currentUser); 

し、古い値

関連する問題