Angular - 'Не удалось найти HammerJS'

94

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

Не удалось найти HammerJS. Некоторые компоненты Angular Material могут работать некорректно.

Я 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';

Таким образом, он будет найден во время выполнения вашего приложения angular, поскольку оно polyfills.tsвызывается импортом (в обычном случае, иначе вы можете проверить его), в main.tsкотором находится точка входа приложения angular.

селем мн
источник
9
добавление оператора импорта для polyfills.tsотключения предупреждения, и это здорово! Но компоненты материального дизайна по-прежнему не отображаются правильно: / Я добавлю снимок экрана в описание вопроса. Спасибо за вашу помощь!
Данорам
2
нет. но я обязательно вернусь, когда найду решение.
Данорам
2
Кажется, я забыл добавить ссылку css в свой index.htmlфайл. упс .. Теперь все в порядке. Приветствую за помощь!
Данорам
3
Я не использую ни один из необходимых компонентов hammer. Есть ли способ отключить эти предупреждения? В моих тестах я получил около 30 из них.
CWSpear
1
импортировать 'hammerjs / hammer'; удалено предупреждение для меня
silntsudo
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но импорт работает, спасибо за ответ.
Spurious
если вам нужно добавить импорт в каждый файл спецификации, разве не должно быть способа добавить его в файл 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! большое спасибо, теперь все выглядит правильно!
Данорам
7

это сработало для меня (и это также с 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
Spurious
1
Если вы не укажете этот параметр, --saveон все равно будет работать, но не будет добавлен в файл package.json, а это значит, что он не будет автоматически устанавливаться при запуске npm installв будущем,
Никлас
2
  1. npm install hammerjs --save
  2. npm install @ types / hammerjs --save-dev
  3. добавьте это в typescript.config в параметрах компилятора

    "типы": ["hammerjs"]

  4. добавьте это в app.components.ts:

hammerjs

Джон Питерс
источник
ВЫ, сэр, спаситель, и если мне когда-нибудь удастся завести второго сына, он будет назван в вашу честь!
codingbuddha