2017-05-22 201 views
1

我有模块的角度4. 进口问题,我有以下结构:导入上部模块中的角材料不工作

我app.module.ts

.... 
import { NavbarComponent } from './a2-components/navbar/navbar.component'; 
import { SidebarComponent } from './a2-components/sidebar/sidebar.component'; 
import {AdminModule} from './admin/admin.module'; 

@NgModule({ 
    imports: [ 
    ... 
    AdminModule, 
    MaterialModule.forRoot(), 
    ... 
    ], 
    providers: [ ], 
    declarations : [ 
    ... 
    NavbarComponent, 
    SidebarComponent, 
    ... 
    ], 
    bootstrap: [ AppComponent ] 
}) 

export class AppModule { 

} 

我admin.module

... 
import { AdminComponent }  from './admin.component'; 
import { HomeComponent }  from './home/home.component'; 
import { AdminService }  from './admin.service'; 

@NgModule({ 
    imports: [ ... ], 
    declarations: [ AdminComponent, HomeComponent ], 
    providers:[ AdminComponent, AdminService ] 
}) 
export class AdminModule {} 

的app.module比admin.module分层较大的模块。我正在导入@ angular/material,NavbarComponent和SidebarComponent,但是我得到一个错误,在模块admin.module中找不到材质,NavbarComponent和SidebarComponent。

错误图像: enter image description here

可能有人给我一个提示?

+1

基本上你不会在AdminModule或任何其他模块的作用域中导入所需的组件声明(并且所有'MaterialModule'都会捆绑**所有**组件声明)。仅仅因为你导入到AppModule中,组件不会自动地被其他'NgModule'装置使用。这实际上是Angular“模块”中的一部分。你应该期望成为全球的唯一的东西是“服务”。 “物质”项目不再出口。 –

+0

很好的解释。非常感谢你,我的朋友! –

回答

1

我们可以看到你的angular-cli.json,index.html或Style.css吗?

当您为样式添加框架(如引导程序)时,必须将CSS链接到新框架。

添加此行您的style.css:

@import '~https://fonts.googleapis.com/icon?family=Material+Icons'; 
@import '[email protected]/material/core/theming/prebuilt/deeppurple-amber.css'; 
@import '../node_modules/bootstrap/dist/css/bootstrap.min.css'; 

其他想,当我在一个模块中添加的材料,只是把这个代码:

import { MaterialModule } from '@angular/material'; 

@NgModule({ 
imports: [ 
    MaterialModule, 
]}) 

这为我工作。

+0

非常感谢你回答我。但回答我一件事。您是否将角材料导入每个子模块?我在app.module中导入,它适用于app.module的组件,但不适用于子模块。我想创建一个共享模块来导入到每个模块中,但是我担心系统过载。 –

+1

是的,只是在使用材料的组件中导入,我很久以前就导入了材质,但我认为尝试导入也是你想要的,没有成功。我的应用程序很简单,无法测试性能。我认为这是创建共享模块的一种方式,将来也会尝试。 – Dekonunes

+1

@DaniloSantos应该注意的是,尽管你可以像这样导入MaterialModule,但你实际上不应该这样做。这会在运送应用程序的生产版本时搞乱任何“树木摇动”优化。相反,只需导入实际在应用程序模块范围内使用的组件所需的模块。应该考虑使用'MaterialModule'和'MaterialModule.forRoot()'。预计这些出口将在未来的版本中消失。 –