這裏亞去:http://plnkr.co/edit/xAgm0ny6yAB8spd5Oiai?p=preview
你也許可以簡化這個和原來的值存儲在隱藏字段,看看他們是否改變,並減少它每次重複都只是一個更新按鈕,但這是一個開始!
<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。
我認爲這是可能的。我會創建兩個方法:'updateKey(k,v)'和'updateValue(k,v)'。在updateKey中,您需要設置'cluster.properties [k] = undefined'並將v移動到新的'cluster.properties [k]'。這是我第一次想到它時想到的......這是一個有趣的概念。我想試試這個! – Zach