Je souhaite utiliser les icônes de https://materialdesignicons.com/ dans mon projet angular 4. Les instructions sur le site Web expliquent seulement comment l'inclure dans Angular 1.x
( https://materialdesignicons.com/getting-started )
Comment puis-je inclure les icônes de conception Matériau pour pouvoir les utiliser comme <md-icon svgIcon="source"></md-icon>
en utilisant Angular Material
et ng serve
?
NOTE: j'ai déjà inclus les google material icons
qui sont différents!
Suivez simplement ces étapes:
Téléchargez mdi.svg
depuis ici sous la section Matériel angulaire et placez-le dans votre dossier assets
, qui devrait être situé à (depuis la racine de votre projet) /src/assets
:
Dans le module de votre application (alias app.module.ts
), ajoutez les lignes suivantes:
import {MatIconRegistry} from '@angular/material/icon';
import {DomSanitizer} from '@angular/platform-browser';
...
export class AppModule {
constructor(private matIconRegistry: MatIconRegistry, private domSanitizer: DomSanitizer){
matIconRegistry.addSvgIconSet(domSanitizer.bypassSecurityResourceUrl('/assets/mdi.svg'));
}
}
Assurez-vous d'inclure le dossier assets
sous .angular-cli.json
dans assets
(bien que ce soit par défaut, il sera là):
{
"apps": [
{
...
"assets": [
"assets"
]
}
]
}
Enfin, utilisez-le via le composant MatIcon
avec l’entrée svgIcon
:
<mat-icon svgIcon="open-in-new"></mat-icon>
J'ai changé les instructions pour que cela fonctionne pour les versions ultérieures.
Pour tous ceux qui utilisent scss:
npm install material-design-icons
dans src/styles.scss
@import '~material-design-icons/iconfont/material-icons.css';
et en HTML comme décrit ici
<i class="material-icons">visibility</i>
Addendum : Ma réponse est un peu plus ancienne. Cela fonctionne toujours bien mais n'est plus à la pointe de la technologie. La réponse de @A. Morel ici est un peu plus contemporain.
Semblable à la réponse de @ creep3007, vous pouvez spécifier la feuille de style dans votre .angular-cli.json
:
Installer le paquet npm
npm install material-design-icons --save
Ajoutez des icônes de matière à votre .angular-cli.json
{
"apps": [
{
"styles": [
"../node_modules/material-design-icons/iconfont/material-icons.css"
]
}
]
}
Utilise le
<i class="material-icons">visibility</i>
Installer le paquet npm
npm install material-design-icons --save
npm install --save @angular/material @angular/cdk
Ajoutez des icônes matérielles css à votre fichier .angular-cli.json (n'oubliez pas de redémarrer "ng serve")
{
"apps": [
{
"styles": [
"node_modules/material-design-icons/iconfont/material-icons.css"
]
}
]
}
ou dans votre src/styles.scss
@import '~material-design-icons/iconfont/material-icons.css';
Module d'importation dans votre app.module.ts
import { MatIconModule } from '@angular/material/icon';
...
@NgModule({
imports: [
...,
MatIconModule
],
Et utilisez-le comme ça:
<mat-icon>location_off</mat-icon>
Choisissez le nom dans Material Design Icons => https://material.io/tools/icons/?style=baseline
Remarque cette réponse s'applique à icônes de conception de matériaux par Templarian et NON aux icônes du même nom par Google. Je ne comprends pas pourquoi ces instructions ne figurent pas dans le fichier Lisez-moi, mais le tour est joué.
Tout d'abord, installez le paquet:
npm install @mdi/font --save
Ensuite, il est nécessaire d’ajouter la feuille de style à votre fichier styles.scss
. J'ai ajouté ce qui suit à la fin de mon fichier:
//---------------------------------------------------------------------------
// Material Design Icons (https://materialdesignicons.com/)
//---------------------------------------------------------------------------
$mdi-font-path: "~@mdi/font/fonts";
@import "~@mdi/font/scss/materialdesignicons.scss";
Remarque le $mdi-font-path
est nécessaire pour remplacer un jeu par défaut défini dans le @mdi/font/scss/_variables.scss
, ce qui provoque une plainte du compilateur Webpack. Si vous oubliez de le faire, vous obtiendrez une série d'erreurs, comme suit:
ERREUR dans ./node_modules/css-loader! introuvable: Erreur: Impossible de résoudre '../fonts/materialdesignicons-webfont.eot' dans '/ home/myRepo/myApp'
Edit : Je ne sais pas si cela est nécessaire (c'est probablement le cas dans certains cas), mais j'ai également mis à jour le fichier .angular-cli.json
. styles
element:
"styles": [
"../node_modules/@mdi/icon/font/css/materialdesignicons.min.css",
Une autre alternative à ce qui précède, qui a permis aux icônes de fonctionner avec très peu d’effort, a été d’importer le CSS directement. Dans le fichier TypeScript, j'ai remplacé l'élément styleUrls
(pour éviter un bug étrange avec Karma):
// styleUrls: ['./graphics-control.component.css'],
styles: [require('./my.component.css'),
require('../pathTo/node_modules/@mdi/font/css/materialdesignicons.min.css')]
Avec Bootstrap 4 & Angular, cela fonctionne:
1) Run:
npm install material-design-icons --save
2) Ajouter à styles.css ou styles.scss
@import '~material-design-icons/iconfont/material-icons.css';
3) Allez à: ..\node_modules\material-design-icons\iconfont\material-icons.css et assurez-vous que la section est exactement comme ceci ('MaterialIcons-Regular.woff2') .. .:
@font-face {
font-family: 'Material Icons';
font-style: normal;
font-weight: 400;
src: url(MaterialIcons-Regular.eot); /* For IE6-8 */
src: local('Material Icons'),
local('MaterialIcons-Regular'),
url('MaterialIcons-Regular.woff2') format('woff2'),
url('MaterialIcons-Regular.woff') format('woff'),
url('MaterialIcons-Regular.ttf') format('truetype');
}
4) Utiliser l'icône en HTML:
<i class="material-icons">visibility</i>
Basé sur @ theMayer answer, il existe ma version pour le faire fonctionner pour le package @mdi/font
.
1- npm install @mdi/font --save
2- Dans angular.json
, sous architect/buid/options/styles
, ajoutez "node_modules/@mdi/font/css/materialdesignicons.min.css"
3- Dans src\app\app.module.ts
ajoutez import { MatIconModule } from '@angular/material/icon';
et ajoutez MatIconModule
dans la section imports
4- Dans src\styles.scss
ajoutez:
$mdi-font-path: "~@mdi/font/fonts";
@import "~@mdi/font/scss/materialdesignicons.scss";
5- Ajoutez l'icône dans votre code HTML à l'aide de mat-icon, par exemple:
<mat-icon class="mdi mdi-dumbbell" aria-hidden="true"></mat-icon>