Reputation: 159
I'm trying to write a directive for preventing the default behavior. Here's the code
import { Directive, HostListener } from '@angular/core';
@Directive({
selector: '[app-event-blocker]',
})
export class EventBlockerDirective {
@HostListener('drop', ['$event'])
@HostListener('dragover', ['$event'])
public handleEvent(event: Event) {
event.preventDefault();
}
}
Then i import it in shared module, declare it, and export
import { NgModule } from '@angular/core';
import { EventBlockerDirective } from './directives/event-blocker.directive';
@NgModule({
declarations: [
ModalComponent,
EventBlockerDirective,
],
imports: [CommonModule],
exports: [
EventBlockerDirective,
],
})
export class SharedModule {}
And then import it in Video module, where i use it
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { SharedModule } from '../shared/shared.module';
@NgModule({
declarations: [],
imports: [CommonModule, SharedModule],
})
export class VideoModule {}
Then i use it in Video component
<div app-event-blocker>
<h5>Drop your file here (mp4 only!)</h5>
</div>
But when i drop file in the box, it opens it in browser instead of not doing anything. When i add event handlers and prevent default behavior there it works, but i want to do it with directive. I'd appreciate if you could help me understand what is wrong with it. Full code can be found in the github repo
Upvotes: 0
Views: 243
Reputation: 1517
Directive that provides attribute app-event-blocker is out of the current Angular module's scope
UploadComponent
doesn't belong to VideoModule
and declared in AppModule
.
So you should import SharedModule
in AppModule
.
Upvotes: 1