在ng-repeat内部进行angularjs ng-click的性能

时间:2014-07-27 09:26:14

标签: javascript angularjs performance click ng-repeat

这更像是一种怀疑,而不是一种经过验证的问题,但是...... 我曾经和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>

这不会创建大量的点击事件绑定吗?或者角度是否以某种方式对其进行优化?

1 个答案:

答案 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值。

这种方法必须根据您的需要进行调整,因为您希望在每个重复的模板中包含多个可点击元素。尽管如此,我希望这个想法很清楚。