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 AspxButton的客户端操作
Jun 26 Javascript
javascript function调用时的参数检测常用办法
Feb 26 Javascript
解决jQuery插件tipswindown与hintbox冲突
Nov 05 Javascript
基于jquery的内容循环滚动小模块(仿新浪微博未登录首页滚动微博显示)
Mar 28 Javascript
Javascript设计模式之观察者模式的多个实现版本实例
Mar 03 Javascript
JS+DIV+CSS排版布局实现美观的选项卡效果
Oct 10 Javascript
详解JavaScript中常用的函数类型
Nov 18 Javascript
基于JS递归函数细化认识及实用实例(推荐)
Aug 07 Javascript
vue实现tab切换外加样式切换方法
Mar 16 Javascript
如何能分清npm cnpm npx nvm
Jan 17 Javascript
JavaScript数组去重的几种方法
Apr 07 Javascript
JavaScript canvas基于数组生成柱状图代码实例
Mar 06 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
全国FM电台频率大全 - 25 云南省
2020/03/11 无线电
PHP 简易输出CSV表格文件的方法详解
2013/06/20 PHP
php+html5使用FormData对象提交表单及上传图片的方法
2015/02/11 PHP
javascript+php实现根据用户时区显示当地时间的方法
2015/03/11 PHP
PHP实现图片压缩
2020/09/09 PHP
jquery 输入框数字限制插件
2009/11/10 Javascript
Jquery 表格合并的问题分享
2011/09/17 Javascript
广泛收集的jQuery拖放插件集合
2012/04/09 Javascript
让新消息在网页标题闪烁提示的jQuery代码
2013/11/04 Javascript
jquery单选框radio绑定click事件实现方法
2015/01/14 Javascript
html的DOM中Event对象onblur事件用法实例
2015/01/21 Javascript
JavaScript实现动态删除列表框值的方法
2015/08/12 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
2015/10/15 Javascript
JSON字符串转换JSONObject和JSONArray的方法
2016/06/03 Javascript
妙用Bootstrap的 popover插件实现校验表单提示功能
2016/08/29 Javascript
利用jquery给指定的table动态添加一行、删除一行的方法
2016/10/12 Javascript
详解微信小程序 页面跳转 传递参数
2016/12/08 Javascript
COM组件中调用JavaScript函数详解及实例
2017/02/23 Javascript
xmlplus组件设计系列之下拉刷新(PullRefresh)(6)
2017/05/03 Javascript
详解js正则表达式验证时间格式xxxx-xx-xx形式
2018/02/09 Javascript
小程序实现留言板
2018/11/02 Javascript
Vue 引入AMap高德地图的实现代码
2019/04/29 Javascript
vue多个元素的样式选择器问题
2019/11/29 Javascript
python if not in 多条件判断代码
2016/09/21 Python
对python 生成拼接xml报文的示例详解
2018/12/28 Python
基于python3 的百度图片下载器的实现代码
2019/11/05 Python
pytorch模型预测结果与ndarray互转方式
2020/01/15 Python
CSS3制作半透明边框(Facebox)类似渐变
2012/12/09 HTML / CSS
联想西班牙官网:Lenovo西班牙
2018/08/28 全球购物
雷曼兄弟的五金店:Lehman’s Hardware Store
2019/04/10 全球购物
食品行业求职人的自我评价
2014/01/19 职场文书
人力资源经理的岗位职责
2014/03/02 职场文书
家长对老师的感言
2014/03/11 职场文书
关于学习的决心书
2015/02/05 职场文书
关于环保的广播稿
2015/12/17 职场文书
关于MybatisPlus配置双数据库驱动连接数据库问题
2022/01/22 Java/Android