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 相关文章推荐
通过js动态操作table(新增,删除相关列信息)
May 23 Javascript
关于include标签导致js路径找不到的问题分析及解决
Jul 09 Javascript
jQuery客户端分页实例代码
Nov 18 Javascript
按Enter键触发事件的jquery方法实现代码
Feb 17 Javascript
jquery点击改变class并toggle的实现代码
May 15 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
Nov 03 Javascript
footer定位页面底部(代码分享)
Mar 07 Javascript
jQuery 1.9版本以上的浏览器判断方法代码分享
Aug 28 jQuery
JS+WCF实现进度条实时监测数据加载量的方法详解
Dec 19 Javascript
vue 指令和过滤器的基本使用(品牌管理案例)
Nov 04 Javascript
Node.js开发之套接字(socket)编程入门示例
Nov 05 Javascript
如何在vue中使用video.js播放m3u8格式的视频
Feb 01 Vue.js
快速搭建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
用DBSQL类加快开发MySQL数据库程序的速度
2006/10/09 PHP
php 魔术方法使用说明
2009/10/20 PHP
php 广告调用类代码(支持Flash调用)
2011/08/11 PHP
基于php上传图片重命名的6种解决方法的详细介绍
2013/04/28 PHP
对PHP新手的一些建议(PHP学习经验总结)
2014/08/20 PHP
javascript之典型高阶函数应用介绍
2013/01/10 Javascript
java与javascript之间json格式数据互转介绍
2013/10/29 Javascript
JS修改iframe页面背景颜色的方法
2015/04/01 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
2016/01/23 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
jQuery实现对象转为url参数的方法
2017/01/11 Javascript
vue如何实现observer和watcher源码解析
2017/03/09 Javascript
JavaScript实现隐藏省略文字效果的方法
2017/04/27 Javascript
Vuex的初探与实战小结
2018/11/26 Javascript
Vue切换Tab动态渲染组件的操作
2020/09/21 Javascript
python的paramiko模块实现远程控制和传输示例
2017/10/13 Python
python中lambda()的用法
2017/11/16 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
2018/04/18 Python
python实现简单的文字识别
2018/11/27 Python
基于Python组装jmx并调用JMeter实现压力测试
2020/11/03 Python
canvas实现图片镜像翻转的2种方式
2020/07/22 HTML / CSS
挪威户外活动服装和装备购物网站:Bergfreunde挪威
2016/10/20 全球购物
英国皇室御用百货:福南梅森(Fortnum & Mason)
2017/12/03 全球购物
漫威玩具服装及周边商品官方购物网站:Marvel Shop
2019/05/11 全球购物
介绍一下grep命令的使用
2012/06/28 面试题
销售人员求职的自我评价分享
2014/03/15 职场文书
2014年最新学习全国两会精神心得
2014/03/17 职场文书
函授生自我鉴定
2014/03/25 职场文书
2014年银行员工工作总结
2014/11/12 职场文书
《猴王出世》教学反思
2016/02/23 职场文书
小程序后台PHP版本部署运行 LNMP+WNMP
2021/04/01 Servers
GoLang中生成UUID唯一标识的实现
2021/05/08 Golang
SQL实现LeetCode(175.联合两表)
2021/08/04 MySQL
Android自定义ScrollView实现阻尼回弹
2022/04/01 Java/Android
vue项目配置sass及引入外部scss文件
2022/04/14 Vue.js
python画条形图的具体代码
2022/04/20 Python