Angular - 'Не вдалося знайти HammerJS'


94

Я працюю над простим кутовим проектом, де намагаюся імпортувати Material Design у свій проект, але деякі компоненти не працюють належним чином, і попередження консолі говорить:

Не вдалося знайти HammerJS. Деякі компоненти кутового матеріалу можуть працювати неправильно.

Я hammerjsвстановив, а також @angular/material. Як вирішити цю проблему?



Сіденоте

Можливо, варто зазначити, що якщо ви hammerjsвстановили, і ваші компоненти все ще не відображаються належним чином, переконайтеся, що ви використовуєте angular material компоненти, а не елементи html з materialize-css класами . Якщо будуть використовуючи materialize-cssзамість angular material, вам потрібно буде додати його в свій проект окремо.

Відповіді:


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
додавання оператора імпорту до polyfills.tsтихого попередження, що чудово! Але компоненти матеріального дизайну все ще відображаються неправильно: / Я включу скріншот в опис питання. Дякуємо за вашу допомогу!
Данорам

2
немає. але я обов’язково перевіряю, як тільки знайду рішення.
Данорам

2
Здається, я забув додати посилання css у свій index.htmlфайл. вупсі .. Зараз все виглядає добре. Вітаємо за допомогу!
Данорам

3
Я не використовую жодного з необхідних компонентів hammer. Чи є спосіб вимкнути ці попередження? Я отримую близько 30 таких у своїх тестах.
CWSpear

1
імпорт 'hammerjs / hammer';
прибране

102

Встановіть hammerjs

  • з npm

    npm install --save hammerjs
  • (або) з пряжею

    yarn add hammerjs

Потім імпортуйте hammerjsдо точки входу вашого додатка (наприклад, src / main.ts).

import 'hammerjs';




1
ах гарна відповідь, мені було байдуже думати, що це, мабуть, може знати багато людей, які знаходять це запитання
Данорам,

7
Це повинна бути правильна відповідь. Крім того, слід додати import 'hammerjs';до кожного *.spect.tsтестового файлу, що використовує компоненти матеріалу, щоб виправити попередження під час запуску ng test.
Cartucho

3
Мені не потрібно було змінювати, tsconfig.jsonале імпорт працює, дякую за відповідь.
Неправдивий

якщо вам потрібно додати імпорт до кожного файлу специфікації, чи не повинен бути спосіб додати його до файлу karma.conf?
Джефф,

Зазначене джерело каже, import it on your app's entry point (e.g. src/main.ts)а не в app.module.ts. Очевидно, все одно це насправді не має значення.
Stack

9

У своєму systemjs.config.jsфайлі також потрібно додати такий запис:

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

поряд із звичайно:

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

Інше, чого не вистачає у вашому коді (принаймні, виходячи з того, що у вас є в репозиторії GH), це включення CSS Material Design, додайте це у свій index.htmlфайл:

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

Я сподіваюся, що це допомагає.


Вибачте, що так довго повернувся до вас. Я не думаю, що мій проект використовує systemjs. хоча ти маєш рацію щодо того, що я забув імпортувати css! велике спасибі, що зараз виглядає правильно!
Данорам

6

це працювало у мене (і це також з ionic4), я міг би зробити роботу hammer.js - а також ionic з material.angular.io (внизу)

Молоток + іонний (молоток + також кутовий):

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файлу.


Версія @torazaburo Hammerjs на npm часто оновлюється, тому OP може бути впевнений, що якщо він встановить hammerjs за допомогою команди npm, вона буде оновлена ​​і працює.
добрий користувач

@torazaburo Чесно кажучи, я не використовував --save, встановлюючи його до npm, і все пройшло без проблем, але оскільки ви досвідчений користувач, було б необережно сперечатися з вами.
добрий користувач

Я думаю, що --saveце більше не потрібно, оскільки воно буде використовуватися автоматично. docs.npmjs.com/cli/install
Помилковий

1
Якщо ви пропустите його, --saveвін все одно буде працювати, але він не буде доданий до файлу package.json, а це означає, що він не буде автоматично встановлений під час запуску npm installв майбутньому
Ніклас,

2
  1. npm встановити hammerjs --save
  2. npm install @ types / hammerjs --save-dev
  3. додати це до typecript.config під параметрами компілятора

    "types": ["hammerjs"]

  4. додати це до app.components.ts:

молотки


ВИ, сер, ви рятувальник, і якщо мені коли-небудь вдасться отримати другого сина, його зватимуть на честь вас!
кодування Будди

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.