ng-model
とbutton
を使用してデータバインディングに問題があります。 AngularJS - ボタンをクリックしてng-modelをバインドする
私のサイトの動作原理
:- 私のHTMLサイトが
projects
のリストが表示されます(外部.jsonファイルからロードされました)。入力の - 各行は(等のような
project.name
、project.date
)プロジェクトについての関連データで満たされたいくつかの<input type="text"
を含むmodal
を表示Edit
という名前のボタンを有する - 初期
value
がデータをオブジェクトと等価である(テキスト入力はName
意志と呼ばれますproject.name
など) Save
ボタンをクリックして操作を確認した場合にのみオブジェクトが変更されます(confirm(sometext)
は問題ありません)。 ボタンをクリックしないでモーダルを閉じるか、確認ボックスでcancel
を押すと、データが更新されません。- 入力を編集する(
project.name
が "Project2"で、3つの数字を追加して "Project2137"とすると)、モーダルを閉じてもう一度開くと、入力内に "Project2"というテキストが表示されるはずです変更され、入力のみ)
これまでのところ、私は単一のテキスト入力がng-model
を使用して、この
<input type="text" id="editName" class="form-control" ng-model = "project.name">
のようになりますことを理解し、それらがバインドされていることを意味します。それは私が知っているものです。ただし、入力を編集すると、データを入力するとすぐにオブジェクトが更新されます。 ng-model-options
で試してみましたが、解決策が見つかりませんでした。
は、私はプログラム的にも
<input type="text" id="editName" class="form-control" value = {{project.name}}>
....
<button type="button" class="btn pull-right btn-primary btn-md" ng-click="edit(project)" data-dismiss="modal" >Save</button>
と機能を使用して、それを実行しようとしました:
$rootScope.edit = function(project)
{
if(confirm("Are you sure to save changes?"))
{
project.name = angular.element(document.getElementById('editName')).val();
// ...and so on with other properties
このソリューションは、私が(オブジェクトのみ確認に更新される)を達成するために何を望むかにちょっと近いです、私は別の問題に直面した:i nputは、ルール#5に反して、モーダルが開かれるたびにではなく、最初から一度だけオブジェクトからデータを読み込む。
ng-model
バインド機能またはカスタム機能を使用してこれを修正する方法はありますか?他にも簡単な方法がありますか?
--EDIT--ここ
私は、すべてがうまく機能ボタンを使用してデータを保存し、[保存]をクリックして問題ありません
はprojects
リストに反映されます。 (私がF5キーを押すまで)。 問題は、入力テキストが
project
に正しくバインドされていないことと、それを修正したいことです。
サンプルデータ(擬似コード)
Project1の。= "PROJ1" project2.name = "Proj2"
に名前を付ける私は、行#1
- テキスト入力ディスプレイ "PROJ1" の[編集]ボタンをクリックしてください。すべて順調。
- 私は
- 「Proj1pezxde1」のようないくつかのランダムな文字列を追加することにより、入力を変更するには、テキスト入力は、私がいないクリック
Save
ボタンを行う今「Proj1pezxde1」 - です。
- 私はモーダルを閉じます。
- "Proj1"と表示されます。はい。
- 私は
10テキスト入力は、私は、オブジェクトを変更しなかったにもかかわらず、「Proj1pezxde1」である最初の行の[編集]ボタンをクリックします。
テキスト入力は、再び(私はこのモーダルを開くたびに)オブジェクトからデータを読み込むため、私は修正したい問題だ「PROJ1」
が表示されます。少し不正確になって申し訳ありません。
入力をproject.name以外のものにバインドし、ユーザーが[保存]をクリックしたときにproject.name = theEditedValueを実行するだけです。 –
あなたの質問は実際の編集コードで更新する必要がありますか? – Aravind
'"入力をプロジェクト以外のものにバインドするだけです。ユーザーが保存をクリックしたときにproject.name = theEditedValueを実行します。 " @JBNizet しかし、入力テキストの内容をリセットしてバインドするためにモーダルが開かれるたびに呼び出される何らかの種類の関数が必要ですもう一度project.nameにしてください – Karatte