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 特殊字符
Apr 05 Javascript
javascript 当前日期转化为中文的实现代码
May 13 Javascript
XMLHTTP 乱码的解决方法(UTF8,GB2312 编码 解码)
Jan 12 Javascript
window.event快达到全浏览器支持了,以后使用就方便了
Nov 30 Javascript
Jquery的each里用return true或false代替break或continue
May 21 Javascript
Jquery获取当前城市的天气信息
Aug 05 Javascript
Java与JavaScript中判断两字符串是否相等的区别
Mar 13 Javascript
微信小程序本地缓存数据增删改查实例详解
May 24 Javascript
React Native 环境搭建的教程
Aug 19 Javascript
详解Vuex管理登录状态
Nov 13 Javascript
使用jQuery给Table动态增加行、清空table的方法
Sep 05 jQuery
jQuery动态操作表单示例【基于table表格】
Dec 06 jQuery
快速搭建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
印尼林东PWN黄金曼特宁咖啡豆:怎么冲世界上最醇厚的咖啡冲煮教程
2021/03/03 冲泡冲煮
PHP开发负载均衡指南
2010/07/17 PHP
php文件扩展名判断及获取文件扩展名的N种方法
2015/09/12 PHP
JavaScript弹出对话框的三种方式
2016/03/23 Javascript
javascript实现标签切换代码示例
2016/05/22 Javascript
类似于QQ的右滑删除效果的实现方法
2016/10/16 Javascript
Javascript同时声明一连串(多个)变量的方法
2017/01/23 Javascript
浅谈js中用$(#ID)来作为选择器的问题(id重复的时候)
2017/02/14 Javascript
完美解决UI-Grid表格元素中多个空格显示为一个空格的问题
2017/04/25 Javascript
js 简易版滚动条实例(适用于移动端H5开发)
2017/06/26 Javascript
vue-cli如何添加less 以及sass
2017/07/06 Javascript
js实现省市级联效果分享
2017/08/10 Javascript
jQuery实现的简单动态添加、删除表格功能示例
2017/09/21 jQuery
解析Vue.js中的组件
2018/02/02 Javascript
Vue的elementUI实现自定义主题方法
2018/02/23 Javascript
webpack手动配置React开发环境的步骤
2018/07/02 Javascript
详解Nuxt.js部署及踩过的坑
2018/08/07 Javascript
vue里面使用mui的弹出日期选择插件实例
2018/09/16 Javascript
Vue+webpack项目配置便于维护的目录结构教程详解
2018/10/14 Javascript
微信小程序页面上下滚动效果
2020/11/18 Javascript
express中static中间件的具体使用方法
2019/10/17 Javascript
Vue中函数防抖节流的理解及应用实现
2020/04/24 Javascript
python中numpy.zeros(np.zeros)的使用方法
2017/11/07 Python
python自动发邮件库yagmail的示例代码
2018/02/23 Python
Python构建图像分类识别器的方法
2019/01/12 Python
python实现网站微信登录的示例代码
2019/09/18 Python
Python根据服务获取端口号的方法
2019/09/25 Python
Python网络爬虫信息提取mooc代码实例
2020/03/06 Python
如何基于Python Matplotlib实现网格动画
2020/07/20 Python
中国专业的综合网上购物商城:京东
2016/08/02 全球购物
美国名牌手表折扣网站:Jomashop
2020/05/22 全球购物
经典c++面试题二
2015/08/14 面试题
会计专业应届生自荐信
2014/02/07 职场文书
英语课外活动总结
2014/08/27 职场文书
乡镇干部学习心得体会
2016/01/23 职场文书
详解vue身份认证管理和租户管理
2021/05/25 Vue.js