BuZ*_*dEE 6 hammer.js angular angular9
更新到 Angular 9 后,无法再使用 Hammer.js。我们对 Angular 进行HammerGestureConfig了如下扩展:
import {HammerGestureConfig} from '@angular/platform-browser';
import {Injectable} from '@angular/core';
@Injectable({providedIn: 'root'})
export class HammerConfig extends HammerGestureConfig {
overrides = <any>{
'pan': {
direction: Hammer.DIRECTION_ALL,
threshold: 5
} // override default settings
};
buildHammer(element) {
const recognizers = [];
if (element.hasAttribute('data-hammer-pan')) {
recognizers.push([Hammer.Pan]);
}
if (element.hasAttribute('data-hammer-pan-x')) {
recognizers.push([Hammer.Pan, {direction: Hammer.DIRECTION_HORIZONTAL}]);
}
if (element.hasAttribute('data-hammer-tap')) {
recognizers.push([Hammer.Tap]);
}
if (element.hasAttribute('data-hammer-pinch')) {
recognizers.push([Hammer.Pinch]);
}
if (element.hasAttribute('data-hammer-rotate')) {
recognizers.push([Hammer.Rotate]);
}
if (element.hasAttribute('data-hammer-press')) {
recognizers.push([Hammer.Press]);
}
if (element.hasAttribute('data-hammer-swipe')) {
recognizers.push([Hammer.Swipe]);
}
const hammer = new Hammer.Manager(element, {
recognizers: recognizers,
touchAction: 'auto'
});
return hammer;
}
}
Run Code Online (Sandbox Code Playgroud)
将HammerConfig添加到应用程序模块中。:
providers: [
{
provide: HAMMER_GESTURE_CONFIG,
useClass: HammerConfig
}
],
Run Code Online (Sandbox Code Playgroud)
据我了解,buildHammer应该调用该方法,但从未调用过。
可能是什么问题呢?
在HammerModule需要被导入到角应用模块。
imports: [
...
HammerModule
],
providers: [
{
provide: HAMMER_GESTURE_CONFIG,
useClass: HammerConfig
},
...
],
...
Run Code Online (Sandbox Code Playgroud)
ivy:使 Hammer 支持摇树。以前,在 Ivy 应用程序中,默认情况下包含 Hammer 提供程序。通过此提交,需要 Hammer 支持的应用程序必须
HammerModule在其根模块中导入。(#32203)(de8ebbd)
https://github.com/angular/angular/blob/9.0.0/CHANGELOG.md
| 归档时间: |
|
| 查看次数: |
4455 次 |
| 最近记录: |