То, чего я пытаюсь добиться, - это расширить директиву ngbPopover и обернуть в пользовательскую директиву все эти свойства, поэтому вместо того, чтобы показывать их просто для включения моей директивы.
Например, я использую ngbpopover следующим образом:
<button
type="button"
class="btn btn-primary mb-4"
placement="right-top"
[ngbPopover]="popOver"
popoverClass="popover-custom"
#popOverRef="ngbPopover"
triggers="manual"
[autoClose]="false"
(click)="popOverRef.toggle()"
(hidden)="onPopoverClose(options)"
>
Standard Picker
</button>
<ng-template #popOver>
<popover [data]="options" [popover]="popOverRef"><popover>
</ng-template>
Моя цель в конце состоит в том, чтобы иметь что-то вроде:
<button type="button" class="btn btn-primary mb-4" customDirective></button>
, чтобы все эти операции обрабатывались внутри customDirective. Попытка расширить ngbPopoverDirective как код ниже, но я изо всех сил, чтобы показать поповер с этим подходом. Это выполнимо или какая-то другая идея?
Пользовательская директива:
import {
Directive,
ElementRef,
Renderer2,
Injector,
ComponentFactoryResolver,
ViewContainerRef,
NgZone,
Inject,
ChangeDetectorRef,
ApplicationRef,
Input,
OnInit,
} from '@angular/core';
import { NgbPopover, NgbPopoverConfig } from '@ng-bootstrap/ng-bootstrap';
import { DOCUMENT } from '@angular/common';
@Directive({
selector: '[popover]'
})
export class PopoverDirective extends NgbPopover implements OnInit {
@Input()
popover: string;
config: NgbPopoverConfig = {
autoClose: false,
placement: 'right-top',
triggers: "manual",
container: 'body',
disablePopover: false,
popoverClass: 'popover-custom',
openDelay: 0,
closeDelay: 0
}
constructor(
_elementRef: ElementRef<HTMLElement>,
_renderer: Renderer2,
injector: Injector,
componentFactoryResolver: ComponentFactoryResolver,
viewContainerRef: ViewContainerRef,
config: NgbPopoverConfig,
_ngZone: NgZone,
@Inject(DOCUMENT) _document: any,
_changeDetector: ChangeDetectorRef,
applicationRef: ApplicationRef
) {
super(
_elementRef,
_renderer,
injector,
componentFactoryResolver,
viewContainerRef,
config,
_ngZone,
_document,
_changeDetector,
applicationRef
);
console.log("here");
}
ngOnInit() {
console.log("onInit")
}
}