2017-06-07 2 views
2

Weiß jemand, wie ich den alten und neuen Wert innerhalb der Richtlinie bekommen kann? Ich muss vergleichen, ob der Wert geändert wurde, um eine CSS-Klasse hinzuzufügen.Wie kann ich den alten und neuen Wert mithilfe der Direktive in Angular 2 erhalten?

HTML:

<ul> 
    <li *ngFor="let item of list" [addClass]="item.name">{{item.name}}</li> 
</ul> 

Add-class.directive.ts

import { Directive, Input, OnInit } from '@angular/core'; 

@Directive({ 
    selector: '[addClass]' 
}) 

export class AddClassDirective implements OnInit { 
    @Input('addClass') addClass: string; 

    constructor() { 
    } 

    ngOnInit() { 
    console.log(this.addClass); 
    } 

} 

Antwort

3

Methode 1:

ngOnChanges(changes: SimpleChanges) { 
    if (changes['addClass'] && !changes['addClass'].isFirstChange()) { 
    const prev: string = changes['addClass'].previousValue; 
    const cur: string = changes['addClass'].currentValue; 

    // do something with prev and cur 
    } 
} 

Methode 2:

private _addClass: string; 

@Input() set addClass(value: string) { 
    const prev = this._addClass; 
    this._addClass = value; 
    const cur = value; 

    if (typeof prev !== 'undefined') { 
    // do something with prev and cur 
    } 
} 

get addClass() { 
    return this._addClass; 
} 

Beachten Sie, dass diese beiden Methoden auch aufgerufen werden, wenn die Richtlinie zuerst initialisiert wird. In diesen Fällen ist der vorherige Wert undefined (für den Sie in ngOnChanges mit der Methode isFirstChange() testen können).

+0

Dank @dbandstra. Das hat für mich funktioniert. Ich kannte die Abhängigkeit von SimpleChanges nicht. Ich schätze deine Hilfe sehr. –

+0

Sobald ich die Richtlinie erstellt habe, wissen Sie, wann ich sie in meine Komponententests importieren muss? Ich bekomme einen [Fehler] (https://stackoverflow.com/questions/44463088/testing-directive-in-angular-2-jasmine-i-am-getting-an-error). Vielen Dank. –

Verwandte Themen