2016-05-12 14 views
16

Ich versuche, eckigen Material 2 verwenden, um Symbole auf meiner Website anzuzeigen, aber ich bin ein wenig verwirrt.Verwenden von eckigen 2 Material Icons

Dies ist, wie es von der Demo in GitHub Repo von Material 2 arbeiten angenommen hat:

https://github.com/angular/material2/blob/master/src/demo-app/icon/icon-demo.ts

ich es benutzt habe versucht, aber keine Symbole überhaupt angezeigt werden.

Dies ist, wie ich sie aufrichten

app.component.ts

import {MdIcon, MdIconRegistry} from '@angular2-material/icon/icon'; 

@Component({ 
    ... 
    encapsulation: ViewEncapsulation.None, 
    viewProviders: [MdIconRegistry], 
    directives: [MdIcon], 
}) 
export class MyComponent{ 
    constructor(private router: Router, 
       private JwtService:JwtService, 
       mdIconRegistry: MdIconRegistry){ 
    mdIconRegistry.addSvgIconSetInNamespace('core', 'fonts/core-icon-set.svg') 
    } 
} 

und die Vorlage ..

<md-icon>home</md-icon> 

Die Seite lädt ohne Fehler, aber kein Symbol wird gezeigt. Was hätte schiefgehen können?

+0

Haben Sie das resultierende DOM untersucht? Wie sieht es aus? –

+0

Es tut mir leid @ GünterZöchbauer, ich verstehe nicht was du damit meinst. – TheUnreal

+1

Öffnen Sie Browser-Devtools und überprüfen Sie, wie das Ergebnis-DOM aussieht. Ich denke, das Icon-Demo ist irgendwo online verfügbar. Sie können das DOM des Symbols in Ihrer Anwendung und das in der Demo vergleichen. Vielleicht gibt es einen Hinweis darauf, was schief gelaufen sein könnte. –

Antwort

25

Um MdIcon zu verwenden, müssen Sie die entsprechenden css Dateien einschließen. In Ihrem Code verwenden Sie die Standardschriftart, die Material Icons von Google ist.

Von angular-material2 repo:

standardmäßig die Material icons font verwendet wird. (Sie müssen immer noch den HTML-Code einfügen, um die Schriftart und deren CSS wie im Link beschrieben zu laden).

einfach, geben Sie einfach die CSS in index.html wie folgt aus:

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

Oder Sie können andere Verfahren zur Auswahl in der offiziellen Repo erwähnt importieren:

http://google.github.io/material-design-icons/#icon-font-for-the-web

+0

Gilt das immer noch für den Wechsel zu einem Singular '@ angular/material'? – redfox05

+0

@ redfox05 ja es tut, ich aktualisierte den Dokumentationslink in der Antwort. – Abdulrahman

+0

Wenn Sie eine Art von Autoreload/Compiling verwenden, wie angular-cli (ng serve), erinnern Sie sich an cancel de service und relaunch ng driver – Dazag

-4

Sie auch müssen Http importieren.

import {HTTP_PROVIDERS} from '@angular/http'; 
import {MdIcon, MdIconRegistry} from '@angular2-material/icon'; 
@Component({ 
    template:`<md-icon>code</md-icon>` 
    directives:[MdIcon], 
    providers: [HTTP_PROVIDERS, MdIconRegistry] 
}) 
+0

Würden Sie bitte weiter erklären? Mit der neuen NgModule API scheint das nicht richtig zu sein ... –

+0

Das funktioniert nur mit Angular RC 4 –

12

Ab @ngModule Einführung von Angular RC5 Syntax beginnend wie folgt sein würde:

app-Beispiel-module.ts

import { MdIconModule, MdIconRegistry } from '@angular2-material/icon'; 

@NgModule({ 
    imports: [ 
     MdIconModule 
    ] 
    providers: [ 
     MdIconRegistry 
    ] 
}) 

export class AppExampleModule { 
    // 
} 

app-Beispiel-component.ts

@Component({ 

    selector: 'app-header', 
    template: `<md-icon svgIcon="close"></md-icon>` 
}) 


export class AppExampleComponent 
{ 
    constructor(private mdIconRegistry: MdIconRegistry) { 
     mdIconRegistry 
      .addSvgIcon('close', '/icons/navigation/ic_close_36px.svg'); 
    } 
} 
+3

mein Mann, das ist, was ich gesucht habe !!! als ein Kopf zu anderen, können Sie jetzt von @ angular/Material importieren – jemiloii

16

Es ist wichtig zu wissen, dass wir einen Unterstrich _ verwenden müssen, um einen Symbolraum getrennt zu verwenden (zum Beispiel Datei-Upload). Zum Beispiel:

<md-icon>file_upload</md-icon> 
+0

Guter Rat, aber das beantwortet die Frage nicht. – isherwood

+0

Definitiv hilfreich Dank Milso, nirgends heißt es, Leerzeichen durch Unterstriche zu ersetzen. –

10

innen Stil.CSS kopieren und fügen Sie den folgenden: ---

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

und verwenden wie:

<md-icon>menu</md-icon> 
      ^--- icon name 
2

In Winkel 4.3.3 mit @ Winkel/Material 2.0.0-beta-7 auch zu sanieren benötigen die URL

import { DomSanitizer } from '@angular/platform-browser'; 

export class AppComponent 
{ 
    constructor(
     private domSanitizer: DomSanitizer, 
     private mdIconRegistry: MdIconRegistry) { 
     mdIconRegistry.addSvgIcon('twitter', domSanitizer.bypassSecurityTrustResourceUrl('/assets/icons/twitter.svg')); 
    } 
} 
0

Dies ist der Weg, ich habe es versucht und es funktioniert.

mdIconRegistry.addSvgIcon('slider', sanitizer.bypassSecurityTrustResourceUrl('./assets/controls/slider.svg')); 

Die Instanz mdIconRegistry wird über DI und fügen Sie benutzerdefinierte SVG addSvgIcon Methode zur Verfügung. Dann verwenden Sie <md-icon svgIcon="slider"> in Ihrer Vorlage.

Verwandte Themen