如果没有DOM操作,如何通过双击创建可编辑的表格单元格?
我想在那里http://jsfiddle.net/bobintornado/F7K63/35/?
我的控制器代码在
之下function myCtrl($scope) {
$scope.items = [{
name: "item #1",
editing: 'readonly'
}, {
name: "item #2",
editing: 'readonly'
}, {
name: "item #3",
editing: 'readonly'
}];
$scope.editItem = function (item) {
item.editing = '';
};
$scope.doneEditing = function () {
//dong some background ajax calling for persistence...
};
}
但是我面临的问题是使输入元素只读并“提交”输入(在输入按下的事件时启动ajax调用以消耗一些Restful服务来更新后端服务器)
非常感谢有人能分享他们的智慧!
PS:我认为Parse.com中可编辑的数据浏览器表是我能得到的最好的演示,但我没有关于如何实现它的线索。
答案 0 :(得分:22)
我更新了the fiddle。这是你想要的吗?
HTML
<tr ng-repeat="item in items">
<td>
<span ng-hide="item.editing" ng-dblclick="editItem(item)">{{item.name}}</span>
<input ng-show="item.editing" ng-model="item.name" ng-blur="doneEditing(item)" autofocus />
</td>
</tr>
JS
$scope.items = [{name: "item #1", editing: false},
{name: "item #2", editing: false},
{name: "item #3", editing: false}];
$scope.editItem = function (item) {
item.editing = true;
}
$scope.doneEditing = function (item) {
item.editing = false;
//dong some background ajax calling for persistence...
};
但是,您应该创建一个包含可编辑行的指令。当你点击项目时,在那里实现自动对焦。
答案 1 :(得分:4)
我不太喜欢重复元素解决方案,所以我尝试了另一种方式,它完美地工作,而不会使模型复杂化。
这是我的第一个贡献,所以我希望你喜欢这些人!
我使用ng-readonly条件来保护输入。 Ng-repeat为迭代的每个元素分配$ index,因此我为ng-repeat创建了一个条件,以检查元素的$ index是否与$ scope.eEditable变量匹配。然后用ng-dblclick我可以为$ scope.eEditable分配点击元素的$ index。
HTML
<tr ng-repeat="item in items">
<td>
<input type="text" value="{{item.name}}" ng-readonly='!($index == eEditable)' ng-dblclick="eEditable = $index"/>
</td>
</tr>
CONTROLLER
$scope.eEditable= -1; //-1 by default. It doesn't match any $index from ng-repeat
控制器中的一行和视图中的两个指令,简单且有效