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 相关文章推荐
mouse_on_title.js
Aug 25 Javascript
javascript firefox兼容ie的dom方法脚本
May 18 Javascript
刷新页面实现方式总结(HTML,ASP,JS)
Nov 13 Javascript
javascript 设置某DIV区域内的checkbox复选框
Nov 30 Javascript
js改变img标签的src属性在IE下没反应的解决方法
Jul 23 Javascript
jqueryMobile使用示例分享
Jan 12 Javascript
JavaScript 链式结构序列化详解
Sep 30 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
Apr 20 Javascript
解决layui 表单元素radio不显示渲染的问题
Sep 04 Javascript
JS实现扫码枪扫描二维码功能
Jan 03 Javascript
详解微信小程序动画Animation执行过程
Sep 23 Javascript
JavaScript canvas实现跟随鼠标移动小球
Feb 09 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中使用反射技术的架构插件使用说明
2010/05/18 PHP
有关php运算符的知识大全
2011/11/03 PHP
php 无法加载mysql的module的时候的配置的解决方案引发的思考
2012/01/27 PHP
解析wamp5下虚拟机配置文档
2013/06/27 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
2017/08/03 PHP
PHP反射原理与用法深入分析
2019/09/28 PHP
PHP网站常见安全漏洞,及相应防范措施总结
2021/03/01 PHP
js页面滚动时层智能浮动定位实现(jQuery/MooTools)
2011/08/23 Javascript
window.open以post方式将内容提交到新窗口
2012/12/26 Javascript
在表单提交前进行验证的几种方式整理
2013/07/31 Javascript
jQuery自定义事件的简单实现代码
2014/01/27 Javascript
js css3实现图片拖拽效果
2017/03/04 Javascript
JS检测数组类型的方法小结
2017/03/14 Javascript
VSCode 配置React Native开发环境的方法
2017/12/27 Javascript
基于vue.js组件实现分页效果
2018/12/29 Javascript
js页面加载后执行的几种方式小结
2020/01/30 Javascript
JavaScript 面向对象程序设计详解【类的创建、实例对象、构造函数、原型等】
2020/05/12 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
2020/10/29 Javascript
python多线程http下载实现示例
2013/12/30 Python
攻击者是如何将PHP Phar包伪装成图像以绕过文件类型检测的(推荐)
2018/10/11 Python
python实现人工智能Ai抠图功能
2019/09/05 Python
关于Pytorch的MLP模块实现方式
2020/01/07 Python
CSS3中的注音对齐属性ruby-align用法指南
2016/07/01 HTML / CSS
John Hardy官方网站:手工设计首饰的奢侈品牌
2017/07/05 全球购物
伊芙丽官方旗舰店:中国淑女一线品牌
2017/12/01 全球购物
捷克家居装饰及图书音像购物网站:Velký košík
2018/04/16 全球购物
行政前台岗位职责
2013/12/04 职场文书
会计专业职业规划:规划自我赢取未来
2014/02/12 职场文书
社区矫正工作方案
2014/06/04 职场文书
公司委托书怎么写
2014/08/02 职场文书
2014年机关作风建设工作总结
2014/10/23 职场文书
清洁员岗位职责
2015/02/15 职场文书
《大禹治水》教学反思
2016/02/22 职场文书
Python连接Postgres/Mysql/Mongo数据库基本操作大全
2021/06/29 Python
golang实现一个简单的websocket聊天室功能
2021/10/05 Golang
Python进程间的通信之语法学习
2022/04/11 Python