Angular入口组件(entry component)与声明式组件的区别详解


Posted in Javascript onApril 09, 2018

前言

组件是Angular中很重要的一部分,下面这篇文章就来给大家介绍关于Angular入口组件(entry component)与声明式组件的区别,Angular的声明式组件和入口组件的区别体现在两者的加载方式不同。

  • 声明式组件是通过组件声明的selector加载

入口组件(entry component)是通过组件的类型动态加载

声明式组件

声明式组件会在模板里通过组件声明的selector加载组件。

示例

@Component({
 selector: 'a-cmp',
 template: `
 <p>这是A组件</p>
 `
})
export class AComponent {}
@Component({
 selector: 'b-cmp',
 template: `
 <p>在B组件里内嵌A组件:</p>
 <a-cmp></a-cmp>
 `
})
export class BComponent {}

在BComponent的模板里,使用selector<a-cmp></a-cmp>声明加载AComponent。

入口组件(entry component)

入口组件是通过指定的组件类加载组件。

主要分为三类:

  • @NgModule.bootstrap里声明的启动组件,如AppComponent。
  • 在路由配置里引用的组件
  • 其他通过编程使用组件类型加载的动态组件

启动组件

app.component.ts

@Component({
 selector: 'app-root',
 templateUrl: './app.component.html',
 styleUrls: ['./app.component.scss']
})
export class AppComponent{}

app.module.ts

@NgModule({
 declarations: [
 AppComponent
 ],
 imports: [
 BrowserModule,
 BrowserAnimationsModule,
 AppRoutingModule
 ],
 providers: [],
 bootstrap: [AppComponent]
})
export class AppModule { }

在bootstrap里声明的AppComponent为启动组件。虽然我们会在index.html里使用组件的selector<app-root></app-root>的位置,但是Angular并不是根据此selector来加载AppComponent。这是容易让人误解的地方。因为index.html不属于任何组件模板,Angular需要通过编程使用bootstrap里声明的AppComponent类型加载组件,而不是使用selector。

由于Angular动态加载AppComponent,所有AppComponent是一个入口组件。

路由配置引用的组件

@Component({
 selector: 'app-nav',
 template: `
 <nav>
 <a routerLink="/home" routerLinkActive #rla="routerLinkActive" selected="#rla.isActive">首页</a>
 <a routerLink="/users" routerLinkActive #rla="routerLinkActive" selected="#rla.isActive">用户</a>
 </nav>
 <router-outlet></router-outlet>
 `
})
export class NavComponent {}

我们需要配置一个路由

const routes: Routes = [
 {
 path: "home",
 component: HomeComponent
 },
 {
 path: "user",
 component: UserComponent
 }
];

@NgModule({
 imports: [RouterModule.forRoot(routes)],
 exports: [RouterModule]
})
export class AppRoutingModule { }

Angular根据配置的路由,根据路由指定的组件类来加载组件,而不是通过组件的selector加载。

配置入口组件

在Angular里,对于入库组件需要在@NgModule.entryComponents里配置。

由于启动组件和路由配置里引用的组件都为入口组件,Angular会在编译时自动把这两种组件添加到@NgModule.entryComponents里。对于我们自己编写的动态组件需要手动添加到@NgModule.entryComponents里。

@NgModule({ declarations: [  AppComponent ], imports: [  BrowserModule,  BrowserAnimationsModule,  AppRoutingModule ], providers: [], entryComponents:[DialogComponent], declarations:[] bootstrap: [AppComponent] }) export class AppModule { }

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
javascript addBookmark 加入收藏 多浏览器兼容
Aug 15 Javascript
JavaScript截取字符串的Slice、Substring、Substr函数详解和比较
Mar 20 Javascript
jQuery事件绑定用法详解
Sep 08 Javascript
jQuery EasyUI 获取tabs的实例解析
Dec 06 Javascript
javascript 判断当前浏览器版本并判断ie版本
Feb 17 Javascript
ES6中Math对象的部分扩展
Feb 20 Javascript
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
Sep 04 Javascript
JS实现静态页面搜索并高亮显示功能完整示例
Sep 19 Javascript
layer.confirm取消按钮绑定事件的方法
Aug 17 Javascript
webpack 如何解析代码模块路径的实现
Sep 04 Javascript
微信小程序实现滑动操作代码
Apr 23 Javascript
快速搭建vue2.0+boostrap项目的方法
Apr 09 #Javascript
webpack 模块热替换原理
Apr 09 #Javascript
Angular5升级RxJS到5.5.3报错:EmptyError: no elements in sequence的解决方法
Apr 09 #Javascript
浅谈webpack 自动刷新与解析
Apr 09 #Javascript
webpack 插件html-webpack-plugin的具体使用
Apr 09 #Javascript
详解webpack 入门与解析
Apr 09 #Javascript
vue技术分享之你可能不知道的7个秘密
Apr 09 #Javascript
You might like
关于PHP内存溢出问题的解决方法
2013/06/25 PHP
PHP快速推送微信模板消息
2017/04/14 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
2018/04/21 PHP
PHP实现的猴王算法(猴子选大王)示例
2018/04/30 PHP
Javascript之文件操作
2007/03/07 Javascript
JavaScript 类的定义和引用 JavaScript高级培训 自定义对象
2010/04/27 Javascript
关于JS管理作用域的问题
2013/04/10 Javascript
JS打开新窗口防止被浏览器阻止的方法
2015/01/03 Javascript
JavaScript实现文字与图片拖拽效果的方法
2015/02/16 Javascript
解决bootstrap中modal遇到Esc键无法关闭页面
2015/03/09 Javascript
canvas知识总结
2017/01/25 Javascript
React进阶学习之组件的解耦之道
2017/08/07 Javascript
vue2 全局变量的设置方法
2018/03/09 Javascript
Vue 按键修饰符处理事件的方法
2018/05/04 Javascript
Python实现把数字转换成中文
2015/06/29 Python
python利用datetime模块计算时间差
2015/08/04 Python
Python 面试中 8 个必考问题
2018/11/16 Python
如何利用Python分析出微信朋友男女统计图
2019/01/25 Python
python写日志文件操作类与应用示例
2019/07/01 Python
Django处理Ajax发送的Get请求代码详解
2019/07/29 Python
python ETL工具 pyetl
2020/06/07 Python
CSS3教程(1):什么是CSS3
2009/04/02 HTML / CSS
HTML5 Web缓存和运用程序缓存(cookie,session)
2018/01/11 HTML / CSS
美国韩国化妆品和护肤品购物网站:Beautytap
2018/07/29 全球购物
《地震中的父与子》教学反思
2014/04/10 职场文书
单位承诺书格式
2014/05/21 职场文书
关爱留守儿童标语
2014/06/18 职场文书
党的群众路线对照检查材料思想汇报
2014/09/25 职场文书
2015年党员干部承诺书
2015/01/21 职场文书
饭店服务员岗位职责
2015/02/09 职场文书
2015年建筑工作总结报告
2015/05/04 职场文书
2015年幼儿园保育工作总结
2015/05/12 职场文书
庆祝教师节新闻稿
2015/07/17 职场文书
《语言的突破》读后感3篇
2019/12/12 职场文书
Mysql超详细讲解死锁问题的理解
2022/04/01 MySQL
Python编写冷笑话生成器
2022/04/20 Python