@ Directive v / s @Component in Angular
@Component
和@Directive
在Angular之间有什么区别? 他们两个似乎都做同样的任务,并具有相同的属性。
什么是用例以及什么时候更喜欢一个呢?
@Component需要一个视图,而@Directive则不需要。
指令
我将@Directive与选项restrict: 'A'
(指令不限于属性用法)作为Angular 1.0指令进行比较。指令将行为添加到现有DOM元素或现有组件实例。 指令的一个示例用例是记录对元素的点击。
import {Directive} from '@angular/core';
@Directive({
selector: "[logOnClick]",
hostListeners: {
'click': 'onClick()',
},
})
class LogOnClick {
constructor() {}
onClick() { console.log('Element clicked!'); }
}
这将用于如下所示:
<button logOnClick>I log when clicked!</button>
组件
一个组件,而不是添加/修改行为,实际上创建了自己的视图(DOM元素的层次结构)和附加的行为。 一个示例用例可能是联系人卡片组件:
import {Component, View} from '@angular/core';
@Component({
selector: 'contact-card',
template: `
<div>
<h1>{{name}}</h1>
<p>{{city}}</p>
</div>
`
})
class ContactCard {
@Input() name: string
@Input() city: string
constructor() {}
}
这将用于如下所示:
<contact-card [name]="'foo'" [city]="'bar'"></contact-card>
ContactCard
是一个可重复使用的UI组件,我们可以在应用程序中的任何地方使用它,即使在其他组件中也是如此。 这些基本上构成了我们应用程序的UI构建块。
综上所述
当你想用自定义行为创建一组可重用的UI元素时编写一个组件。 当您想编写可重用行为以补充现有的DOM元素时编写指令。
资料来源:
组件
@Component
元数据注释。 @View
装饰器或templateurl模板。 指示
@Directive
元数据注释。 资料来源:
http://www.codeandyou.com/2016/01/difference-between-component-and-directive-in-Angular2.html
组件是一个模板指令,而@Component
装饰器实际上是一个@Directive
装饰器,扩展了模板导向的特性。