2016-05-26 4 views
1

Я не могу получить значок md для отображения значков из материала Google. Для тех, кому не нужна большая экспозиция, вот код, более подробная информация приведена после кода.Использование значков материалов с md-значком в угловом материале 2

app.component (где я показываю все из моих главных компонентов, фактическое мкр-икона находится в header.component):

import { Component } from '@angular/core'; 
import { HeaderComponent } from './shared/header.component'; 
import { ContentComponent } from './shared/content.component'; 
import { FooterComponent } from './shared/footer.component'; 

@Component({ 
    selector: 'my-app', 
    template: `<div id="wrapper"> 
    <header></header> 
    <content></content> 
    <footer></footer> 
    <div>`, 
    directives: [HeaderComponent, ContentComponent, FooterComponent] 
}) 
export class AppComponent { } 

компонент заголовка (где я пытаюсь вызвать MD-значок):

import { Component } from '@angular/core'; 
import {MdIcon} from '@angular2-material/icon'; 

@Component({ 
    selector: 'header', 
    template: `<md-icon>home</md-icon> 
    <h1>This is the Header</h1> 
    `, 
    directives: [MdIcon] 
}) 
export class HeaderComponent { } 

и вот CSS и HTML по шагам на материалы сайта Google для использования их иконки:

CSS:

@font-face { 
    font-family: 'Material Icons'; 
    font-style: normal; 
    font-weight: 400; 
    src: url("../fonts/MaterialIcons-Regular.eot"); 
    /* For IE6-8 */ 
    src: local("Material Icons"), local("MaterialIcons-Regular"), url("../fonts/MaterialIcons-Regular.woff2") format("woff2"), url("../fonts/MaterialIcons-Regular.woff") format("woff"), url("../fonts/MaterialIcons-Regular.ttf") format("truetype"); 
} 
.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'; 
} 

HTML:

<html> 

<head> 
    <title>Boiler Plate</title> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <link rel="stylesheet" href="assets/styles/layout.css"> 
    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> 
    <!-- 1. Load libraries --> 
    <!-- Polyfill(s) for older browsers --> 
    <script src="node_modules/core-js/client/shim.min.js"></script> 
    <script src="node_modules/zone.js/dist/zone.js"></script> 
    <script src="node_modules/reflect-metadata/Reflect.js"></script> 
    <script src="node_modules/systemjs/dist/system.src.js"></script> 
    <!-- 2. Configure SystemJS --> 
    <script src="systemjs.config.js"></script> 
    <script> 
    System.import('app').catch(function(err) { 
     console.error(err); 
    }); 
    </script> 
</head> 
<!-- 3. Display the application --> 

<body> 
    <my-app>Loading...</my-app> 
</body> 

</html> 

Первоначально я не получал каких-либо ошибок, он просто делает MD-значок, как «дом» в виде простого текста. Однако я думаю, что мне не хватало директивы для MdIcon, поэтому я вставил это, и теперь я получаю эту ошибку «Нет провайдера для MdIconRegistry!». Они немного рассказывают о MdIconRegistry в своем docs, но по тому, как я его читаю, вам нужно только это, если вы не хотите использовать стандартные значки Google, которые я хочу использовать. Поэтому в основном я импортировал компонент, включил директиву, добавил ссылку в свой индекс и добавил код CSS в мои таблицы стилей. Из того, что я прочитал, он должен работать, но я явно ничего не вижу.

Любая помощь будет оценена, и если у кого есть какие-либо критические замечания по поводу кода, не связанного с фактическим вопросом, пожалуйста, не стесняйтесь, дайте мне знать, я очень новичок в Angular 2, и я мог бы использовать все советы, которые я могу получить.

Заранее спасибо.

ответ

3

Ok, так что я нашел то, что мне не хватало, это было в документации, я просто не смотрел в нужном месте. Внутри вашего файла main.ts вам нужно импортировать и загружать HTTP_Providers, а внутри вашего компонента вам нужно импортировать MdIcon и MdIconRegistry, а также включить поставщика для MdIconRegistry. Что все это значит? Я рад, что вы спросили!

Main.ts перед:

import { bootstrap } from '@angular/platform-browser-dynamic'; 
import { AppComponent } from './app.component'; 

bootstrap(AppComponent); 

Main.ts после:

import { bootstrap } from '@angular/platform-browser-dynamic'; 
import { AppComponent } from './app.component'; 
import { HTTP_PROVIDERS } from '@angular/http'; 

bootstrap(AppComponent, [ 
    HTTP_PROVIDERS 
]); 

header.component.ts перед:

import { Component } from '@angular/core'; 
import {MdIcon} from '@angular2-material/icon'; 

@Component({ 
    selector: 'header', 
    template: `<md-icon>home</md-icon>`, 
    directives: [MdIcon] 
}) 
export class HeaderComponent { } 

header.component.ts после:

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

@Component({ 
    selector: 'header', 
    template: `<md-icon>home</md-icon>`, 
    directives: [MdIcon], 
    providers: [MdIconRegistry] 
}) 
export class HeaderComponent { } 

Документацию для значков можно найти here, а документацию, которая мне помогла, можно найти here в самом низу.

+0

Ссылки на документы мертвы :( –

0

От documentation:

<!-- 
For Material Design Icons 
The class '.material-icons' is auto-added if a style has NOT been specified 
since `material-icons` is the default fontset. So your markup: 
--> 
<md-icon> face </md-icon> 
<!-- becomes this at runtime: --> 
<md-icon md-font-set="material-icons"> face </md-icon> 
<!-- If the fontset does not support ligature names, then we need to use the ligature unicode.--> 
<md-icon>  </md-icon> 
<!-- The class '.material-icons' must be manually added if other styles are also specified--> 
<md-icon class="material-icons md-light md-48"> face </md-icon> 
+0

Документация относится к угловому материалу 1, проблема заключается в работе с угловым материалом 2, это моя ошибка, хотя я отметил ее как угловой материал2, так и угловой материал. Я собираюсь удалить бирку углового материала, извините за путаницу. (Я попробовал ваше предложение на всякий случай, хотя, не повезло) –

1

Правильный ответ здесь: вы должны правильно настроить проект. Вы не импортируете значки в правильном направлении.Вы должны ничего не делать, кроме импорта значков и шрифтов.

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

Вы импортировать это в HTML и ничего другого. Все, что вы делали, было странным обходным путем.