gpt4 book ai didi

javascript - 用另一个指令包装 Angular 2+ 指令

转载 作者:行者123 更新时间:2023-12-03 00:27:20 26 4
gpt4 key购买 nike

我试图通过创建一个指令来减少我的(Angular 7)应用程序中的困惑,该指令采用一组简化的参数(例如用户 ID)并显示 ng-bootstrap 弹出窗口。

我希望该指令的工作方式尽可能与普通 ng-bootstrap 弹出窗口类似,只不过它是使用自定义指令创建的。我知道我可以对组件执行类似的操作,但我计划在足够多的不同元素上使用此指令,这是不可行的。

是否可以在 Angular 2+ 中包装这样的指令,如果可以,实现这一点的最佳方法是什么?

I've created a StackBlitz with what I've created so far here:

import { Directive, ElementRef, OnInit, Input } from '@angular/core';

@Directive({
selector: '[app-custom-directive]'
})
export class CustomDirective implements OnInit {
private element: HTMLInputElement;


@Input() parameter: string = 'Parameter';

constructor(private elRef: ElementRef) {
this.element = elRef.nativeElement;
}

ngOnInit() {
this.element.onclick = () => {
alert('This should open a popover containing the directive parameter "' + this.parameter + '". But how?')
};
}

}

最佳答案

1)首先,你不应该这样做

this.element.onclick = () => {

改用@HostListener。这是以 Angular 方式监听指令中 Angular 事件的方式。

2)您确实需要一个组件,其中包含您需要的指令和输入。

3)我不知道它是否有效,但您至少可以尝试扩展 NgbPopover 指令:

  export class CustomDirective extends NgbPopover {
// private element: HTMLInputElement;

constructor(
private _elementRef: ElementRef<HTMLElement>,
private _renderer: Renderer2,
injector: Injector,
componentFactoryResolver: ComponentFactoryResolver,
viewContainerRef: ViewContainerRef,
config: NgbPopoverConfig,
private _ngZone: NgZone,
@Inject(DOCUMENT) private _document: any
) {
super(_elementRef, _renderer, injector, componentFactoryResolver, viewContainerRef, config, _ngZone, _document);
}

关于javascript - 用另一个指令包装 Angular 2+ 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54028989/

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