【发布时间】:2021-11-26 23:16:34
【问题描述】:
好的,我知道这个标题可能需要一些工作,但我不知道该怎么说。
这是设置。
我有一个(可能)通过ng-repeat 生成的大型表。所有的行都需要是可编辑的,但是当数据集很大时,所有这些绑定都会减慢爬行速度。我实际上可能要等待 20 秒以上才能加载大型集!
我们注意到,将数据转储为只读状态会显着减少加载时间。所以,我们想出了以只读方式加载它的想法,但是,当点击表格行时,它就变成了可编辑的。这是这样完成的。我有两个单元格输出。 editableRow 最初是 false。单击该行时,editableRow 变为 true。这个想法是,当editableRow 变为真时,我会看到另一个单元格。
(专有代码混淆)
<TABLE-CELL class="value-col" ng-if="readtime.editableRow === true">
<input type="text"
name="readingTime"
ng-model="<data model>"
ng-disabled="<param>"
ng-change="<function>"
ng-class="<classes>"
/>
</TABLE-CELL>
<TABLE-CELL class="value-col" ng-if="readtime.editableRow === false">
<input type="text"
placeholder="{{<data model>}}"
ng-class="<classes>"
/>
</TABLE-CELL>
问题是,在点击时,两个单元格都可见。它实际上只在第一次点击时可见。随后的点击仍然可以做到,但是速度太快了,以至于人眼无法捕捉到。我知道它就在那里,因为我在鼠标单击时使用断点减慢了所有速度。这也表明当值变为真时会发生这种情况 - 打开第一个单元格,但第二个单元格不会在同一时刻消失。因此,它会导致某种“闪烁”。这似乎发生在我的实际代码之外,在 jQuery 内部,所以我不知道如何短路它。
我尝试使用ng-show/hide 来代替,这有点效果,但也完全否定了节省时间的方面,因为它实际上渲染了所有内容,并且花费了很长时间。我也试过ng-cloak,但没有任何效果。
它一直停止的断点(当我告诉它在事件侦听器上停止鼠标点击时)是jquery.js 中的以下代码:
if ( !(eventHandle = elemData.handle) ) {
eventHandle = elemData.handle = function( e ) {
// Discard the second event of a jQuery.event.trigger() and
// when an event is called after a page has unloaded
return typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ?
jQuery.event.dispatch.apply( elem, arguments ) : undefined;
};
}
它击中那条线大约 4 次,并且在最后一个上,两个单元格都是可见的。然后,第二个消失了。
我没有想法,如果对此有任何想法,我将不胜感激。
【问题讨论】:
标签: angularjs