使用 mdIcon 时从控制台获取错误
Getting an error from console when using mdIcon
Angular 在我使用 mdIcon 时抛出错误。下面是代码:
import {Component} from '@angular/core';
import {MdIcon} from '@angular2-material/icon';
@Component({
selector: 'my-app',
template: `
<md-toolbar>
<md-icon class="demo-toolbar-icon">menu</md-icon>
<span>Default Toolbar</span>
<span class="demo-fill-remaining"></span>
<md-icon>code</md-icon>
</md-toolbar>`,
directives: [MdIcon,MdToolbar],
})
export class AppComponent {}
错误:
ORIGINAL EXCEPTION: No provider for MdIconRegistry!
Error: DI Exception
at NoProviderError.BaseException [as constructor] (exceptions.ts:14)
at NoProviderError.AbstractProviderError [as constructor] (reflective_exceptions.ts:53)
at new NoProviderError (reflective_exceptions.ts:85)
at ReflectiveInjector_._throwOrNull (reflective_injector.ts:844)
at ReflectiveInjector_._getByKeyDefault (reflective_injector.ts:873)
at ReflectiveInjector_._getByKey (reflective_injector.ts:835)
at ReflectiveInjector_.get (reflective_injector.ts:632)
at ElementInjector.get (element_injector.ts:19)
at DebugAppView._View_AppComponent0.createInternal (AppComponent.template.js:141)
at DebugAppView.AppView.create (view.ts:110)
任何人都可以帮我看看我做错了什么吗?
您需要在providers
或viewProviders
中列出并注册一些图标或图标集
import {Component, ViewEncapsulation} from '@angular/core';
import {MdIcon} from '@angular2-material/icon';
@Component({
selector: 'my-app',
template: `
<md-toolbar>
<md-icon class="demo-toolbar-icon">menu</md-icon>
<span>Default Toolbar</span>
<span class="demo-fill-remaining"></span>
<md-icon>code</md-icon>
</md-toolbar>`,
directives: [MdIcon,MdToolbar],
viewProviders: [MdIconRegistry],
})
export class AppComponent {
constructor(mdIconRegistry: MdIconRegistry) {
mdIconRegistry
.addSvgIcon('thumb-up', '/demo-app/icon/assets/thumbup-icon.svg')
.addSvgIconSetInNamespace('core', '/demo-app/icon/assets/core-icon-set.svg')
.registerFontClassAlias('fontawesome', 'fa');
}
}
导入 Http。
访问 https://groups.google.com/forum/#!topic/angular-material2/ZEHFELl2-Sw
import {HTTP_PROVIDERS} from '@angular/http';
import {MdIcon, MdIconRegistry} from '@angular2-material/icon';
@Component({
template:
<md-toolbar>
<md-icon class="demo-toolbar-icon">menu</md-icon>
<span>Default Toolbar</span>
<span class="demo-fill-remaining"></span>
<md-icon>code</md-icon>
</md-toolbar>`,
directives:[MdIcon],
providers: [HTTP_PROVIDERS, MdIconRegistry]
})
使用 material alpha 8-4 的 2.0.0 版本更新:
您需要将 MdIconRegistry
作为提供商包含在 app.modules.ts 文件中。这是一个功能示例:
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { MdButtonModule } from '@angular2-material/button';
import { MdButtonToggleModule } from '@angular2-material/button-toggle';
import { MdCardModule } from '@angular2-material/card';
import { MdCheckboxModule } from '@angular2-material/checkbox';
import { MdGridListModule } from '@angular2-material/grid-list';
import { MdIconModule, MdIconRegistry } from '@angular2-material/icon';
import { MdInputModule } from '@angular2-material/input';
import { MdListModule } from '@angular2-material/list';
import { MdMenuModule } from '@angular2-material/menu';
import { MdProgressBarModule } from '@angular2-material/progress-bar';
import { MdProgressCircleModule } from '@angular2-material/progress-circle';
import { MdRadioModule } from '@angular2-material/radio';
import { MdSidenavModule } from '@angular2-material/sidenav';
import { MdSliderModule } from '@angular2-material/slider';
import { MdSlideToggleModule } from '@angular2-material/slide-toggle';
import { MdTabsModule } from '@angular2-material/tabs';
import { MdToolbarModule } from '@angular2-material/toolbar';
import { MdTooltipModule } from '@angular2-material/tooltip';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
FormsModule,
HttpModule,
MdButtonModule,
MdButtonToggleModule,
MdCardModule,
MdCheckboxModule,
MdGridListModule,
MdIconModule,
MdInputModule,
MdListModule,
MdMenuModule,
MdProgressBarModule,
MdProgressCircleModule,
MdRadioModule,
MdSidenavModule,
MdSliderModule,
MdSlideToggleModule,
MdTabsModule,
MdToolbarModule,
MdTooltipModule
],
providers: [
MdIconRegistry
],
bootstrap: [AppComponent]
})
export class AppModule { }
如果您想使用 md-slide-toggle 和 md-slider 模块,请不要忘记安装 hammerjs + typings 并将 import 'hammerjs';
添加到您的 main.ts 文件。
要使用标准图标,您只需将字体放入 html(最简单的解决方案是使用 CDN 作为字体):
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
文档中描述了其他方法:http://google.github.io/material-design-icons/#icon-font-for-the-web
您还需要(与任何其他 material 包一样)将 material 模块放置到 NgModule 配置中导入。
您应该可以在 app.module.ts 中导入 MaterialRootModule:
import { MaterialModule } from '@angular/material';
@NgModule({
imports: [
MaterialModule.forRoot(),
],
})
Angular 在我使用 mdIcon 时抛出错误。下面是代码:
import {Component} from '@angular/core';
import {MdIcon} from '@angular2-material/icon';
@Component({
selector: 'my-app',
template: `
<md-toolbar>
<md-icon class="demo-toolbar-icon">menu</md-icon>
<span>Default Toolbar</span>
<span class="demo-fill-remaining"></span>
<md-icon>code</md-icon>
</md-toolbar>`,
directives: [MdIcon,MdToolbar],
})
export class AppComponent {}
错误:
ORIGINAL EXCEPTION: No provider for MdIconRegistry! Error: DI Exception at NoProviderError.BaseException [as constructor] (exceptions.ts:14) at NoProviderError.AbstractProviderError [as constructor] (reflective_exceptions.ts:53) at new NoProviderError (reflective_exceptions.ts:85) at ReflectiveInjector_._throwOrNull (reflective_injector.ts:844) at ReflectiveInjector_._getByKeyDefault (reflective_injector.ts:873) at ReflectiveInjector_._getByKey (reflective_injector.ts:835) at ReflectiveInjector_.get (reflective_injector.ts:632) at ElementInjector.get (element_injector.ts:19) at DebugAppView._View_AppComponent0.createInternal (AppComponent.template.js:141) at DebugAppView.AppView.create (view.ts:110)
任何人都可以帮我看看我做错了什么吗?
您需要在providers
或viewProviders
中列出并注册一些图标或图标集
import {Component, ViewEncapsulation} from '@angular/core';
import {MdIcon} from '@angular2-material/icon';
@Component({
selector: 'my-app',
template: `
<md-toolbar>
<md-icon class="demo-toolbar-icon">menu</md-icon>
<span>Default Toolbar</span>
<span class="demo-fill-remaining"></span>
<md-icon>code</md-icon>
</md-toolbar>`,
directives: [MdIcon,MdToolbar],
viewProviders: [MdIconRegistry],
})
export class AppComponent {
constructor(mdIconRegistry: MdIconRegistry) {
mdIconRegistry
.addSvgIcon('thumb-up', '/demo-app/icon/assets/thumbup-icon.svg')
.addSvgIconSetInNamespace('core', '/demo-app/icon/assets/core-icon-set.svg')
.registerFontClassAlias('fontawesome', 'fa');
}
}
导入 Http。 访问 https://groups.google.com/forum/#!topic/angular-material2/ZEHFELl2-Sw
import {HTTP_PROVIDERS} from '@angular/http';
import {MdIcon, MdIconRegistry} from '@angular2-material/icon';
@Component({
template:
<md-toolbar>
<md-icon class="demo-toolbar-icon">menu</md-icon>
<span>Default Toolbar</span>
<span class="demo-fill-remaining"></span>
<md-icon>code</md-icon>
</md-toolbar>`,
directives:[MdIcon],
providers: [HTTP_PROVIDERS, MdIconRegistry]
})
使用 material alpha 8-4 的 2.0.0 版本更新:
您需要将 MdIconRegistry
作为提供商包含在 app.modules.ts 文件中。这是一个功能示例:
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { MdButtonModule } from '@angular2-material/button';
import { MdButtonToggleModule } from '@angular2-material/button-toggle';
import { MdCardModule } from '@angular2-material/card';
import { MdCheckboxModule } from '@angular2-material/checkbox';
import { MdGridListModule } from '@angular2-material/grid-list';
import { MdIconModule, MdIconRegistry } from '@angular2-material/icon';
import { MdInputModule } from '@angular2-material/input';
import { MdListModule } from '@angular2-material/list';
import { MdMenuModule } from '@angular2-material/menu';
import { MdProgressBarModule } from '@angular2-material/progress-bar';
import { MdProgressCircleModule } from '@angular2-material/progress-circle';
import { MdRadioModule } from '@angular2-material/radio';
import { MdSidenavModule } from '@angular2-material/sidenav';
import { MdSliderModule } from '@angular2-material/slider';
import { MdSlideToggleModule } from '@angular2-material/slide-toggle';
import { MdTabsModule } from '@angular2-material/tabs';
import { MdToolbarModule } from '@angular2-material/toolbar';
import { MdTooltipModule } from '@angular2-material/tooltip';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
FormsModule,
HttpModule,
MdButtonModule,
MdButtonToggleModule,
MdCardModule,
MdCheckboxModule,
MdGridListModule,
MdIconModule,
MdInputModule,
MdListModule,
MdMenuModule,
MdProgressBarModule,
MdProgressCircleModule,
MdRadioModule,
MdSidenavModule,
MdSliderModule,
MdSlideToggleModule,
MdTabsModule,
MdToolbarModule,
MdTooltipModule
],
providers: [
MdIconRegistry
],
bootstrap: [AppComponent]
})
export class AppModule { }
如果您想使用 md-slide-toggle 和 md-slider 模块,请不要忘记安装 hammerjs + typings 并将 import 'hammerjs';
添加到您的 main.ts 文件。
要使用标准图标,您只需将字体放入 html(最简单的解决方案是使用 CDN 作为字体):
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
文档中描述了其他方法:http://google.github.io/material-design-icons/#icon-font-for-the-web
您还需要(与任何其他 material 包一样)将 material 模块放置到 NgModule 配置中导入。
您应该可以在 app.module.ts 中导入 MaterialRootModule:
import { MaterialModule } from '@angular/material';
@NgModule({
imports: [
MaterialModule.forRoot(),
],
})