Angular - „Nie można znaleźć HammerJS”

94

Pracuję nad prostym projektem kątowym, w którym próbuję zaimportować Material Design do mojego projektu, ale niektóre komponenty nie działają poprawnie, a ostrzeżenie konsoli mówi:

Nie można znaleźć HammerJS. Niektóre komponenty Angular Material mogą nie działać poprawnie.

Mam hammerjszainstalowany i również @angular/material. Jak rozwiązać ten problem?



Dygresja

Może warto zauważyć, że jeśli hammerjszainstalowałeś, a komponenty nadal nie renderują się poprawnie, upewnij się, że używasz angular material komponentów, a nie elementów html z materialize-css klasami . Jeśli za pomocą materialize-csszamiast angular material, trzeba będzie dodać go do swojego projektu oddzielnie.

Danoram
źródło

Odpowiedzi:

162

W swoim package.jsonpliku dodaj to dodependencies

"hammerjs": "^ 2.0.8",

Lub jeśli chcesz alternatywnego automatycznego sposobu, możesz po prostu wpisać npm i hammerjs --save(lub npm i [email protected] --savejeśli chcesz, ponieważ 2.0.8jest to najnowsza wersja obecnie) w głównym folderze projektu i przetestować, jeśli problem nadal występuje, spróbuj usunąć node_modulesfolder i ponownie zainstalować go w katalogu głównym folder projektu również przez uruchomienie, npm installktóre sprawdzi dependencies( gdzie hammerjsrezyduje ), devDependencies..., w package.jsonpliku i zainstaluje je.

Również w twoim polyfills.ts(zalecane, jeśli nie masz)

import „hammerjs / hammer”;

W ten sposób zostałby znaleziony, gdy twoja aplikacja kątowa jest wykonywana, ponieważ polyfills.tssama jest wywoływana przez import (w normalnym przypadku, inaczej możesz to sprawdzić), w main.tsktórym jest punktem wejścia aplikacji kątowej.

selem mn
źródło
9
dodanie instrukcji importu do polyfills.tswyciszenia ostrzeżenia, co jest świetne! Ale komponenty Material Design nadal nie renderują się poprawnie: / W opisie pytania dołączę zrzut ekranu. Dzięki za dotychczasową pomoc!
Danoram
2
Nie. ale z pewnością wrócę, gdy znajdę rozwiązanie.
Danoram
2
Wygląda na to, że zapomniałem dodać łącze css do mojego index.htmlpliku. whoopsie .. Teraz wszystko wygląda dobrze. Pozdrawiam za pomoc!
Danoram,
3
Nie używam żadnych potrzebnych komponentów hammer. Czy istnieje sposób na wyłączenie tych ostrzeżeń? W moich testach dostaję około 30 takich.
CWSpear,
1
import „hammerjs / hammer”; usunięto ostrzeżenie dla mnie
silentsudo
102

Zainstaluj hammerjs

  • z npm

    npm install --save hammerjs
  • (lub) z przędzą

    yarn add hammerjs

Następnie zaimportuj hammerjsdo punktu wejścia aplikacji (np. Src / main.ts).

import 'hammerjs';



Wszystko jest Vаиітy
źródło
1
ah dobra odpowiedź, nie zależało mi na tym, aby pomyśleć, że prawdopodobnie to właśnie wiele osób, które znajdą to pytanie, mogłoby chcieć wiedzieć
Danoram
7
To powinna być właściwa odpowiedź. Ponadto należy dodać import 'hammerjs';do każdego *.spect.tspliku testowego, który używa komponentów materiałowych, aby naprawić ostrzeżenie podczas pracy ng test.
Cartucho,
3
Nie musiałem zmieniać, tsconfig.jsonale import działa, dzięki za odpowiedź.
Fałszywy
jeśli musisz dodać import do każdego pliku specyfikacji, czy nie powinno być sposobu na dodanie go do pliku karma.conf?
Jeff,
Cytowane źródło mówi import it on your app's entry point (e.g. src/main.ts), zamiast w app.module.ts. Oczywiście nie ma to jednak znaczenia.
Stack Underflow
9

W swoim systemjs.config.jspliku musisz również dodać następujący wpis:

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

wraz z oczywiście:

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

Inną rzeczą, której brakuje w twoim kodzie (przynajmniej na podstawie tego, co masz w repozytorium GH), jest włączenie CSS Material Design, dodaj to do swojego index.htmlpliku:

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

Mam nadzieję, że to pomoże.

Tamas
źródło
Przepraszam, że tak długo czekałem na odpowiedź. Nie sądzę, że mój projekt używa systemjs. chociaż masz rację, że zapomniałem zaimportować css! dziękuję bardzo, teraz wygląda dobrze!
Danoram
7

to zadziałało dla mnie (i to też jest z ionic4), mogłem sprawić, że hammer.js zadziała - a także ionic z material.angular.io (na dole)

Młotek + jonowe (również młotek + kątownik):

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

następnie

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

następnie

tsconfig.json - added types as seen below

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

następnie

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

następnie

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

Przykładowy kod ze strony hammerjs działa

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

Hammer + ionic + material: aby materiał działał z jonami

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

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

i voila, twój suwak materiału działa.

Emilio Maciel
źródło
3

Otwórz wiersz poleceń lub PowerShell, wpisz katalog swojego projektu angular2:, cd your-project's-rootnaciśnij Enter i wklej:

npm install hammerjs --save

Npm automatycznie doda wszystkie zależności do twojego package.jsonpliku.

miły użytkownik
źródło
Wersja @torazaburo Hammerjs na npm jest często aktualizowana, więc OP może być pewien, że jeśli zainstaluje hammerjs za pomocą polecenia npm, będzie aktualna i działająca.
miły użytkownik
@torazaburo Szczerze mówiąc nie użyłem go --savepodczas instalacji przez npm i wszystko poszło gładko, ale ponieważ jesteś bardzo doświadczonym użytkownikiem, nieroztropnie byłoby się z tobą kłócić.
miły użytkownik
Myślę, że --savenie jest już konieczne, ponieważ będzie używany automatycznie. docs.npmjs.com/cli/install
fałszywe
1
Jeśli go pominiesz --save, nadal będzie działać, ale nie zostanie dodany do pliku package.json, co oznacza, że ​​nie zostanie automatycznie zainstalowany podczas uruchamiania npm installw przyszłości
Niklas
2
  1. npm install hammerjs --zapisz
  2. npm install @ types / hammerjs --save-dev
  3. dodaj to do typescript.config w opcjach kompilatora

    "types": ["hammerjs"]

  4. dodaj to do app.components.ts:

hammerjs

John Peters
źródło
Panie, jesteś zbawicielem i jeśli kiedykolwiek uda mi się spłodzić drugiego syna, otrzymam imię od ciebie!
codingbuddha