ไอคอน Angular Material ไม่ทำงาน


93

ฉันได้ติดตั้งวัสดุสำหรับเชิงมุมแล้ว

ฉันนำเข้าในโมดูลแอป MatIconModule (with import { MatIconModule } from '@angular/material/icon';)

ฉันได้เพิ่มไว้ภายใต้การนำเข้า ngmodule ของฉันด้วย:

@NgModule({
    imports: [ 
//...
MatIconModule, 
//...

ฉันนำเข้าสไตล์ชีททั้งหมดแล้ว

และฉันยังนำเข้าในส่วนประกอบแอปของฉันซึ่งจริง ๆ แล้ว (พยายาม) ใช้ (โดยมีimport {MatIconModule} from '@angular/material/icon';บรรทัดอื่นอยู่ตอนต้น)

แต่ไอคอนวัสดุยังไม่ปรากฏ

ตัวอย่างเช่นในบรรทัดนี้:

<button mat-icon-button (click)="snav.toggle()"><mat-icon>menu</mat-icon></button>

ฉันคาดหวังสิ่งนี้:

คาดว่า

แต่ฉันได้รับสิ่งนี้:

จริง

มีข้อเสนอแนะหรือไม่?


แบบอักษรอาจหายไป หรือโหลดในภายหลัง
Basavaraj Bhusani

@BasavarajBhusani ฉันจะตรวจสอบสิ่งนี้ได้อย่างไร?

หลังจากดำเนินการตามแนวทางด้านล่างแล้วคุณควรล้างแคชของเบราว์เซอร์ มันได้ผลสำหรับฉัน
อาทิญาดา

คำตอบ:


185

เพิ่มสไตล์ชีต CSS สำหรับไอคอนวัสดุ!

เพิ่มสิ่งต่อไปนี้ใน index.html ของคุณ:

<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">

อ้างอิง - https://github.com/angular/material2/issues/7948


10
คำตอบนี้ใช้ได้ผลสำหรับฉัน แต่ฉันยังสามารถเพิ่มบรรทัดนี้ใน styles.css และมันก็ใช้ได้ @import 'https://fonts.googleapis.com/icon?family=Material+Icons';
J. Chaney

17
คุณยังสามารถเพิ่ม: @import "~material-icons/iconfont/material-icons.css";ใน styles.css ของคุณ
Pooshon Banerjee

5
@PooshonBanerjee material-icons เป็นโปรเจ็กต์แยกต่างหากที่ไม่ได้ดูแลโดยทีม Angular Material
Vedran

39

สำหรับ Angular 6+:

  1. npm ติดตั้งสิ่งนี้: npm install material-design-icons
  2. เพิ่มสไตล์ให้กับ angular.json:

    "styles": [
      "node_modules/material-design-icons/iconfont/material-icons.css"
    ]
    

1
นี่คือวิธีทำเชิงมุมที่เหมาะสม!
เหี่ยว

1
... และวิธีที่เหมาะสมเมื่อใช้ Angular สำหรับ Apps (เช่นเดียวกับ Cordova)
CularBytes

สิ่งนี้ใช้ได้กับฉัน แทนที่จะใช้ google api ฉันติดตั้งดีไซน์ Material
สูงสุด

26

หากใช้ SASS คุณจะต้องเพิ่มบรรทัดนี้ใน.scssไฟล์หลักของคุณเท่านั้น:

@import url("https://fonts.googleapis.com/icon?family=Material+Icons");

หากคุณต้องการหลีกเลี่ยงการดึงไอคอนจาก Google คุณสามารถโฮสต์ไอคอนด้วยตนเองตามที่อธิบายไว้ในคู่มือไอคอนวัสดุ :

สำหรับผู้ที่ต้องการโฮสต์แบบอักษรของเว็บด้วยตนเองจำเป็นต้องมีการตั้งค่าเพิ่มเติมบางอย่าง โฮสต์แบบอักษรไอคอนในตำแหน่งตัวอย่างเช่น https://example.com/material-icons.woffและเพิ่มกฎ CSS ต่อไปนี้:

@font-face {
  font-family: 'Material Icons';
  font-style: normal;
  font-weight: 400;
  src: url(https://example.com/MaterialIcons-Regular.eot); /* For IE6-8 */
  src: local('Material Icons'),
    local('MaterialIcons-Regular'),
    url(https://example.com/MaterialIcons-Regular.woff2) format('woff2'),
    url(https://example.com/MaterialIcons-Regular.woff) format('woff'),
    url(https://example.com/MaterialIcons-Regular.ttf) format('truetype');
}

นอกจากนี้ต้องมีการประกาศกฎ CSS สำหรับการแสดงผลไอคอนเพื่อแสดงผลแบบอักษรอย่างถูกต้อง โดยปกติกฎเหล่านี้จะใช้เป็นส่วนหนึ่งของสไตล์ชีต Google Web Font แต่จะต้องรวมไว้ในโปรเจ็กต์ของคุณด้วยตนเองเมื่อโฮสต์ฟอนต์ด้วยตนเอง:

.material-icons {
  font-family: 'Material Icons';
  font-weight: normal;
  font-style: normal;
  font-size: 24px;  /* Preferred icon size */
  display: inline-block;
  line-height: 1;
  text-transform: none;
  letter-spacing: normal;
  word-wrap: normal;
  white-space: nowrap;
  direction: ltr;

  /* Support for all WebKit browsers. */
  -webkit-font-smoothing: antialiased;
  /* Support for Safari and Chrome. */
  text-rendering: optimizeLegibility;

  /* Support for Firefox. */
  -moz-osx-font-smoothing: grayscale;

  /* Support for IE. */
  font-feature-settings: 'liga';
}

ประสบปัญหาเมื่อไอคอนไม่แสดงผลและแสดงข้อความปิดแทน ต่อท้ายการนำเข้าด้านบนในไฟล์ scss ของฉันและเริ่มแสดงไอคอน 'X' ขอบคุณ :)
vinsinraw

ฉันมีโครงการเชิงมุม 9 และหลังจากนำเข้าไฟล์แบบอักษรไอคอนวัสดุใน. scss ยังคงเป็นปัญหาเดิมไอคอนวัสดุไม่สามารถมองเห็นได้แสดงการทดสอบ 'visibility_off' ในไฟล์. apk ที่สร้างโดยใช้ Cordova แต่ก็ใช้งานได้ดีใน localhost: 4200 ดังนั้นมีวิธีแก้ปัญหาอื่นหรือไม่?
Jignesh Gothadiya

11

คุณต้องนำเข้าMatIconModuleและใช้ url ต่อไปนี้ใน index.html

<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">

11

ในกรณีของฉันมีการใช้สไตล์ที่ลบล้างตระกูลฟอนต์ ดังนั้นฉันจึงเพิ่มรูปแบบตระกูลฟอนต์อย่างชัดเจนเช่นนี้:

.material-icons{
    font-family: 'Material Icons' !important;
}

5

โซลูชันเต็มรูปแบบสามารถ:

ขั้นตอนแรก

คุณต้องนำเข้าMatIconModuleในโครงการของคุณในโครงการของฉันฉันนำเข้าองค์ประกอบที่จำเป็นในไฟล์แยกต่างหากจากนั้นฉันนำเข้าใน AppModule คุณสามารถใช้สิ่งนี้หรือนำเข้าโดยตรง:

import { NgModule } from "@angular/core";
import { MatButtonModule } from '@angular/material';
import { MatIconModule } from '@angular/material/icon';

@NgModule({
    imports: [MatIconModule, MatButtonModule], // note the imports 
    exports: [MatIconModule, MatButtonModule], // and the exports
})
export class MaterialModule { }

ขั้นตอนที่สอง

โหลดแบบอักษรของไอคอนในindex.html:

<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">


2

ในกรณีของฉันไอคอนไม่ปรากฏขึ้นเนื่องจากฉันทำให้แบบอักษรของฉันเสียหายโดยใช้! important การเอาออกทำให้ไอคอนปรากฏขึ้น


2

ฉันพบปัญหาของไอคอนที่ไม่แสดงให้ฉันเห็น ฉันทำตามขั้นตอนที่ Basavaraj Bhusani ให้ไว้แล้ว แต่ก็ยังไม่ได้ผล

ฉันพบปัญหาคือใน scss ของฉันฉันมีสิ่งtext-transform: uppercaseที่ทำให้ไอคอนแสดงเพียงเนื้อหา "arrow_forward" ฉันต้องเปลี่ยนtext-transform: noneบนไอคอนโดยเฉพาะมิฉะนั้นจะไม่แสดงผล

                .child-item-action {

                    text-transform: uppercase;

                    &:after {

                        font-family: 'Material Icons';
                        content: "arrow_forward";
                        text-transform: none;
                        -webkit-font-feature-settings: 'liga';

                    }

ขอบคุณ! ติดอยู่กับสิ่งนี้เป็นเวลาหลายชั่วโมง!
Håvard Brynjulfsen

1

ฉันตระหนักว่าไม่มีใครพูดถึงการติดตั้ง hammerJs ในตอนแรกก่อนที่จะนำเข้าสู่แอปของคุณ สำหรับผู้ที่มีปัญหาคล้ายกันคุณต้องนำเข้า hammerJs ในตอนแรกคุณสามารถใช้ NPM, Yarn หรือ google CDN สำหรับการติดตั้ง คำตอบนี้ใช้สำหรับการติดตั้งด้วย NPM หรือ Yarn:

NPM

npm install --save hammerjs

เส้นด้าย

yarn add hammerjs

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

import 'hammerjs';

หากคุณต้องการใช้ Google CDN โปรดไปที่เอกสารเชิงมุมสำหรับคำอธิบายเพิ่มเติมhttps://material.angular.io/guide/getting-started


1

ชื่อไอคอนผิด : ชื่อไอคอนวัสดุบางรายการไม่ถูกต้อง

ตัวอย่างเช่น : วัสดุไอคอนให้filter_altสำหรับ

ป้อนคำอธิบายภาพที่นี่

<mat-icon aria-hidden="false" aria-label=" filter icon">filter_alt</mat-icon>

แต่มันปรากฏขึ้น😟

ป้อนคำอธิบายภาพที่นี่

แก้ไข: เราต้องใช้filter_list_altสำหรับไอคอนประเภทช่องทางเป็น

<mat-icon aria-hidden="false" aria-label="filter icon">filter_list_alt</mat-icon>

0

หากคุณเขียนทับรูปแบบวัสดุเชิงมุมที่มีอยู่บางส่วนหรือรูปแบบอื่น ๆ ที่ส่งผลกระทบต่อไอคอนอย่างใดก็อาจทำให้เกิดปัญหาได้ ย้ายรหัสไอคอนออกนอกรูปแบบและการทดสอบ

สำหรับฉันแล้วมันเป็นแบบอักษร: small-caps;

ดังนั้นฉันจึงย้ายมันไปยังองค์ประกอบลูก ด้านล่างนี้เป็นส่วนหนึ่งของกริดวัสดุเชิงมุม

  <mat-grid-tile colspan="3" rowspan="1" class='title customGlobalGrid'>
    <mat-icon aria-hidden="false" aria-label="Example home icon">home</maticon>
    <span style="font-variant: small-caps;">{{item['title']}}</span>
  </mat-grid-tile>


-2
**Add following code to your css**

 .material-icons {  
    /* Support for all WebKit browsers. */
    -webkit-font-smoothing: antialiased;

    /* Support for Safari and Chrome. */
    text-rendering: optimizeLegibility;

    /* Support for Firefox. */
    -moz-osx-font-smoothing: grayscale;

    /* Support for IE. */
    font-feature-settings: 'liga';
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.