Angular中的@Component和@Directive有什么区别? 它们似乎都做同样的任务,具有相同的属性。
用例是什么,什么时候选择一个而不是另一个?
Angular中的@Component和@Directive有什么区别? 它们似乎都做同样的任务,具有相同的属性。
用例是什么,什么时候选择一个而不是另一个?
当前回答
简单的回答
组件:一个主要的构建块,用于添加一些DOM元素/Html。
指令:用于在DOM元素/HTML中添加一些表达式、条件和循环。
其他回答
这是Angular 13的最新更新
@Component只是@Directive的一个子类。在深入研究这个问题之前,我们必须了解什么是@Directive…
@Directive是一个装饰器,用于指示DOM添加新元素或删除或修改现有元素。因此,无论何时Angular遇到任何装饰器,它都会在运行时处理它们,并根据它们修改DOM。
我们可以使用@Directive创建我们的指令,如下所示
@Directive({
selector: '[demoButtonColor]'
})
export class DemoButtonColorDirective {
constructor(private elementRef: ElementRef) { };
ngOnInit() {
this.elementRef.nativeElement.style.backgroundColor = 'red';
}
}
在HTML中使用
<button demoButtonColor>RED BUTTON</button>
现在让我们看看什么是@Component decorator
@Component是@Directive的一个子类,有一个额外的功能。使用@Component,我们可以创建HTML模板,它可以在运行时注入到DOM中。
@Component({
selector: 'demo-color',
template: '<h1>Hello There!</h1>'
})
class DemoColorComponent {}
我们可以在任何其他组件中重用它,如下所示
<div>
<demo-color></demo-color>
</div>
要将其包装起来,使用@Directive创建一个可用于修改DOM元素或结构的自定义指令。如果你想创建具有自定义行为的可重用UI组件,请使用@Component。
如果你参考官方的angular文档
https://angular.io/guide/attribute-directives
Angular中有三种指令:
组件——带有模板的指令。 结构指令——通过添加和删除DOM元素来改变DOM布局。如* ngIf 属性指令——改变元素、组件或其他指令的外观或行为。如[ngClass]。
随着应用程序的增长,我们发现很难维护所有这些代码。出于可重用的目的,我们在智能组件和哑组件中分离了逻辑,并使用指令(结构或属性)在DOM中进行更改。
组件是一个带有模板的指令,@Component装饰器实际上是一个@Directive装饰器,它扩展了面向模板的特性。
简单的回答
组件:一个主要的构建块,用于添加一些DOM元素/Html。
指令:用于在DOM元素/HTML中添加一些表达式、条件和循环。
在编程环境中,指令为编译器提供指导,以改变它处理输入的方式,即改变某些行为。
指令允许你将行为附加到DOM中的元素上。
指令分为3类:
属性 结构 组件
是的,在Angular 2中,组件是一种指令。 据医生说,
“Angular组件是指令的一个子集。与指令不同,组件总是有一个模板,并且模板中的每个元素只能实例化一个组件。”
Angular 2组件是Web组件概念的实现。Web组件由几个独立的技术组成。您可以将Web组件看作是使用开放Web技术创建的可重用用户界面小部件。
在摘要指令中,我们将行为附加到DOM中的元素的机制,包括结构化的, 属性和组件类型。 组件是特定类型的指令,允许我们 利用web组件功能即可重用性- 封装的、可重用的元素可在整个应用程序中使用。