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 相关文章推荐
精心挑选的15个jQuery下拉菜单制作教程
Jun 15 Javascript
javascript禁制后退键(Backspace)实例代码
Nov 15 Javascript
js call方法详细介绍(js 的继承)
Nov 18 Javascript
鼠标滑在标题上显示图片的JS代码
Nov 19 Javascript
Node.js中使用计时器定时执行函数详解
Aug 15 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
Jul 27 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
Sep 14 Javascript
jQuery Validate表单验证插件 添加class属性形式的校验
Jan 18 Javascript
PHP+jquery+ajax实现分页
Dec 09 Javascript
原生JS仿QQ阅读点击展开、收起效果
Mar 08 Javascript
vue不操作dom实现图片轮播的示例代码
Dec 18 Javascript
基于JS实现操作成功之后自动跳转页面
Sep 25 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使用qr生成二维码的示例分享
2014/01/20 PHP
php根据年月获取季度的方法
2014/03/31 PHP
举例详解PHP脚本的测试方法
2015/08/05 PHP
标准版Eclipse搭建PHP环境的详细步骤
2015/11/18 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
2017/09/16 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
2018/12/08 PHP
FF IE兼容性的修改小结
2009/09/02 Javascript
如何让easyui gridview 宽度自适应窗口改变及fitColumns应用
2013/01/25 Javascript
jquery插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
2013/02/04 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
2014/05/23 Javascript
JS获取iframe中marginHeight和marginWidth属性的方法
2015/04/01 Javascript
nodejs调用cmd命令实现复制目录
2015/05/04 NodeJs
js实现改进的仿蓝色论坛导航菜单效果代码
2015/09/06 Javascript
JS生成不重复的随机数组的简单实例
2016/07/10 Javascript
jQuery中的for循环var与let的区别
2018/04/21 jQuery
关于js陀螺仪的理解分析
2019/04/11 Javascript
详解微信小程序用定时器实现倒计时效果
2019/04/30 Javascript
微信小程序云开发使用方法新手初体验
2019/05/16 Javascript
详解vuex之store源码简单解析
2019/06/13 Javascript
js+springMVC 提交数组数据到后台的实例
2019/09/21 Javascript
node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例
2019/12/23 Javascript
Vue Router 实现动态路由和常见问题及解决方法
2020/03/06 Javascript
Django ManyToManyField 跨越中间表查询的方法
2018/12/18 Python
基于Python+Appium实现京东双十一自动领金币功能
2019/10/31 Python
TripAdvisor土耳其网站:全球知名旅行社区,真实旅客评论
2017/04/17 全球购物
介绍一下Python中webbrowser的用法
2013/05/07 面试题
《要下雨了》教学反思
2014/02/17 职场文书
班级团队活动方案
2014/08/14 职场文书
2014年教师节红领巾广播稿
2014/09/10 职场文书
六查六看心得体会
2014/10/14 职场文书
维稳工作情况汇报
2014/10/27 职场文书
因工资原因离职的辞职信范文
2015/05/12 职场文书
学生退学证明
2015/06/23 职场文书
公司庆典主持词
2015/07/04 职场文书
导游词之日月潭
2019/11/05 职场文书
python 实现图片特效处理
2022/04/03 Python