Как создать директиву, которая должна окрашивать и отображать введенное числовое значение. Важная часть - это директива по обнаружению изменений и реагированию на изменение входного значения.Угловая 2: Директива по окрашиванию и отображению числовых данных
Вот мой пример кода:
//our root app component
import {Directive, Component, NgModule, Input, OnInit, OnDestroy, ElementRef} from '@angular/core'
import {BrowserModule} from '@angular/platform-browser'
@Component({
selector: 'my-app',
template: `
<div>
<h2>Hello {{name}}</h2>
<h2>Random number: <span my-value [value]="num"></span></h2>
</div>
`,
})
export class App implements OnInit, OnDestroy {
name: string;
num: number = 100;
private interval: any;
constructor() {
this.name = 'Angular2';
}
ngOnInit() {
this.interval = setInterval(() => {
this.num = this.getRandomInt(-100, 100);
}, 1000);
}
ngOnDestroy {
clearInterval(this.interval);
}
private getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
}
@Directive ({
selector: '[my-value]'
})
export class MyValueDirective {
@Input() value: number;
constructor(private el: ElementRef) {
}
ngOnInit(): void {
if (this.value < 0) {
this.el.nativeElement.style.color = 'red';
} else {
this.el.nativeElement.style.color = 'blue';
}
this.el.nativeElement.innerHTML = this.value;
}
}
@NgModule({
imports: [ BrowserModule ],
declarations: [ App, MyValueDirective ],
bootstrap: [ App ]
})
export class AppModule {}
Спасибо!
Спасибо! Это работает! –
Несомненно. Я также добавил предложение использовать одно и то же имя для 'selector' AND' @Input() '. – AngularChef
Это очень полезно. Спасибо! –