Error
Template parse errors:
Can't bind to 'time-delta' since it isn't a known property of 'p'.
Solution in documentation
I have to add the Directive to declarations array. I've done this already.
Now my architecture: I have three Modules:
The AppModule:
@NgModule({
imports: [
TimeModule,
BrowserModule,
FormsModule,
AuthModule,
routing,
],
declarations: [
AppComponent
],
providers: [
appRoutingProviders
],
bootstrap: [AppComponent]
})
AuthModule:
@NgModule({
imports: [
BrowserModule,
FormsModule,
authRouting
],
declarations: [
AuthComponent,
LoginComponent,
SignupComponent,
LogoutComponent
],
providers: [
AuthGuard,
AuthService
],
bootstrap: [ LoginComponent ]
})
TimeModule:
@NgModule({
declarations: [
ReadableDatePipe,
TimeDeltaDirective
]
})
And now I am trying to use my TimeDeltaDirective in a view of LoginComponent. And I already tried to add the directive to the other declarations arrays as well, but this won't work either.
I am thankful for any support! Thanks
TimeDeltaDirective:
import { Directive, ElementRef, Input, Renderer } from '@angular/core';
@Directive({ selector: '[time-delta]' })
export class TimeDeltaDirective {
constructor(renderer: Renderer, el: ElementRef) {
function getTimeDelta(date: Date) {
var now = new Date();
return (now.getTime() - date.getTime()) / 1000;
}
this.delta = getTimeDelta(new Date(this.date));
}
@Input('date') date: string;
delta: number;
}
usage in LoginComponent (example):
@Component({
selector: 'login',
template: `
<p date="2016-09-28 00:00:00" [time-delta]>{{delta}}</p>
`
})
Angular provides many built-in Attribute Directives like NgStyle, NgClass, etc. We can also create our own custom Attribute Directives for our desired functionality.
The ngModel directive, which implements two-way data binding, is an example of an attribute directive. ngModel modifies the behavior of an existing element by setting its display property and responding to the changing events.
The attribute directive changes the appearance or behavior of a DOM element. These directives look like regular HTML attributes in templates. The ngModel directive which is used for two-way is an example of an attribute directive.
You need to export TimeDeltaDirective
from your TimeModule
and then import TimeModule
in your AuthModule
because your LoginComponent
is decalred there, and that's where you want to use your directive. This way, TimeDeltaDirective
will be available for use in LoginComponent
, as well as in other declared components of AuthModule
. So, it should be something like this:
AuthModule
@NgModule({
imports: [
BrowserModule,
FormsModule,
authRouting,
TimeModule
],
declarations: [
AuthComponent,
LoginComponent,
SignupComponent,
LogoutComponent
],
providers: [
AuthGuard,
AuthService
],
bootstrap: [ LoginComponent ]
})
TimeModule
@NgModule({
declarations: [
ReadableDatePipe,
TimeDeltaDirective
],
exports: [
TimeDeltaDirective
]
})
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With