我正在使用指令來獲取clickevent。如何通過在app.module中指定它來使用自定義指令?
我的指令是
import { Directive, ElementRef, Output, EventEmitter, HostListener } from '@angular/core';
@Directive({
selector: '[clickOutside]'
})
export class ClickOutsideDirective {
constructor(private _elementRef: ElementRef) {
}
@Output()
public clickOutside = new EventEmitter<MouseEvent>();
@HostListener('document:click', ['$event', '$event.target'])
public onClick(event: MouseEvent, targetElement: HTMLElement): void {
if (!targetElement) {
return;
}
const clickedInside = this._elementRef.nativeElement.contains(targetElement);
if (!clickedInside) {
this.clickOutside.emit(event);
}
}
}
,當我在裏面inventry.module.ts使用它(對於inventry頁)它工作正常,
在inventry.module.ts我只是添加到聲明中。
@NgModule({
imports: [BrowserModule, RouterModule, FormsModule, ToastModule, DropdownModule, DatepickerModule, PaginationModule],
declarations: [ClientPurchaseOrderComponent, ClientPurchaseOrderAddComponent,ClickOutsideDirective ],
exports: [ClientPurchaseOrderComponent, ClientPurchaseOrderAddComponent, RouterModule]
})
它工作正常,我想要的是如果我需要在每個模塊中使用它。所以我試圖在app.module.ts我添加指令,而不是在每個模塊,但它不工作,甚至沒有給出任何錯誤?
@NgModule({
imports: [
BrowserModule,
HttpModule,
FormsModule,
ReactiveFormsModule,
RouterModule.forRoot(routes),
InventoryModule,
LoginModule,
SharedModule.forRoot(),
ToastModule.forRoot(),
DropdownModule.forRoot(),
ModalModule.forRoot(),
PaginationModule.forRoot(),
DatepickerModule.forRoot()
],
declarations: [AppComponent,ClickOutsideDirective],
providers: [AuthGuard, LoaderService, HttpBaseService, UIService, SettingService],
bootstrap: [AppComponent],
exports:[]
})
如何全球化角2中的指令而不添加每個模塊?
我可以添加一個sahredmodule,並聲明:[ClickOutsideDirective],這應該在每個模塊,我想使用? –
並輸出:[ClickOutsideDirective]'。是的,只要您在這些模塊中導入SharedModule即可。 – estus
無法從SharedModule導出指令ClickOutsideDirective,因爲它既沒有聲明也沒有導入!得到這個錯誤 –