2016-10-12 13 views
1

オブジェクトのプロパティを繰り返し処理する動的フォームコントロールを作成することは可能ですか?角度の動的フォームフィールド

私の目標は、オブジェクト "cluster.properties"を拡張し、ユーザーが新しいキー/値のペアを追加できるようにすることです。私は以下のスニペットを使って値を印刷することができます。しかし、ユーザーがキーや値を変更したり、オブジェクトにプロパティを追加することができる場所では、これを編集可能にすることはできません。

<div ng-controller="MyCtrl"> 
    <div ng-repeat="(k,v) in cluster.properties"> 
    <input ng-model="k"> 
    <input ng-model="v"> 
    </div> 

</div> 

正しい方法がありますか?

よろしくお願いいたします。

+0

と思います。私は 'updateKey(k、v)'と 'updateValue(k、v)'という2つのメソッドを作成します。 updateKeyでは、 'cluster.properties [k] = undefined'を設定し、vを新しい' cluster.properties [k] 'に移動する必要があります。これは私が最初にそれについて考えるとき気になることです...それは面白い概念です。私はこれを試してみたい! – Zach

答えて

0

JavaScriptでは、既存のオブジェクトプロパティ名を動的に変更することはできません。

キーと値を別の入力セットにコピーするボタンと既存のボタンを編集することをお勧めします。キーが編集されると、新しいプロパティを作成して古いものを削除する必要があります

ここで
1

屋に行く:http://plnkr.co/edit/xAgm0ny6yAB8spd5Oiai?p=preview

あなたはおそらくこれを単純化し、彼らが変更された場合見ると、繰り返しごとに1つの更新ボタンにそれを減らすために非表示フィールドの元の値を格納するが、これはスタートですでした!

<div ng-repeat="(k,v) in myCtrl.myObject"> 
    <input type="hidden" ng-model="k"> 
    <div> 
    Key: <input ng-model="newKey" ng-value="k" /> 
    <button ng-click="myCtrl.updateKey(k, newKey, v)">Update</button> 
    </div> 
    <div> 
    Value: <input ng-model="v" /> 
    <button ng-click="myCtrl.updateValue(k,v)">Update</button> 
    </div> 
    <hr /> 
</div> 

と機能:

vm.updateKey = function(k, newKey, v) { 
    // newKey will be undefined if nothing changed 

    // Check to see if it changed 
    if(k != newKey && newKey !== undefined) { 
    // If it's empty... delete it 
    if(newKey != '') { 
     vm.myObject[newKey] = v; 
    } 
    delete vm.myObject[k]; 
    } 
}; 

vm.updateValue = function(k, v) { 
    vm.myObject[k] = v; 
}; 

あなたが考慮すべきいくつかの他の考慮事項は次のとおりです。何か別のを使用して新しいプロパティ名の競合か?また、上記の私のコメントはundefinedに設定することでは不十分です。 deleteキーワードを使用する必要があります。そうしないと、ng-repeatが正しく更新されません。

+0

ありがとう、これは本当にいいね。私は{key: ""、value: ""}オブジェクトの別の配列を使用して終了しました。バックエンドに送信する前に{key:value}オブジェクトにフラット化しました。 –

+0

Ok。それはそれを行う別の方法です! :D – Zach

関連する問題