2018年7月9日
Angular的组件架构
角拥抱反应性编程,其中组件知道如何对用户点击或数据更新等外部事件做出反应。通过使用数据绑定,您可能已经熟悉了这一点:当组件的数据模型发生变化时,组件会立即刷新并呈现更新后的HTML。 p >
考虑到这一点,我们如何才能有一个有利于代码重用的组件体系结构,并阐明数据如何在应用程序中流动? p >
好消息是,有一个简单的模式可以遵循。它依赖于两种不同的组件: p >
- 容器组件(或“智能”组件)知道如何获取数据并使用服务
- 表示组件(又称为“笨”或“懒”组件),必须向它们提供数据
例子
@ component({…})
出口类StoreViewComponent {盘子:可见< LicensePlate [] >;
构造函数(私人plateService: LicensePlateService,
私人cartService: CartService) {
这.盘子=plateService.getAllPlates ();
}addToCart(plate: LicensePlate) {
这.cartService.addToCart(板)
.subscribe (() = >警报(的板${板。标题}添加到购物车”));
}
}
以上就是一个例子容器组件.该组件注入服务来加载一些数据。 p >
它的模板实例化了两个不同的表象的组件: p >
<ngs-jumbotrontitle="欢迎光临我们的商店" description="浏览我们收集的车牌下面">ngs-jumbotron><ngs-license-plate * ngFor =“让板盘子|异步”。(板)= "板”(onButtonClick) =“addToCart (美元的事件)" buttonText="添加到购物车»">ngs-license-plate>
容器组件是“聪明的”,因为他们是使用服务获取数据并实现业务逻辑的人。它们实例化子组件并将数据传递给它们。这样的组件在整个应用程序中通常只有一个实例。它们很少被重用,因为它们与使用它们的上下文绑定在一起。 p >
现在有一个例子表示组件: p >
@ component({…})
出口类LicensePlateComponent {@Input ()
板: LicensePlate;@Input ()
buttonText:字符串;@Output ()
onButtonClick=新EventEmitter < LicensePlate > ();
}
表示组件不知道任何服务。它们是纯粹的、简单的UI组件,只需要一些输入数据来呈现。按钮、选项卡、标题、表都是非常适合用作表示组件的。 p >
现在该组件的HTML模板: p >
< h2 >{{plate.title}}< / h2 >
< img src = "{{plate.picture}}“阶级= " img-fluid " >
< p >{{plate.description}}< / p >
< div >
< h2 class = "就是说浮动" > ${{plate.price}}< / h2 >
<按钮的作用= "按钮(点击)= " onButtonClick.emit(板)”>
{{buttonText}}
< / >按钮
< / div >
表示组件实际上只是一个用数据填充的HTML模板。这些组件通常在应用程序中是可重用的。 p >
一个典型的组件架构来说明这一点: p >
换句话说,容器组件从服务中获取数据,并将其传递给它们的子表示组件@Input ()或者数据绑定。 p >
表示组件可以在重要事件发生时(例如单击)通知它们的父容器组件,并且该容器组件实现了相应的任务以被触发(例如服务调用)。 p >
这样,表示组件就完全独立于它们的运行时上下文,这使得它们可以重用。他们不知道在哪里使用模板,也不知道为什么要使用,他们唯一的目标就是正确地渲染模板。 p >
我叫betway必威滚球.我是公司的创始顾问和培训师角训练在那里我帮助开发人员学习并熟练使用Angular。 p >
我还发表了"Angular入门,如果你是Angular的新手,想要在几个小时内学习所有的基础知识,这是一个完美的视频课程。 p >
如果你喜欢这篇文章,请推荐并分享!谢谢你的时间。 p >