在ng-repeat中突出显示一行的更有效方法?. .角的方式
A more efficient way to highlight a row in ng-repeat? ... the angular way
我已经在这里说明了这个想法:http://plnkr.co/edit/lPHWba9e4WqXmQLMmplv?p=info
想象一个用ng-repeat构建的项目列表…
<tr ng-repeat="item in items">
<td id="{{item.id}}">item.id</td>
</tr>
我想让外部模块突出显示其中一行的方式。一种方法是使用jquery:
function hilite(id){
$('#'+id).css('background-color', '#f33');
}
角方向是什么?... 这里有一个选项:
<tr ng-repeat="item in items">
<td css="{{hiliteID==item.id && 'background:#f33;'}}" id="{{item.id}}">item.id</td>
</tr>
但是这样不是更慢吗?(想象一下,在一个应用程序中,angular需要在$scope中监视成千上万的项,这已经让它不堪重负了……小事情很重要)
检查我的plunkr…你能想到更好的方法来做这件事吗?这不是jquery吗?http://plnkr.co/edit/lPHWba9e4WqXmQLMmplv?p=info
我可能会被指责为异端邪说,但我不介意使用jQuery(或类似的),如果有很好的理由。一些想法:
- 如果高亮显示只是一个短暂的效果(在
$.effect("highlight")
- ref - 的意义上,这不是这里的情况),我相信jQuery将是一个很好的优化选择。 -
如果你真的介意手表(当模型开始变大时,你应该这样做),为什么不在应用于列表根的指令中实现这个功能呢?一些伪代码来解释:
<tbody highlighter="some.expression.here"> <tr ng-repeat="item in items"> <td id="{{item.id}}">item.id</td> </tr> </tbody>
因此,
highlighter
指令不知怎么地知道通过应用单个监视来突出显示一行,例如(再次非常粗略的伪代码):// in the link(scope,elem) function: scope.$watch("highlightedRowId", function(newval, oldval) { elem.find("#" + oldval).removeClass("highlighted"); elem.find("#" + newval).addClass("highlighted"); });
-
(如haki评论)模型真的需要这么大吗?有什么方法可以避免吗?是权衡"使用jQuery和更少的手表"与。"干净的代码和更多的手表"值得吗?
这些只是关于一个有趣的开放式问题的一些非常粗略的想法…事实上,我开始写评论,但很快就变得太长了。不管怎样,玩得开心!
相关文章:
- 如何有效地将游戏数据存储在URL查询字符串中
- 拆分文本以每隔n个字符添加一行新行,并注意空格
- 动态插入的表:JQuery未检测到最后一行
- 如何使用Node.js最有效地解析网页
- jquery代码在Mozilla中有效,但在其他浏览器上无效
- 在终端中运行 JavaScript 时(使用 rhino),如何使用 print() 函数在一行中打印
- 如何在Angular UI网格中选择下一行
- 有效形式-始终只显示1个错误[角度]
- 通过单击动态加载的表中同一行的另一个字段来更新一行的字段
- Javascript袖珍参考,第121页:这是怎么回事;猴子补丁”;方法应该有效
- 单击仅在第二次单击后有效
- 什么'是在asp.net MVC中将本地化的resources.resx文件转换为javascript文件的有效
- 为什么自我执行匿名有效
- D3.js生成有效的SVG,但不显示任何内容
- 如何在AngularJS中有效地检查日期是否有效
- 为什么不是'我的函数在解析云代码中工作吗?当我在Angular和Express中测试时,它是有效的
- 激活输入的复选框有效,但如果一行输入重复,它的行为会很奇怪
- 在使用javascript添加更多行的表单中,只有一行有效
- 在ng-repeat中突出显示一行的更有效方法?. .角的方式
- 设置多个变量在一行有效的javascript?(var x = y = & # 39;价值# 39;;)