Angular - "Could not find HammerJS"


94

Sto lavorando a un semplice progetto angolare in cui sto cercando di importare Material Design nel mio progetto ma alcuni componenti non funzionano correttamente e un avviso della console dice:

Impossibile trovare HammerJS. Alcuni componenti di materiale angolare potrebbero non funzionare correttamente.

Ho hammerjsinstallato e anche @angular/material. Come risolvo questo problema?



Nota a margine

Potrebbe valere la pena notare che se hai hammerjsinstallato e i tuoi componenti non vengono ancora visualizzati correttamente, assicurati di utilizzare angular material componenti e non elementi html con materialize-css classi . Se si utilizza materialize-cssinvece angular material, è necessario aggiungerlo al progetto a parte.

Risposte:


162

Nel tuo package.jsonfile aggiungi questo adependencies

"hammerjs": "^ 2.0.8",

O se vuoi un modo automatico alternativo puoi semplicemente digitare npm i hammerjs --save(o npm i hammerjs@2.0.8 --savese vuoi, dato che 2.0.8è l'ultima versione oggigiorno) nella cartella del tuo progetto principale e testare quindi, se il problema persiste prova a eliminare la node_modulescartella e reinstallarla nella radice cartella del progetto anche eseguendo npm installche controllerà dependencies( dove hammerjsrisiede ), devDependencies..., nel package.jsonfile e li installerà.

Anche nel tuo polyfills.ts(consigliato di averne uno se non lo hai)

importare "hammerjs / hammer";

Pertanto, verrebbe trovato mentre la tua app angolare viene eseguita poiché polyfills.tsessa stessa viene chiamata per importazione (in un caso normale, altrimenti puoi controllarla) in main.tscui è il punto di ingresso delle app angolari.


9
l'aggiunta dell'istruzione import a polyfills.tssilenzia l'avviso, il che è fantastico! Ma i componenti del material design non vengono ancora visualizzati correttamente: / Includerò uno screenshot nella descrizione della domanda. Grazie per il tuo aiuto finora!
Danoram

2
no. ma mi assicurerò di ricontrollare una volta trovata una soluzione.
Danoram

2
Sembra che mi sia dimenticato di aggiungere il collegamento css al mio index.htmlfile. whoopsie .. Adesso sembra tutto a posto. Grazie per l'aiuto!
Danoram

3
Non sto usando nessuno dei componenti necessari hammer. C'è un modo per disabilitare questi avvisi? Ne ottengo circa 30 nei miei test.
CWSpear

1
importare "hammerjs / hammer"; avviso rimosso per me
silentsudo

102

Installa hammerjs

  • con npm

    npm install --save hammerjs
  • (o) con filo

    yarn add hammerjs

Quindi importa hammerjsnel punto di ingresso della tua app (ad esempio src / main.ts).

import 'hammerjs';




1
ah buona risposta, non mi importava di pensare che questo è probabilmente quello che molte persone che trovano questa domanda potrebbero voler sapere
Danoram

7
Questa dovrebbe essere la risposta giusta. Inoltre, è necessario aggiungere import 'hammerjs';ogni *.spect.tsfile di test che utilizza componenti materiali per correggere l'avviso durante l'esecuzione ng test.
Cartucho

3
Non ho bisogno di cambiare tsconfig.jsonma l'importazione funziona, grazie per la risposta.
Spurio

se devi aggiungere l'importazione a ogni file delle specifiche, non dovrebbe esserci un modo per aggiungerlo al file karma.conf?
Jeff

La fonte citata dice import it on your app's entry point (e.g. src/main.ts)invece che in app.module.ts. Ovviamente, comunque, in realtà non ha importanza.
Stack Underflow

9

Nel tuo systemjs.config.jsfile devi anche aggiungere la seguente voce:

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

insieme a:

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

L'altra cosa che manca al tuo codice (almeno in base a quello che hai nel repo GH) è l'inclusione del CSS di Material Design, aggiungilo al tuo index.htmlfile:

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

Spero che aiuti.


Mi dispiace di aver impiegato così tanto tempo per risponderti. Non credo che il mio progetto utilizzi systemjs. anche se hai ragione sul fatto che mi sia dimenticato di importare il css! grazie mille ora sembra giusto!
Danoram

6

questo ha funzionato per me (e questo è anche con ionic4) potrei far funzionare hammer.js - e anche ionico con material.angular.io (in basso)

Martello + ionico (anche martello + angolare):

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

poi

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

poi

tsconfig.json - added types as seen below

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

poi

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

poi

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

Il codice di esempio dal sito Hammerjs funziona

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.");
});

Martello + ionico + materiale: per far funzionare il martello materiale con ionico

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

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

e voilà, il tuo dispositivo di scorrimento del materiale funziona.


3

Apri la riga di comando o PowerShell, digita la directory del tuo progetto angular2:, premi invio cd your-project's-roote incolla:

npm install hammerjs --save

Npm aggiungerà automaticamente tutte le dipendenze nel tuo package.jsonfile.


La versione di @torazaburo Hammerjs su npm viene aggiornata frequentemente in modo che l'OP possa essere sicuro che se installa hammerjs utilizzando il comando npm sarà aggiornato e funzionante.
gentile utente

@torazaburo Ad essere sincero non l'ho usato --savedurante l'installazione da npm ed è andato tutto liscio, ma dato che sei un utente molto esperto sarebbe imprudente discutere con te.
gentile utente

Penso che --savenon sia più necessario perché verrà utilizzato automaticamente. docs.npmjs.com/cli/install
Spurious

1
Se ometti --save, funzionerà ancora, ma non verrà aggiunto al file package.json, il che significa che non verrà installato automaticamente durante l'esecuzione npm installin futuro
Niklas,

2
  1. npm installa hammerjs --save
  2. npm install @ types / hammerjs --save-dev
  3. aggiungilo a typescript.config nelle opzioni del compilatore

    "types": ["hammerjs"]

  4. aggiungilo a app.components.ts:

hammerjs


VOI signore, siete un salvatore e se mai riuscirò ad avere un secondo figlio, lui avrà il vostro nome!
codingbuddha

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.