如何覆盖ng-click指令以不自动运行$ apply

时间:2014-10-29 13:08:20

标签: angularjs angularjs-directive angularjs-ng-click

发现了一些接近的问题,但不完全是我需要提出的问题。

我有多个带有ng-click事件的元素。 对于大多数(特定类别),我不需要在点击后实际运行角度消化周期。点击这些元素的结果不会影响任何范围变量(例如,他们只是打印出一个console.log)。

我想要做的是有条件地对ngClick做出反应,其中说某个特定css类的元素最后没有自动$ apply。

编辑:

我最终做的是用相应的javascript替换替换ng-click,ng-mouseenter和ng-mouseleave。

我这样做有两个原因: 1.我实际上并没有影响这些点击的范围变量,因此我不需要在每次点击后运行摘要(我有鼠标,所以你可以成像,无缘无故地产生大量的摘要周期)。 2.这是我在另一个源(ng-bind)的页面加载序列中加载的内容,因此必须通过angular进行清理然后编译。这需要一段时间(几乎一秒钟),因为我有很多这样的链接,这阻碍了内容的显示。

1 个答案:

答案 0 :(得分:3)

虽然我强烈建议不要这样做,因为申请中的$ apply不会影响任何事情(甚至性能)。您必须为此创建自己的指令。

<强> HTML

<div data-no-apply-click="myFunction()">
</div>

<强>的Javascript

.directive('noApplyClick', function ($parse) {
    return {
        compile : function ($element, attr) {
            var fn = $parse(attr['noApplyClick']);
            return function (scope, element, attr) {
                element.on('click', function (event) {
                    fn(scope, {
                        $event : event,
                        $element : element
                    });
                });
            };
        }
    };
});

JsFiddle http://jsfiddle.net/gj54bjsh/