Angular-'找不到HammerJS'


94

我正在一个简单的角度项目中,尝试将Material Design导入到我的项目中,但是某些组件无法正常工作,控制台警告说:

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

我也hammerjs安装了@angular/material。我该如何解决这个问题?



边注

可能值得注意的是,如果您已hammerjs安装并且组件仍无法正确呈现,请确保您使用的是angular material 组件,而不是带有materialize-css 类的 html元素。如果你正在使用materialize-css的不是angular material你需要将它单独添加到您的项目。

Answers:


162

在您的package.json文件中将此添加到dependencies

“ hammerjs”:“ ^ 2.0.8”,

或者,如果您希望使用另一种自动方式,您可以在根项目文件夹中键入npm i hammerjs --save(或者,npm i hammerjs@2.0.8 --save如果需要,因为它2.0.8是当今的最新版本)然后进行测试,如果问题仍然存在,请尝试删除该node_modules文件夹并将其重新安装在根目录中项目文件夹还通过运行npm install,这将检查dependencies在那里hammerjs居住),devDependencies...,在package.json文件和安装它们。

同样在您的 polyfills.ts(如果没有,建议有一个)

导入'hammerjs / hammer';

因此,将在执行有角度的应用程序时找到它,因为polyfills.ts它是由导入(通常情况下,您可以检查)调用的,main.ts这是有角度的应用程序的入口点。


9
添加import语句可以polyfills.ts使警告消失,这太好了!但是材料设计组件仍然不能正确渲染:/我将在问题描述中包括一个屏幕截图。感谢您一直以来的帮助!
Danoram '16

2
没有。但是找到解决方案后,我一定会再检查一次。
Danoram '16

2
似乎我忘记了将CSS链接添加到我的index.html文件中。哎呀..现在一切都很好。为帮助加油!
Danoram

3
我没有使用任何需要的组件hammer。有没有办法禁用这些警告?我在测试中得到了其中的30个。
CWSpear

1
导入'hammerjs / hammer'; 删除了对我的警告
–silentsudo

102

安装Hammerjs

  • npm

    npm install --save hammerjs
  • (或)用纱

    yarn add hammerjs

然后导入hammerjs应用程序的入口点(例如src / main.ts)。

import 'hammerjs';




1
很好的答案,我根本不在乎这可能是很多发现此问题的人可能想知道的事情
Danoram

7
这应该是正确的答案。此外,您应该添加import 'hammerjs';每个*.spect.ts使用材料成分的测试文件,以便在运行时修正警告ng test
Cartucho

3
我不需要更改,tsconfig.json但是导入有效,谢谢您的回答。
虚假

如果必须将导入添加到每个spec文件,是否应该没有办法将其添加到karma.conf文件?
杰夫

引用源说来import it on your app's entry point (e.g. src/main.ts),而不是在app.module.ts。显然,这实际上并不重要。
堆栈下溢

9

systemjs.config.js文件中,您还需要添加以下条目:

'hammerjs': 'npm:hammerjs/hammer.js',

当然还有:

'@angular/material': 'npm:@angular/material/bundles/material.umd.js',

代码中缺少的另一件事(至少基于GH存储库中的内容)是包含Material Design CSS,将其添加到index.html文件中:

<link href="https://rawgit.com/angular/material2-builds/master/core/theming/prebuilt/indigo-pink.css" rel="stylesheet">

我希望这有帮助。


很抱歉花了这么长时间才能回复您。我不认为我的项目正在使用systemjs。尽管您对我说的没错,却忘记了导入CSS!非常感谢,现在看起来不错!
Danoram

7

这对我有用(这也与ionic4一起使用),我可以使Hammer.js正常工作-也可以与material.angular.io一起使用ionic(在底部)

锤+离子(以及锤+角锤):

npm install --save hammerjs
npm install --save @types/hammerjs

然后

package.json
make sure in dependencies there is this line
"hammerjs": "^2.0.8",

然后

tsconfig.json - added types as seen below

"compilerOptions": {
...
...
"types": [
"hammerjs"
]
}

然后

in app.component.ts (only there)
import 'hammerjs';

然后

in html file (I just took out the first and last < > signs)
div id="myElement"></div
in .ts file

HammerJS网站工作的示例代码

let element2 = document.getElementById('myElement');
let hamming = new Hammer(element2);
hamming.on("panleft panright tap press pressup", function(ev) {
    element2.textContent = ev.type +" gesture detected.";
    console.log(ev.type +" gesture detected.");
});

锤+离子+材料:使材料锤与离子一起工作

in app.module
import { HAMMER_GESTURE_CONFIG } from '@angular/platform-browser';
import { GestureConfig } from '@angular/material';

providers: [
    { provide: HAMMER_GESTURE_CONFIG, useClass: GestureConfig },
]

瞧,您的材质滑块会起作用。


3

打开命令行或powershell,输入angular2项目的目录:cd your-project's-root,按Enter键并粘贴:

npm install hammerjs --save

Npm会自动将所有依赖项添加到您的package.json文件中。


npm上的@torazaburo Hammerjs版本会经常更新,因此OP可以确保,如果他使用npm命令安装Hammerjs,它将保持最新状态。
善良的用户

@torazaburo说实话,我在--savenpm上安装它时并没有使用它,并且一切都进行得很顺利,但是由于您是一位经验丰富的用户,因此与您争论是不明智的。
善良的用户

我认为--save不再需要,因为它将自动使用。docs.npmjs.com/cli/install

1
如果您省略--save它,它仍然可以使用,但是不会添加到package.json文件中,这意味着npm install将来运行时将不会自动安装它
Niklas

2
  1. npm install Hammerjs-保存
  2. npm install @ types / hammerjs --save-dev
  3. 将此添加到编译器选项下的typescript.config

    “ types”:[“ hammerjs”]

  4. 将此添加到app.components.ts中:

锤子


您先生,是救世主,如果我设法生第二个儿子,他将以您的名字命名!
codingbuddha

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.