Gil*_*man 4 javascript angularjs angularjs-ng-touch
如何使用ngTouch但有选择地禁用某些元素?也就是说,对于某些元素,我想使用原始ngClick指令而不是ngTouch提供的指令.像这样的东西:
<button ng-click-original="myClickFn()">click me</button>
Run Code Online (Sandbox Code Playgroud)
问题是,一旦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});
});
});
};
}
};
}]);
Run Code Online (Sandbox Code Playgroud)
方法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;
}
}]);
});
Run Code Online (Sandbox Code Playgroud)
就像注释装饰器在第一次使用该指令之前不会运行它只会运行一次.
用法示例: -
<button ng-click="myClickFn()" notouch>click me</button> <-- see notouch attribute -->
<button ng-click="myClickFnTouch()">click me</button>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2343 次 |
| 最近记录: |