gpt4 book ai didi

Angular 9 : Use component as directive

转载 作者:行者123 更新时间:2023-12-05 01:11:39 26 4
gpt4 key购买 nike

最近在看angular ui框架nebular的源码,对下面的代码有疑问:

@Component({
selector: '[nbMenuItem]',
templateUrl: './menu-item.component.html',
animations: [
...
],
})
export class NbMenuItemComponent implements DoCheck, AfterViewInit, OnDestroy {
@Input() menuItem = <NbMenuItem>null;

@Output() hoverItem = new EventEmitter<any>();
@Output() toggleSubMenu = new EventEmitter<any>();
@Output() selectItem = new EventEmitter<any>();
@Output() itemClick = new EventEmitter<any>();

这应该是一个组件,下面是它的使用方式:

@Component({
selector: 'nb-menu',
styleUrls: ['./menu.component.scss'],
template: `
<ul class="menu-items">
<ng-container *ngFor="let item of items">
<li nbMenuItem *ngIf="!item.hidden"
[menuItem]="item"
[class.menu-group]="item.group"
(hoverItem)="onHoverItem($event)"
(toggleSubMenu)="onToggleSubMenu($event)"
(selectItem)="onSelectItem($event)"
(itemClick)="onItemClick($event)"
class="menu-item">
</li>
</ng-container>
</ul>
`,
})
export class NbMenuComponent implements OnInit, AfterViewInit, OnDestroy {
...
}

我的问题是,为什么nbMenuItem可以作为一个指令,它被@Component注解,为什么?我在 Angular 文档中没有找到任何关于此的信息。

最佳答案

所有组件都是指令,但并非所有指令都是组件。即组件是带有模板的指令。如 angular docs 中所定义

话虽如此,您可以使用 nbMenuItem 作为 DOM 元素的属性的主要原因是 NbMenuItemComponent 的选择器。

通过在选择器周围放置方括号,告知 Angular 如何使用它。在这种情况下,[nbMenuItem] 表示这可以用作 DOM 元素的属性,并且可以用作指令。

关于 Angular 9 : Use component as directive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62807245/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com