如何有条件地禁用ngTouch并回退到ng-click

吉尔·伯曼

如何使用ngTouch,对某些元素有选择地禁用它?也就是说,对于某些元素,我想使用原始ngClick指令,而不是ngTouch提供的指令。像这样:

 <button ng-click-original="myClickFn()">click me</button>
PSL

问题是,一旦您将ngTouch模块包含在依赖项中,其版本ngClick ngTouch.directive('ngClick'将覆盖角核的原始ngClickDirective。因此,所有点击都将由ngTouch的版本处理,ng-click因此您需要装饰模块中的ngCLick才能处理您的情况。我可以在这里想到几种方法:

方法1-创建自己的指令

由于它是一个自定义指令,因此如何创建一个ng-click-orig可能不带有前缀的方法ng

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

演示版


方法2:-用装饰器执行ng-Click指令

另一种方法是在ngClickDirective上创建装饰器,查找特定的属性notouch并执行常规点击,或使用ngTouch提供的原始属性。

.config(function($provide){
   //Create a decoration for ngClickDirective   
   $provide.decorator('ngClickDirective', ['$delegate','$parse', function($delegate, $parse) {
        //Get the original compile function by ngTouch
        var origValue = $delegate[0].compile();
        //Get set the compiler
        $delegate[0].compile = compiler;
        //return augmented ngClick
        return $delegate;

       /*Compiler Implementation*/
       function compiler(elm, attr){
          //Look for "notouch" attribute, if present return regular click event, 
          //no touch simulation
          if(angular.isDefined(attr.notouch)){
            var fn = $parse(attr["ngClick"]);
            return function handler(scope, element) {
              element.on('click', function(event) {
                scope.$apply(function() {
                  fn(scope, {$event:event});
                });
              });
            }
          }
          //return original ngCLick implementation by ngTouch
          return origValue;
         }
   }]);
});

就像注释装饰器在第一次使用该指令之前不会运行,并且只会运行一次。

用法示例:-

   <button ng-click="myClickFn()" notouch>click me</button> <-- see notouch attribute -->
   <button ng-click="myClickFnTouch()">click me</button>

演示装饰器

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在有条件的ng-click上触发多个动作

来自分类Dev

Vue.js:有条件地在@click上调用函数

来自分类Dev

如何触发 created() 方法而不是 v-on:click 有条件的标签?

来自分类Dev

如何有条件地禁用routerLink属性?

来自分类Dev

Flutter PopupMenuButton - 如何有条件地禁用它

来自分类Dev

有条件地禁用jButton

来自分类Dev

如何禁用ng-click的表单验证?

来自分类Dev

如何禁用跨度的ng-click事件?

来自分类Dev

如何有条件地渲染

来自分类Dev

有条件地禁用复制构造函数

来自分类Dev

有条件地设置引导按钮的禁用状态

来自分类Dev

有条件地禁用React Checkbox

来自分类Dev

有条件地禁用jQuery移动后退按钮

来自分类Dev

如何在PrimeFaces中有条件地隐藏/显示或启用/禁用菜单项?

来自分类Dev

如何使用React Redux状态有条件地显示和禁用按钮

来自分类Dev

如何有条件地指定HTML输入是禁用还是只读?

来自分类Dev

* ng如果行为:如何有条件地以角度2显示数据?

来自分类Dev

如何在angular中使用ng-if有条件地显示消息

来自分类Dev

如何在有条件的js中有条件地应用标题

来自分类Dev

如何在有条件的组件上有条件地添加道具?

来自分类Dev

ng:click和ng-click有什么区别?

来自分类Dev

如何有条件地读取所有属性?

来自分类Dev

如何在div中禁用root ng-click按钮?

来自分类Dev

如何有条件地应用动画?

来自分类Dev

如何使EditorFor有条件地变为只读状态?

来自分类常见问题

如何有条件地包装React组件?

来自分类Dev

如何有条件地调用spring验证器

来自分类Dev

如何有条件地增加新的列值

来自分类Dev

如何有条件地使用Test :: Simple?

Related 相关文章

热门标签

归档