【发布时间】:2013-03-24 23:40:18
【问题描述】:
我正在尝试找到使用 angularjs 进行内联编辑的最佳方法。就我而言,它是一种带有“编辑”按钮的数据网格。所以它在 ng-repeat 里面。
我看到人们所做的是将实际数据和编辑输入放在同一行中,编辑输入被隐藏并在单击编辑按钮时显示。
但这似乎不对。在我看来,这是很多无用的 DOM。
所以我想我会更好地做这样的事情。您单击编辑按钮,它将有一个指令,它将 1) 隐藏带有数据的 <td> 2) 找到按钮的父级,应该是 <tr>,并在其中注入一个模板 3) on保存删除那些编辑<td>s 并再次显示数据<td>s。
所以我开始制作指令,里面有 element.click() 函数,它
// found the parent
var parent = element.closest('tr');
// found all the data tds
var tds = parent.find('td');
// hidden them
tds.hide();
现在问题来了,接下来我想做这样的事情
// append input with editing tds into parent
parent.append('<td><input type="text" ng-model="entry.name" /> {{entry.name}} </td>');
但是它不会绑定甚至解析 {{}} 吗?我必须使用什么方法而不是 jquery 的追加?
关于指令的文档是这样说的
模板元素 - 声明指令的元素。 对元素和子元素进行模板转换是安全的 仅元素。
所以我不能在 element.parent() 上使用模板转换
如果我在<tr> 上制定指令会有帮助吗?即使我这样做了,我也会转换我的整个<tr>,这意味着我丢失了原始模板,我必须有另一个指令或将其转换回原始状态的东西..不是吗?
编辑
因为这个问题似乎很受欢迎.. 首先我最初担心每次 ng-repeat 迭代渲染额外元素是没有根据的,因为 1) 你可以使用 ng-if,这意味着它不会被渲染,直到条件满足真的 2) 你可以按照我的意图附加一个模板,然后只需使用 $compile 就可以了,它肯定不会“昂贵”,因为你只是为了一个元素。有很多方法可以解决这个问题,但 ng-if 是最简单的,如果 supermasher 的方法不适合你,那就是。
【问题讨论】:
标签: jquery datagrid angularjs angularjs-directive inline-editing