在 Angular 6 中找不到 HammerJS。

62

我在项目中使用angular-material组件。但是我发现以下警告信息:

找不到HammerJS。可能会导致某些Angular Material组件无法正常工作。

无法绑定“longpress”事件,因为没有加载Hammer.JS且没有指定自定义加载器。

我知道这与该问题有重复之处

答案中提到了以下内容:

  1. 我们需要在package.json文件的dependencies中添加"^2.0.8"
  2. polyfills.ts文件中导入'hammerjs/hammer';

在我的情况下一切都很好,但是浏览器控制台仍然显示相同的警告。


请您添加一些示例/代码以重现该问题吗? - Just code
实际上,我试图提供 StackBlitz 链接。当我使用 StackBlitz 时,它没有显示这些警告。 - PGH
请在评论中添加内容。 - Just code
我有很多组件,但我无法找到是哪个组件显示了这个警告。 - PGH
1
我应该发布 package.json 文件吗? - PGH
显示剩余2条评论
5个回答

95

解决这个问题有两种方法:

  1. 在你的主模块文件或 polyfills.ts 文件中包含 (main) 导入:

import 'hammerjs';
  • 或者将CDN中的脚本包含进你的index.html文件中:

  • <head>
      <!-- ... -->
      <script src="https://cdnjs.cloudflare.com/ajax/libs/hammer.js/2.0.8/hammer.min.js"></script>
      <!-- ... -->
    </head>
    

    import 'hammerjs'; 解决了我的错误,非常感谢。实际上,之前我在主模块文件中导入了 **(hammerjs)**,像这样:import {} from 'hammerjs';。这样做是错误的吗? - PGH
    1
    @PrashanthGH 不需要。只需导入模块本身即可。该语法不会导入任何用于项目的内容。但是,导入该模块(可能)会导入所有模块。 - Edric

    28

    使用以下方式安装

    npm install --save hammerjs
    
    或者
    yarn add hammerjs
    
    安装后,在应用程序的入口点(例如src/main.ts)导入它。
    import 'hammerjs';
    

    Angular Material 入门指南


    18

    使用 Angular6,您可以在 angular.json 文件中的 node_modules 中包含 hammerjs 路径。

    Angular 文档指出 angular.json 文件的目的是:

    CLI 配置默认值适用于工作区中的所有项目,包括 CLI 使用的构建、服务和测试工具的配置选项,例如 TSLint、Karma 和 Protractor。有关详细信息,请参阅 Angular 工作区配置。

    您可以将 hammerjs 的节点模块路径包含在脚本列表中。 以下是一个示例:

     "projects": {
        "demo": {
          "root": "",
          "sourceRoot": "src",
          "projectType": "application",
          "prefix": "app",
          "schematics": {},
          "architect": {
            "build": {
              "builder": "@angular-devkit/build-angular:browser",
              "options": {
                "outputPath": "dist/demo",
                "index": "src/index.html",
                "main": "src/main.ts",
                "polyfills": "src/polyfills.ts",
                "tsConfig": "src/tsconfig.app.json",
                "assets": [
                  "src/favicon.ico",
                  "src/assets",
                  "src/manifest.json"
                ],
                "styles": [
                  "src/styles.css"
                ],
                "scripts": [
                  "node_modules/hammerjs/hammer.min.js" <- add path to hammerjs
                ]
              },
              "configurations": {
              ....
    
    
    请注意,您必须重新启动“ng serve”以使其生效。

    2
    这个有效,注意需要停止并重新启动项目才能拾取到该文件。 - levelonehuman

    0

    0

    项目全局级别添加 Hammer.js

    "scripts": [
                  "node_modules/hammerjs/hammer.min.js" <- add path to hammerjs
                ]
    

    模块级加法

    import * as Hammer from 'hammerjs';
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接