【问题标题】:Extending ngClick for adding additional function扩展 ngClick 以添加附加功能
【发布时间】:2015-04-25 04:33:34
【问题描述】:

大家好,有什么方法可以扩展内置指令吗?

这就是我想做的。

例如我的指令模板是:

    <div ng-click="condition && handleClick()" ng-transclude></div>

这里的条件是是否执行对 div 的点击,所以当我重用指令并使其嵌套时,我最终会这样。

注意:我的指令中的条件不会动态改变,这只是一个时间值。

    <div ng-click="condition && handleClick()">
        <div ng-click="condition && handleClick()">
            <div ng-click="condition && handleClick()"></div>
        </div>
    </div>

所以现在的问题是,如果 ng-click 添加到 div 角度将 touchstart 或 click 和其他绑定到 div,我想避免这种绑定,由于这种绑定,许多不必要的事件被添加到 div 中不需要。

现在我想扩展 ng-click 指令,需要在将事件与元素绑定之前添加条件检查,如果条件为假,我将不绑定事件,否则如果为真,我将绑定事件。

为了解决这个问题,我可以编写自己的指令 ng-click-condition 并执行与 ng-click 相同的操作,但要进行条件检查,但如果这样做,我会导致代码重复和可维护性问题,所以我找到了一些重用内置指令的方法。

【问题讨论】:

    标签: javascript angularjs angularjs-directive


    【解决方案1】:

    如果我理解您要正确执行的操作,您应该将所有这些逻辑打包在指令中。

    将指令的范围设置为范围:{}(范围:true,也可以工作。只要每个指令都有自己的范围)

    在你的指令的链接函数中:

    element.bind('click', function() {
      if (condition) {
        //do something awesome
      }
    })
    

    或者如果您想避免绑定,除非满足条件,只需反转绑定即可。但我还是会把它放在指令中:

    if (some condition) {
      element.bind('click', function() {
        //do something awesome
      })
    }
    

    绑定点击和触摸启动: How to bind 'touchstart' and 'click' events but not respond to both?

    编辑: 在需要扩展 ng-click 时仍然没有完全出售。有条件地添加 ng-click 怎么样?

    Dynamically add angular attributes to an element from a directive

    Angular directive how to add an attribute to the element?

    【讨论】:

    • 感谢您的回答,正如您提到的,我的所有指令都有自己的范围,我不想按照您在回答中提到的那样做,因为我不想自己绑定事件,因为ng-click 在触摸屏和非触摸屏上都有很好的事件控制,所以我想重用 ng-click 但我不想复制代码。
    • 我的应用程序同时适用于触摸屏和非触摸屏,ng-click 处理条件和处理更多的情况,然后像不同的浏览器兼容性和幽灵点击等,所以我想使用 ng-click在这种情况下。
    • 为什么不能有条件地将 ng-click 添加到元素中?
    猜你喜欢
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 2019-05-17
    • 2012-03-17
    相关资源
    最近更新 更多