
在
Angular中module是非常核心的一个概念。
一个module像一个盒子, 帮助开发者整理项目结构, 例如 一个module用来放玩具, 一个module用来放日用品。
它清晰的将复杂的业务模块、功能划分为独立的模块, 模块与模块之间职责分明。
模块里面的组件、服务、指令、管道都仅在当前模块内有效,实现模块化。
module使用@NgModule装饰器来定义, 例如:
@NgModule({
imports: [ButtonModule]
providers: [],
declarations: [PopupComponent],
exports: [PopupComponent]
})
export class PopuoModule {}
imports的作用是, 你编写的这个模块需要用到其他模块提供的内容, 需要添加到imports中。例如上面引入了一个ButtonModule。并且非常重要的是,imports中我这里只建议引入模块
providers的作用是注入服务, 服务的特性将会在下面讲到, 这里不再多写。
declarations的作用是声明, 例如module中的组件、指令、管道都必须在这里声明。
exports的作用是导出成员, 例如在封装模块时, 你想暴露给外部使用的模块什么内容, 就在这里导出什么内容。
bootstrap的作用是声明主视图, 即根组件, 在AppModule中使用。
在
Angular中, 组件分为Web Component和Angular Component。
Web Component指的是一个页面组件, 每一个路由都会指向一个页面组件,通过路由访问来渲染页面组件中的内容。
Angular Component指的是在开发中,你需要封装一些公共的组件提供给页面使用,例如弹窗表格按钮等等。
在Angular中, 组件必须在module中注册, 并且只能在一个module中注册。
component使用装饰器@Component来定义, 例如:
@Component({
selector: ‘app-popup‘,
templateUrl: ‘./popup.component.html‘,
styleUrls: [‘./popup.component.css‘],
})
export class PopupComponent {}
selector用来定义组件的选择器名称, 当这个组件被其他模块使用时, 通过<app-popup></app-popup>调用。
templateUrl指定该组件对应的html文件, 即视图内容; 或者通过template可以不指定文件, 直接编写HTML代码。
styleUrls指定该组件对应的style文件, 可以指定多个样式文件; 或者通过styles可以不指定文件, 直接编写css代码。
这里只讲解了基础的组件, 更多关于组件的内容会单独拿出来说。
路由是Angular用来串联整个SPA应用的核心, 通过路由可以访问到各个页面组件, 例如:
const routes = [
{
path: ‘demo‘,
component: ViewComponent,
},
{
path: ‘lazy‘,
loadChildren: () => import(‘./views/lazy-view.module.ts‘).then(m => m.LazyViewModule),
},
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule],
})
export class AppRoutingModule {}
路由也是一个模块, 并且AppRoutingModule为根路由模块, 它导出了RouterModule并注册在了AppModule中。
RouterModule.forRoot即注册路由, 示例路由通过http://localhost:4200/demo访问, 但是demo路由并不是路由懒加载,ViewComponent需要在AppModule中声明才行,
一般的项目开发中, 都会通过路由懒加载来分配业务模块。
loadChildren就是路由懒加载, 他指向了一个模块, 并且只有在访问lazy这个路由时, 才会加载模块中的内容, 而demo则在程序启动时就被加载了。
关于
路由的更多内容也会单独说, 这里只做简单介绍, 主要是了解一个基本概念。
服务是@Injectable装饰器来定义, 例如:
@Injectable()
export class RequestService {}
@Injectable({
provideIn: ‘root‘,
})
export class RequestService {}
服务需要注册在module的providers或者component的providers中, 不同的注册地方作用域不同,服务在当前注入的作用域中是单例的。
provideIn是注入的一个快捷方式,root表示注册在根模块中, 即全局单例对象, 这里使用了provideIn就可以省略在module的providers中注册了。
原文:https://www.cnblogs.com/lapoo/p/14929020.html