Angular - 'ไม่พบ HammerJS'


97

ฉันกำลังทำโปรเจ็กต์เชิงมุมง่ายๆที่ฉันกำลังพยายามนำเข้าดีไซน์ Material เข้ามาในโปรเจ็กต์ของฉัน แต่ส่วนประกอบบางอย่างทำงานไม่ถูกต้องและคำเตือนของคอนโซลบอกว่า:

ไม่พบ HammerJS ส่วนประกอบ Angular Material บางอย่างอาจทำงานไม่ถูกต้อง

ฉันได้รับการติดตั้งและhammerjs @angular/materialฉันจะแก้ไขปัญหานี้ได้อย่างไร



Sidenote

มันอาจจะเป็นที่น่าสังเกตว่าหากคุณมีhammerjsการติดตั้งและอุปกรณ์ของคุณจะยังคงแสดงผลได้อย่างถูกต้องเพื่อให้แน่ใจว่าคุณกำลังใช้angular material ส่วนประกอบและไม่องค์ประกอบ HTML กับการเรียนmaterialize-css หากคุณกำลังใช้materialize-cssแทนangular material, คุณจะต้องเพิ่มในโครงการของคุณต่างหาก

คำตอบ:


164

ใน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 / ค้อน';

ดังนั้นจึงจะพบได้ในขณะที่ app เชิงมุมของคุณจะถูกดำเนินการมาตั้งแต่polyfills.tsตัวเองถูกเรียกโดยการนำเข้า(ในกรณีปกติอื่น ๆ ที่คุณสามารถตรวจสอบได้)ในmain.tsซึ่งเป็นจุดเริ่มต้นที่แอพพลิเคเชิงมุม


9
เพิ่มคำสั่งนำเข้าเพื่อpolyfills.tsปิดเสียงเตือนซึ่งเยี่ยมมาก! แต่ส่วนประกอบการออกแบบวัสดุยังแสดงผลไม่ถูกต้อง: / ฉันจะรวมภาพหน้าจอไว้ในคำอธิบายคำถาม ขอบคุณสำหรับความช่วยเหลือของคุณจนถึงตอนนี้!
Danoram

2
ไม่. แต่ฉันจะกลับมาตรวจสอบอีกครั้งเมื่อพบวิธีแก้ปัญหา
Danoram

2
ดูเหมือนว่าฉันลืมเพิ่มลิงค์ css ลงในindex.htmlไฟล์ของฉัน อ๊ะ .. ตอนนี้ทุกอย่างเรียบร้อยดี ไชโยสำหรับความช่วยเหลือ!
Danoram

3
ฉันไม่ได้ใช้ใด ๆ hammerของส่วนประกอบที่จำเป็น มีวิธีปิดคำเตือนเหล่านี้หรือไม่? ฉันได้รับ 30 สิ่งเหล่านี้ในการทดสอบของฉัน
CWSpear

1
นำเข้า 'hammerjs / ค้อน'; ลบคำเตือนสำหรับฉัน
silentsudo

104

ติดตั้ง hammerjs

  • ด้วยnpm

    npm install --save hammerjs
    
  • (หรือ) ด้วยเส้นด้าย

    yarn add hammerjs
    

จากนั้นนำเข้าhammerjsที่จุดเริ่มต้นของแอปของคุณ (เช่น src / main.ts)

import 'hammerjs';




1
อ่าคำตอบที่ดีฉันไม่สนใจที่จะคิดว่านี่อาจเป็นสิ่งที่หลายคนที่พบคำถามนี้อาจต้องการรู้
Danoram

7
นี่น่าจะเป็นคำตอบที่ใช่ นอกจากนี้คุณควรเพิ่มimport 'hammerjs';ในทุกไฟล์ทดสอบที่ใช้ชิ้นส่วนวัสดุที่ใช้ในเพื่อที่จะแก้ไขคำเตือนเมื่อใช้*.spect.ts ng test
Cartucho

3
ฉันไม่จำเป็นต้องเปลี่ยนtsconfig.jsonแต่การนำเข้าใช้งานได้ขอบคุณสำหรับคำตอบ
ปลอม

หากคุณต้องเพิ่มการนำเข้าลงในไฟล์ข้อมูลจำเพาะทุกไฟล์ไม่ควรมีวิธีเพิ่มลงในไฟล์arma.confหรือไม่?
Jeff

แหล่งที่มาอ้างว่าจะimport it on your app's entry point (e.g. src/main.ts)มากกว่าใน app.module.ts เห็นได้ชัดว่ามันไม่สำคัญอยู่แล้ว
Stack Underflow

9

ในsystemjs.config.jsไฟล์ของคุณคุณต้องเพิ่มรายการต่อไปนี้:

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

พร้อมกับแน่นอน:

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

สิ่งอื่นที่ขาดหายไปจากโค้ดของคุณ (อย่างน้อยก็ขึ้นอยู่กับสิ่งที่คุณมีใน GH repo) คือการรวม CSS การออกแบบวัสดุเพิ่มสิ่งนี้ลงในindex.htmlไฟล์ของคุณ:

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

ฉันหวังว่านี่จะช่วยได้.


ขออภัยที่ใช้เวลาติดต่อกลับนานมาก ฉันไม่คิดว่าโครงการของฉันใช้ systemjs แม้ว่าคุณพูดถูกเกี่ยวกับฉันลืมนำเข้า css! ขอบคุณมากตอนนี้ดูถูกแล้ว!
Danoram

7

สิ่งนี้ใช้ได้กับฉัน (และนี่ก็ใช้กับ ionic4 เช่นกัน) ฉันสามารถทำให้ hammer.js ทำงานได้ - และไอออนิกด้วย material.angular.io (ที่ด้านล่าง)

Hammer + ionic (ค้อน + เชิงมุมเช่นกัน):

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

วัสดุ Hammer + ionic +: เพื่อให้ค้อนวัสดุทำงานร่วมกับไอออนิก

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

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

และ voila แถบเลื่อนวัสดุของคุณก็ใช้งานได้


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ในอนาคต
Niklas

2
  1. npm ติดตั้ง hammerjs - บันทึก
  2. npm ติดตั้ง @ types / hammerjs --save-dev
  3. เพิ่มสิ่งนี้ใน typescript.config ภายใต้ตัวเลือกคอมไพเลอร์

    "types": ["hammerjs"]

  4. เพิ่มสิ่งนี้ใน app.components.ts:

ค้อน js


คุณเป็นผู้ช่วยให้รอดและถ้าฉันจัดการได้ลูกชายคนที่สองเขาจะตั้งชื่อตามคุณ!
codingbuddha

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.