Angular - 'Không thể tìm thấy HammerJS'


94

Tôi đang làm việc trên một dự án góc cạnh đơn giản, nơi tôi đang cố gắng nhập Material Design vào dự án của mình nhưng một số thành phần không hoạt động bình thường và một cảnh báo trên bảng điều khiển cho biết:

Không thể tìm thấy HammerJS. Một số thành phần Vật liệu góc có thể hoạt động không chính xác.

Tôi đã hammerjscài đặt và cả @angular/material. Làm cách nào để giải quyết vấn đề này?



Chú thích

Có thể cần lưu ý rằng nếu bạn đã hammerjscài đặt và các thành phần của bạn vẫn không hiển thị chính xác để đảm bảo rằng bạn đang sử dụng angular material các thành phần chứ không phải các phần tử html với materialize-css các lớp . Nếu bạn đang sử dụng materialize-cssthay vì angular material, bạn sẽ cần thêm nó vào dự án của mình một cách riêng biệt.

Câu trả lời:


162

Trong package.jsontệp của bạn, hãy thêm cái này vàodependencies

"hammerjs": "^ 2.0.8",

Hoặc nếu bạn muốn một cách tự động thay thế chỉ cần bạn có thể nhập npm i hammerjs --save(hoặc npm i hammerjs@2.0.8 --savenếu bạn muốn, vì 2.0.8phiên bản mới nhất hiện nay là phiên bản mới nhất) trong thư mục dự án gốc của bạn và kiểm tra sau đó, nếu sự cố vẫn xảy ra, hãy thử xóa node_modulesthư mục và cài đặt lại trong thư mục gốc thư mục dự án cũng bằng cách chạy npm installmà sẽ kiểm tra dependencies( nơi hammerjscư trú ), devDependencies..., trong package.jsontệp và cài đặt chúng.

Cũng trong của bạn polyfills.ts(khuyến nghị có một cái nếu bạn chưa có)

nhập 'hammerjs / hammer';

Do đó, nó sẽ được tìm thấy trong khi ứng dụng góc cạnh của bạn được thực thi vì polyfills.tsbản thân nó được gọi bằng cách nhập (trong trường hợp bình thường, bạn có thể kiểm tra nó) trong main.tsđó là điểm vào của ứng dụng góc cạnh.


9
thêm câu lệnh nhập để tắt polyfills.tstiếng cảnh báo, thật tuyệt! Nhưng các thành phần material design vẫn không hiển thị chính xác: / Tôi sẽ bao gồm ảnh chụp màn hình trong phần mô tả câu hỏi. Cảm ơn vì sự giúp đỡ của bạn!
Danoram

2
Không. nhưng tôi chắc chắn sẽ kiểm tra lại khi tôi tìm ra giải pháp.
Danoram

2
Có vẻ như tôi đã quên thêm liên kết css vào index.htmltệp của mình . rất tiếc .. Tất cả đều ổn. Chúc mừng sự giúp đỡ!
Danoram

3
Tôi không sử dụng bất kỳ thành phần nào cần thiết hammer. Có cách nào để tắt các cảnh báo này không? Tôi nhận được 30 trong số này trong các bài kiểm tra của tôi.
CWSpear

1
nhập 'hammerjs / hammer'; đã xóa cảnh báo cho tôi
silentsudo 13/03 '19

102

Cài đặt hammerjs

  • với npm

    npm install --save hammerjs
  • (hoặc) bằng sợi

    yarn add hammerjs

Sau đó nhập hammerjsvào điểm nhập của ứng dụng của bạn (ví dụ: src / main.ts).

import 'hammerjs';




1
à câu trả lời tốt, tôi không quan tâm khi nghĩ rằng đây có lẽ là điều mà rất nhiều người tìm thấy câu hỏi này có thể muốn biết
Danoram

7
Đây phải là câu trả lời đúng. Ngoài ra, bạn nên thêm import 'hammerjs';vào mọi *.spect.tstệp thử nghiệm sử dụng các thành phần vật liệu để khắc phục cảnh báo khi chạy ng test.
Cartucho

3
Tôi không cần thay đổi tsconfig.jsonnhưng quá trình nhập hoạt động, cảm ơn vì câu trả lời.
Spurious

nếu bạn phải thêm nhập vào mọi tệp đặc tả, thì không có cách nào để thêm nó vào tệp karma.conf?
Jeff

Nguồn được trích dẫn nói với import it on your app's entry point (e.g. src/main.ts)thay vì trong app.module.ts. Rõ ràng, nó không thực sự quan trọng dù sao.
Stack Underflow

9

Trong systemjs.config.jstệp của bạn, bạn cũng cần thêm mục nhập sau:

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

cùng với tất nhiên:

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

Điều khác còn thiếu trong mã của bạn (ít nhất là dựa trên những gì bạn có trong repo GH) là bao gồm CSS Material Design, hãy thêm nó vào index.htmltệp của bạn :

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

Tôi hi vọng cái này giúp được.


Xin lỗi vì mất quá nhiều thời gian để liên hệ lại với bạn. Tôi không nghĩ rằng dự án của tôi đang sử dụng systemjs. mặc dù bạn nói đúng về việc tôi quên nhập css! cảm ơn bạn rất nhiều nó bây giờ trông đúng!
Danoram

6

điều này đã hiệu quả với tôi (và điều này cũng với ionic4) Tôi có thể làm cho hammer.js hoạt động - và cũng có thể tạo ra ion với material.angular.io (ở dưới cùng)

Hammer + ion (búa + góc cạnh):

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

sau đó

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

sau đó

tsconfig.json - added types as seen below

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

sau đó

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

sau đó

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

Mã mẫu từ trang web hammerjs hoạt động

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

Búa + vật liệu + ion: để làm cho búa vật liệu hoạt động với ion

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

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

và thì đấy, thanh trượt vật liệu của bạn hoạt động.


3

Mở dòng lệnh hoặc powershell, nhập thư mục của dự án angle2 của bạn:, cd your-project's-rootnhấn enter và dán:

npm install hammerjs --save

Npm sẽ tự động thêm tất cả các phụ thuộc vào package.jsontệp của bạn .


@torazaburo Phiên bản Hammerjs trên npm đang được cập nhật thường xuyên nên OP có thể chắc chắn rằng nếu anh ta cài đặt hammerjs bằng cách sử dụng lệnh npm, nó sẽ được cập nhật và hoạt động.
người dùng tốt bụng

@torazaburo Thành thật mà nói, tôi đã không sử dụng --savetrong khi cài đặt nó trước npm và mọi thứ diễn ra suôn sẻ, nhưng vì bạn là một người dùng có kinh nghiệm nên sẽ không thận trọng khi tranh luận với bạn.
người dùng tốt bụng.

Tôi nghĩ --savelà không cần thiết nữa vì nó sẽ được sử dụng tự động. docs.npmjs.com/cli/install
Spurious

1
Nếu bạn bỏ qua --savenó sẽ vẫn làm việc, nhưng nó sẽ không được thêm vào tập tin package.json, có nghĩa là nó sẽ không được tự động cài đặt khi chạy npm installtrong tương lai
Niklas

2
  1. npm cài đặt hammerjs --save
  2. npm install @ type / hammerjs --save-dev
  3. thêm cái này vào stylescript.config trong tùy chọn trình biên dịch

    "loại": ["hammerjs"]

  4. thêm cái này vào app.components.ts:

hammerjs


Thưa ngài, là một vị cứu tinh và nếu tôi có con trai thứ hai, nó sẽ được đặt theo tên ngài!
codingbuddha

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.