在 ng 重复中进行内联编辑时,输入字段会模糊
Input field blurs when inline editing in ng-repeat
我正在尝试对数据表进行内联编辑(请参阅plunkr)
<table class="table table-bordered">
<tr ng-repeat="data in dataset" >
<td ng-repeat="(key, value) in data" >
<div class="key-block">
<strong >{{key}}</strong>
</div>
<div class="val-block" inline-edit="data[key]" on-save="updateTodo(value)" on-cancel="cancelEdit(value)">
<input type="text" on-enter="save()" on-esc="cancel()" ng-model="model" ng-show="editMode">
<button ng-click="cancel()" ng-show="editMode">cancel</button>
<button ng-click="save()" ng-show="editMode">save</button>
<span ng-mouseenter="showEdit = true" ng-mouseleave="showEdit = false">
<span ng-hide="editMode" ng-click="edit()">{{model}}</span>
<a ng-show="showEdit" ng-click="edit()">edit</a>
</span>
</div>
</td>
</tr>
我可以在很多地方看到,我们必须在ng-repeat
内部使用ng-model
.
以避免范围问题。正如我dont know the key already
的那样,我正在为模型做data[key]
。输入单个字符后,输入字段模糊。
您描述的行为是正常的。如果你仔细观察,你会发现输入值和指令都绑定到同一个对象,即data[key]
。当您更改文本输入的值时,model
会更新,最终触发指令的刷新,您将返回到"列表"视图。
解决此问题的一种简单解决方案是在指令和输入值之间使用中间变量,并仅在单击保存按钮时更新模型。像这样:
//Directive
scope.newValue = null;
scope.edit = function() {
scope.editMode = true;
scope.newValue = scope.model;
$timeout(function() {
elm.find('input')[0].focus();
}, 0, false);
};
//Template
<input type="text" on-enter="save()" on-esc="cancel()" ng-model="newValue" ng-show="editMode">
你可以在这里看到一个修改过的弹跳器。
相关文章:
- 角度变量在编辑输入字段之前不显示
- Javascript通过加法编辑输入值
- 在angularJS中使用split()时无法编辑输入
- 用于编辑输入字段的弹出窗口
- 一起编辑输入字段,而不是单独编辑
- HTML5输入颜色,可编辑输入
- TinyMCE 编辑输入值和按钮文本
- 两个用户通过 websocket 编辑输入时出现问题
- 在单击后创建输入时,是否可以准确地在单击发生的位置开始编辑输入
- j可编辑输入类型日期
- 在编辑输入 jQuery 后激活只读返回
- Javascript/JQuery 数据网格,用于在数据表中显示/编辑/输入
- 编辑输入字段时的触发方法
- 可编辑 - 输入字段上的最大长度,模糊时闪烁
- 设置状态 [反应本机] 后无法编辑输入文本
- 如何在 HTML5 中使用 CSS3 在灯箱中显示编辑输入字段
- 使用 Javascript 编辑输入字段的值
- jQuery模板-如何获取用户编辑输入的值
- 带有复选框和可编辑输入框的HTML表单
- 禁用编辑输入框的部分