避免使用angularjs进行就地编辑的大量隐藏元素
Avoiding a large amount of hidden elements for in place editing with angularjs
我有一个相当大的列表,其中包含要添加的待办事项,我想为其添加就地编辑:
[ ] first todo
[ ] second todo
[ ] third todo
单击第二个待办事项后,可以编辑第二个待办事项的文本,但您也可以在待办事项上设置一些属性:
[ ] first todo
-----------------------------------------------------------
| [ ] second todo__________________ |
| due: __/__/____ |
| assigned: ______________ |
| |
| [save] [cancel] |
-----------------------------------------------------------
[ ] third todo
现在我可以执行以下操作:
<div ng-repeat="todo in todos">
<div ng-show="!doedit">
<input type="checkbox"> <a href="" ng-click="doedit = true">{{todo.title}}</a>
</div>
<div ng-show="doedit" class="boxed">
<input type="checkbox"><input type="text" ng-model="todo.title"><br>
<input type="date" ng-model="todo.due"><br>
<input type="text" ng-model="todo.assigned"><br>
<button ng-click="doedit = false">save</button>
</div>
</div>
这应该有效(忽略取消按钮应该如何工作),但是如果我有一个大的待办事项列表(100+ 项),它将创建大量可能从未使用但仍绑定到变量的隐藏元素。
有没有更好的方法可以做到这一点?我查看了角度可编辑,它似乎可以动态添加元素,但它仅适用于简单的输入元素。
还是在角度中拥有大量隐藏元素不是问题?
ng-if
如果元素的计算结果为 false,则从 DOM 中完全删除该元素,包括任何观察者。例如:
<div ng-if="doEdit"></div>
这篇文章解释了ng-if和ng-show之间的一些区别。
拥有大量的隐藏元素不仅是 js 的问题,也是 DOM 本身的问题。 你不应该这样做。
相反,可以做的是
1. 使用 ng-if - 在用户单击待办事项后,保持所有元素的状态,比如说isEdited
。设置变量/状态isEdited = !isEdited
。如果尚未设置为 true,则会将其设置为 true。然后在你的 DOM 中使用 ng-if 编写 HTML。像这样的东西
<div class="to-do-item"></div><br>
<div ng-if="isEdited">
<!--UI for the edited part-->
</div>
因为 ng-if 在条件为真之前不会呈现 html。DOM 上不会有太多负载。
2.如果用于编辑待办事项的模板对于所有待办事项都相同。您应该更喜欢将ng-include
与 ng-if
一起使用。这样,将在您第一次尝试编辑元素时下载模板。然后,您可以缓存它,以免网络滞后。也没有额外的隐藏html。页面上需要的任何内容都在页面上,不会被隐藏。
> 将所有编辑部分包装到一个带有ng-if
的容器中,当整个部分不活动时,内部监视的数量将减少到一个
- CKEditor Widget-阻止编辑可编辑元素本身
- javascript正则表达式,用于编辑元素内部的css样式属性
- 在此内容可编辑元素中获取当前行和行索引
- 防止文本在内容可编辑元素中突出显示时被删除
- 如何防止用户在内容可编辑元素中键入新行
- 如何自动调整内容可编辑元素的大小
- 如何在内容可编辑元素中的文本失去焦点时保持该元素处于选中状态
- 如何模拟内容可编辑元素上的可编辑点击
- 在内容可编辑元素上按 Enter 时插入 BR 或 P 标签的跨浏览器方式
- 一行仅用于内容可编辑元素
- 将内容可编辑元素替换为有序列表时保持可编辑性
- 内容不包含在内容可编辑元素中
- 如何在内容可编辑元素中获取所选元素
- 可编辑元素,覆盖不起作用的原始文本(x-Editable)
- 正在设置内容可编辑元素的最大大小
- 设置插入符号在内容可编辑元素中的位置
- 如何使用React.js编辑元素'
- 在线源代码编辑元素
- 具有可编辑元素的表单应该具有' edit - Form '属性
- 在angular-x-editable示例代码中,带有可编辑元素的表单应该有' edit - Form '属性