Angular 2 - '找不到HammerJS'

Dan*_*ram 86 javascript hammer.js material-design angular

我正在开发一个简单的angular2项目,我正在尝试将Material Design导入到我的项目中,但是有些组件工作不正常,并且控制台警告说:

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

我已经hammerjs安装了@angular/material.我该如何解决这个问题?

我的项目可以在这个github回购中找到



边注

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

sel*_* mn 150

在您的package.json文件中添加此内容dependencies

"hammerjs":"^ 2.0.8",

或者,如果您想要一种替代自动方式,只需在根项目文件夹中键入npm i hammerjs --save(或者npm i hammerjs@2.0.8 --save如果您需要,因为2.0.8是最新版本)并进行测试,如果问题仍然存在,请尝试删除该文件夹并在根目录中重新安装项目文件夹还通过运行,这将检查(在那里居住),...,在文件和安装它们.node_modulesnpm installdependencieshammerjsdevDependenciespackage.json

也在你的 polyfills.ts(如果你没有,建议有一个)

进口'hammerjs/hammer';

因此,当您的角度应用程序被执行时,它会被发现,因为polyfills.ts它本身是通过导入调用的(在正常情况下,您可以检查它),main.ts其中是角度应用程序的入口点.

  • 将import语句添加到`polyfills.ts`会使警告静音,这太棒了!但是材料设计组件仍然无法正确呈现:/我将在问题描述中包含屏幕截图.感谢您一直以来的帮助! (9认同)
  • 我没有使用任何需要"锤子"的组件.有没有办法禁用这些警告?在我的测试中,我得到了30个. (3认同)
  • 谢谢.这也适用于角度5 (3认同)
  • 没有.但是一旦找到解决方案,我一定会回来查看. (2认同)
  • 似乎我忘了将css链接添加到我的`index.html`文件中.whoopsie ..现在看起来都很好.干杯求救! (2认同)

All*_*ітy 94

使用Angular 5+,

安装hammerjs

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

import 'hammerjs';
Run Code Online (Sandbox Code Playgroud)




原始答案

hammerjs通过npm 安装

npm install --save hammerjs
Run Code Online (Sandbox Code Playgroud)

在你的hammerjs进口锤子里,

yarn add hammerjs
Run Code Online (Sandbox Code Playgroud)

然后将hammerjs添加到hammerjs文件中的类型.

import 'hammerjs';
Run Code Online (Sandbox Code Playgroud)

来源:Angular Material 2入门

  • 这应该是正确的答案.另外,你应该在每个`*.spect.ts`测试文件中添加`import'hammonjs';`,它使用材料组件来运行`ng test`时修复警告. (7认同)
  • 我不需要更改`tsconfig.json`但导入工作,谢谢你的答案. (3认同)
  • 这对我有用.我正在使用Angular 7 (2认同)

Tam*_*mas 9

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

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

当然还有:

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

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

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

我希望这有帮助.


小智 7

这对我有用(这也适用于 ionic4)我可以让hammer.js 工作 - 也可以使用 material.angular.io(在底部)

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

npm install --save hammerjs
npm install --save @types/hammerjs
Run Code Online (Sandbox Code Playgroud)

然后

package.json
make sure in dependencies there is this line
"hammerjs": "^2.0.8",
Run Code Online (Sandbox Code Playgroud)

然后

tsconfig.json - added types as seen below

"compilerOptions": {
...
...
"types": [
"hammerjs"
]
}
Run Code Online (Sandbox Code Playgroud)

然后

in app.component.ts (only there)
import 'hammerjs';
Run Code Online (Sandbox Code Playgroud)

然后

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

来自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.");
});
Run Code Online (Sandbox Code Playgroud)

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

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

providers: [
    { provide: HAMMER_GESTURE_CONFIG, useClass: GestureConfig },
]
Run Code Online (Sandbox Code Playgroud)

瞧,你的材质滑块可以工作了。