这更像是一种怀疑,而不是一种经过验证的问题,但是...... 我曾经和knockoutjs合作过一段时间,在那里创建大量的ko点击绑定是一个性能问题 - 更好的方法是使用更少的jQuery .on('点击',... )处理这些。
现在我已经潜入了angularjs,我在ng-repeat中有一个ng-repeat,在第二个内部我有一些带有ng-click的按钮..
<ul>
<li ng-repeat="el in collection">
<button ng-click="someFn()">click me</button>
<button ng-click="someFn2()">click me</button>
<button ng-click="someFn3(el)">click me</button>
</li>
</ul>
这不会创建大量的点击事件绑定吗?或者角度是否以某种方式对其进行优化?
答案 0 :(得分:1)
在这种情况下几乎没有任何优化。如果你有几个嵌套的ngRepeats怎么办?应该针对哪一个进行优化?确实不容易回答。此外,重复的项目可以由另一个控制器控制。
我看到以下有点hackish完成任务的方式 我们可以将ngClick应用于调用某个方法的父元素,并传递允许识别被点击项的值。
<ul ng-click="itemClicked(itemIdentifier)">
<li ng-repeat="el in collection">
<button>click me</button>
</li>
</ul>
唯一要回答的问题是我们如何获得这种识别价值。我们需要自己的指令来应用重复的DOM元素,该元素将此值附加到元素。之后我们可以从$event
对象中获取值。
<ul ng-click="itemClicked($event.target.itemIdentifier)">
<li ng-repeat="el in collection">
<button click-optimiztation="el">click me</button>
</li>
</ul>
当然,您需要检查undefined
值。
这种方法必须根据您的需要进行调整,因为您希望在每个重复的模板中包含多个可点击元素。尽管如此,我希望这个想法很清楚。