Débutant angulaire ici .. quelqu'un pourrait-il me diriger vers la bonne voie, comment pourrais-je remplacer correctement les icônes de matériau existantes par des icônes personnalisées, plus précisément avec les graphismes SVG? Quelque chose comme ceci:
Donc ceci:
<mat-icon class="mat-icon-rtl-mirror"> {{nestedTreeControl.isExpanded(node) ? 'INSERT_SVG_1_HERE' : 'INSERT_SVG_2_HERE'}} </mat-icon>
Avec ceci:
<mat-icon class="mat-icon-rtl-mirror"> {{nestedTreeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}} </mat-icon>
3 Réponses :
Si cela ne fait pas partie des icônes matérielles, pourquoi ne pas l'utiliser comme une image normale. Utilisez-le simplement comme une balise d'image normale:
<img src="{{nestedTreeControl.isExpanded(node) ? 'path_to_svg_file_1.svg' : 'path_to_svg_file_2'}}">
Cela ne semble pas fonctionner comme ça… affiche seulement '../folder' si je l'insère comme '../assets/SVG_file.svg'
Cela ne résout pas exactement votre problème, car vous devrez utiliser l'argument À titre d'exemple: Une autre approche consisterait à installer puis suivez les étapes ci-dessus, à la différence d'importer également chaque icône nécessaire, par exemple donc dans Et dans le html juste pour simplifier ... mais vous aurez l'idée ... l'inconvénient de cette approche est, que vous devrez enregistrer toutes les icônes que vous souhaitez utiliser ... Mais au moins vous restez dans le même domaine de changement. Au lieu d'utiliser les ligatures, vous pouvez toutes les changer via J'espère que cela aide svgIcon
sur l'élément mat-icon
au lieu d'utiliser le innerText de
mat-icon
mais sinon ça marche:
raw-loader
. MatIconRegistry
; //src/app/app.component.html
...
<mat-icon [svgIcon]="expanded ? 'chevron_right' : 'expand_more'" (click)="expanded = !expanded"></mat-icon>
...
// src/app/app.module.ts
...
import expandMore from '!!raw-loader!@mdi/svg/svg/chevron-down.svg';
import chevronRight from '!!raw-loader!@mdi/svg/svg/chevron-right.svg';
...
export class WeddingDayModule {
constructor(
private iconRegistry: MatIconRegistry,
private sanitizer: DomSanitizer
) {
iconRegistry
.addSvgIconLiteral('chevron_right', sanitizer.bypassSecurityTrustHtml(chevronRight))
.addSvgIconLiteral('expand_more', sanitizer.bypassSecurityTrustHtml(expandMore));
}
}
// src/app/thumbs-up.svg
<svg>...</svg>
// src/app/app.component.html
<mat-icon svgIcon="thumbsUp"></mat-icon>
@mdi/svg
npm install @ mdi / svg
expand_more
et chevron_right
src/app/app.module.ts
// src/app/app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { DomSanitizer } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';
import { MatIconModule, MatIconRegistry } from '@angular/material';
import { AppComponent } from './app.component';
import { HelloComponent } from './hello.component';
import thumbsUp from '!!raw-loader!./thumbs-up.svg';
@NgModule({
imports: [
BrowserModule,
FormsModule,
MatIconModule
],
declarations: [ AppComponent, HelloComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule {
constructor(iconRegistry: MatIconRegistry, sanitizer: DomSanitizer) {
iconRegistry.addSvgIconLiteral(
'thumbsUp', sanitizer.bypassSecurityTrustHtml(thumbsUp));
}
}
// src/typings.d.ts
declare module '*.svg' {
const svg: string;
export default svg;
}
svgIcon
et vous obtenez plus d'icônes que les icônes que la bibliothèque obsolète material-design-icons
contient.
Oui, je suis conscient de cette approche et j'ai réussi à l'utiliser comme svgIcon sur mat-icon… Cependant, j'essaie de trouver un moyen de remplacer 'expand_more': 'chevron_right' par des SVG personnalisés, donc ça pourrait être utilisé dans les conditionnels etc… Je ne sais pas si c'est possible du tout? Merci pour l'effort, le récompensera lorsqu'il sera activé
Donc, si je comprends bien, l'implémentation que vous souhaitez réaliser est de trouver un moyen cohérent d'utiliser une icône svg personnalisée ou une icône de matériau defaultish
?
oui correct - donc si j'ai un graphisme SVG personnalisé, disons US-flag, je voudrais pouvoir l'utiliser comme 'us_flag_custom' à tout moment
D'accord, alors que diriez-vous de le retourner dans l'autre sens et d'utiliser par exemple @ mdi / svg
, puis importez les icônes de matériau comme mentionné ci-dessus. Ensuite, ils peuvent au moins être utilisés de manière cohérente comme svgIcon. Pas parfait car vous auriez à enregistrer chaque icône de matériau que vous souhaitez utiliser ... Si vous pensez que cela résoudrait le problème, je mettrai à jour la réponse
Oui, s'il vous plaît, cette approche serait également intéressante à voir
@Smithy btw, juste figuré, vous pouvez le mélanger sans problème.
, si aucune ligature n'est disponible, le svgIcon est pris.
Vous pouvez utiliser angular-svg-icon
L'icône angular-svg est un service et un composant Angular 7 qui
fournit un moyen d'insérer des fichiers SVG pour leur permettre d'être facilement
stylisé par CSS et code. Le service fournit un registre d'icônes qui charge et met en cache un SVG
indexé par son URL. Le composant est responsable de l'affichage du
SVG. Après avoir obtenu le svg du registre, il clone le SVGElement
et le SVG au HTML interne du composant. Pour plus d'informations: https://www.npmjs.com/package/angular -svg-icon