AngularJS:从指令访问ngTouch服务?

时间:2013-10-09 16:40:58

标签: angularjs

我真的很喜欢Angular中的新ng-click指令现在自动包含触摸事件的功能。但是,我想知道是否可以从我的自定义指令访问该触摸事件服务?我有很多指令要求我将click事件绑定到给定元素,但我只是使用典型的jquery语法(例如element.on('click', function(){ ... }))来执行此操作。有没有办法可以将ng-click事件绑定到指令中的元素?无需在我的视图的HTML中手动将ng-click标记放在我的元素上......?

我希望能够利用点击触摸事件的强大功能。我显然可以导入一个库(例如HammerJSQuoJS),但我不想这样做,特别是因为Angular已经在做了。

我可以访问$swipe服务并将不同的元素绑定到该服务,但ngTouch是否有类似的服务?

作为参考,这是我想要这样做的一个例子:

mod.directive('datepicker', ['$timeout', function($timeout){
     return {
         link: function(scope, elem, attrs){
             var picker = new DatePicker();

             elem.on('click', function(e){
                 picker.show();
             });

             // I would rather do something like:
             // elem.on('ngTouch', function(){ ... });
             //
             // or even:
             // $ngTouch.bind(elem, {'click': ..., 'touch': ...});
         }
     }
}]);

更新:如下所述,ng-click指令的源代码为here。任何人都可以看到利用该代码并将其转换为“可绑定”服务的方法吗?

1 个答案:

答案 0 :(得分:8)

我认为这不是正确的做法。我将通过在您的指令中使用模板然后在其中使用ngTouch来解决这个问题。

mod.directive('datepicker', ['$timeout', function ($timeout) {
     return {
         template: '<div ng-touch="doSomethingUseful()"></div>',

         link: function (scope, elem, attrs) {
             var picker = new DatePicker();

             scope.doSomethingUseful = function () {
                 // Your code.
             }
         }
     }
}]);

更新

指令元素上包含其他属性的完整示例:

http://codepen.io/ed_conolly/pen/qJDcr

相关问题