2016-04-28 8 views
0

私はAngularJSを初めて使用しています。私は特定の概念を頭に入れようとしています。私はどのように一方向のデータバインディングをうまく実行するかを理解しましたが、複雑なオブジェクトとの双方向バインドを実行する最善の方法を考えることはできません。オブジェクトを含むデータ結合モデルですが、フィールドに値を表示します

HTML

<input type="text" placeholder="Project Lead" ng-model="currentproject.projectLeader.name" /> 

JSが

$scope.ViewProject = function (project) { 
    $http.get('api/projects/' + project.id) 
     .success(function (data) { 
      $scope.currentproject = data; 
     }) 
     .error(function (error) { 
      $scope.status = 'Unable to load selected project data: ' + error.message; 
     }); 
    }; 

物事を単純化するために、projectLeaderprojectLeader.idprojectLeader.nameています。

私はinputフィールドにフルprojectLeaderオブジェクトをバインドしようとしていますが、私はinputの値のみがプロジェクトnameを表示したいです。これは理にかなっていますか?フィールドが変更されたときに新しいprojectLeaderを取得するにはどうすればよいですか?その人のためにidを検索するために入力された名前でサーバに別の要求を呼び出すそのフィールドにng-changeを実行するのが最善でしょうか?スコープを変更しますか?

答えて

2

オブジェクト全体を入力フィールドにバインドしないでください。名前のみを入力テキストにバインドします。 ng-changeを使用しないでください。変更が入力フィールドを変更するたびに起動されるため、ユーザーがキーを押すたびにデータを保存するメソッドが起動します。代わりに、提出するためのボタンを置くか、またはプレスに入るときにそれを行うことができます。私はあなたのためにフィドルを立てようとします。

+0

わかりました。私は彼らに 'currentproject'を修正させようとしています。だから、そのアップデートの提出で、私はちょうどすべてのプロジェクトの更新を返し、 'projectLeader.id'を新しい' projectLeader.name'から解決すべきですか?この値が変更されたかどうかを簡単に検出するには、更新が発生するたびに比較を行う必要はありませんか? –

+1

期待している値は何ですか?プロジェクトリーダーの名前だけをバインドしている場合、名前以外のプロパティは変更されないので、単に比較することができます。または、フォームを使用してフォーム内のフィールドが汚れていないかどうかを確認できます。 –

+0

私は 'currentproject'オブジェクトのプロパティからなるフォーム上にたくさんのフィールドを持っています。 'projectLeader'ピースには' id'と 'name'が結ばれています。ユーザーがフォームを更新すると、フォーム全体( 'currentproject')をサーバーに送り返します。ですから、 'projectLeader.name'フィールドが汚れていれば、フォームがサーバーに戻るたびにチェックするだけです。 –

関連する問題