私が取り組んでいるプロジェクトの編集可能なリストを実装する必要があります。アイテムをクリックすると、クリックしたアイテムに関連する一連のオプションを持つ編集状態に変わります。私たちの UX はアイテムをインラインで編集することを望んでいますが、Angular でこれを行う最善の方法がわからず、どちらの方法が優れているかを知りたいです。
例 1 テンプレート
<div class="person" ng-repeat="person in people" ng-click="editing=!editing">
<div class="details-view" ng-hide="editing" ng-bind="person.name"></div>
<div class="edit-view" ng-show="editing">
<input type="text" /> <button type="button">Save</button> <a>Cancel</a>
</div>
</div>
例 1 コントローラー
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.people = [
{name: 'Joe', age:23},
{name: 'Jim', age:32},
{name: 'Jill', age:13}
]
});
最初の方法 (例 here ) は、ng-repeat を持ち、各 ng-repeat アイテムの内部で ng-repeat アイテムに固有の編集モードを作成することです。これはうまく機能しますが、サーバーからの応答が成功するまで編集モードを終了したくありません。この方法を使用してそれを処理する方法がわかりません。
例 2 テンプレート
<div class="person" ng-repeat="person in people" ng-click="toggleEditing(person)">
<div class="details-view" ng-hide="person.editing" ng-bind="person.name"></div>
<div class="edit-view" ng-show="person.editing">
<input type="text" /> <button type="button">Save</button> <a>Cancel</a>
</div>
</div>
例 2 コントローラー
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.people = [
{name: 'Joe', age:23},
{name: 'Jim', age:32},
{name: 'Jill', age:13}
];
$scope.toggleEditing = function(person) {
person.editing = !person.editing;
};
});
私が考えた2 番目の方法 ( example here ) は、ビュー ステートをオブジェクトにダック パンチすることです。ng-repeat によって渡されたオブジェクトを変更したくないため、この方法は好きではありません。この方法を使用すると、上記の最初の方法では処理できない成功した保存を処理できます。
より良いオプションはありますか?