angular - 在 Angular 中为不同的模块配置 hammer.js 手势

标签 angular config gesture hammer.js

我的根模块中有一个标准的 Hammer 手势自定义配置:

import { HAMMER_GESTURE_CONFIG } from '@angular/platform-browser';
import { HammerGestureConfig } from '@angular/platform-browser';

export class CustomHammerConfig extends HammerGestureConfig {
    overrides = {
        pan: {
            direction: 6 // this code enables only horizontal direction
        },
        pinch: {
            enable: false
        },
        rotate: {
            enable: false
        }
    };
}

@NgModule({
    declarations: [
        AppComponent
    ],
    imports: [
        //
    ],
    providers: [
        //
        {
            provide: HAMMER_GESTURE_CONFIG,
            useClass: CustomHammerConfig
        }
    ],
    bootstrap: [
        AppComponent
    ]
})

我有一个 Carousel 组件,它必须只能水平平移,所以 Carousel 组件 block 上的垂直平移不会阻止整个页面在移动设备上滚动。

因此,全局 Hammer 手势配置适用于我的 Carousel 组件。

但我有另一个组件——图库组件——必须在所有方向启用平移手势。我尝试在我的图库模块中配置 Hammer:

import { CommonModule} from '@angular/common';
import { NgModule } from '@angular/core';

import { HAMMER_GESTURE_CONFIG } from '@angular/platform-browser';
import { HammerGestureConfig } from '@angular/platform-browser';

import { GalleryComponent } from './gallery.component';

class GalleryHammerConfig extends HammerGestureConfig {
    overrides = {
        pan: {
            direction: 31 // this code enables all directions
        }
    };
}

@NgModule({
    imports: [
        CommonModule
    ],
    declarations: [
        GalleryComponent
    ],
    providers: [
        {
            provide: HAMMER_GESTURE_CONFIG,
            useClass: GalleryHammerConfig
        }
    ],
    exports: [
        GalleryComponent
    ]
})

export class GalleryModule {}

但它没有任何效果——Angular 只理解根模块配置的 Hammer 手势。

如果我从根 App 模块中删除 Hammer 手势配置并将其应用到 Carousel 模块,那么 Carousel 有自己的自定义配置,Gallery 也有自己的自定义配置——好吧,它根本没有任何效果— Angular 采用它自己的默认 Hammer 手势配置,并使用它代替我的自定义配置。

那么,如何为不同的组件应用不同的 Hammer 手势配置?

最佳答案

您可以使用内置手势的@angular/platform-b​​rowser 而不是尝试覆盖它们。

您的轮播组件可以使用 panleftpanright方法,而您的图库应用程序可以使用 pan方法。即使同时使用它们,也不会发生冲突。

Here's a stackblitz我把平移手势放在一起,但你可以将它添加到任何元素上,只要你正在导入 hammerjs进入您的应用程序。

<div (pan)="onpan($event)"></div>

关于angular - 在 Angular 中为不同的模块配置 hammer.js 手势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47452310/

相关文章:

angular - 如何在其他项目中重用 Angular 模块

angular - 如何从 Angular 构建中排除瞬间语言环境?

angular - 未绑定(bind)断点 - Angular、VS Code、Chrome、PWA

vue.js - 如何加载 JSON 配置文件并让 Vue 应用程序等待它?

ios - 如何以编程方式结束/重置 UIGestureRecognizer?

angular - 如何在 Angular Material 自动完成中过滤对象

java - 多模块 TypeSafe 配置文件

node.js - 共享模块的 NestJS 问题

java - Libgdx - 输入处理 [Android]。关于听众,我有什么不明白的?

ios - onTapGesture禁用我的“选择器”和“分割”点击