wird angenommen, dass ich die folgende Direktive haben:Call-Methode nach Ansicht (DOM) aktualisiert (in Angular 2)
import {Directive, Input, OnChanges } from '@angular/core'
@Directive({
selector: 'select[my-select]'
})
export class NbSelect implements OnChanges {
@Input() ngModel;
constructor() {
}
ngOnChanges(changes) {
doSomeStuffAfterViewIsUpdated();
}
doSomeStuffAfterViewIsUpdated() {
console.log(jQuery('select[my-select]').val()); // this should write the new value
}
}
Ich verwende es in irgendwo in einer Vorlage: ...<select my-select [(ngModel)]="someReference">...
Bei einigen Punkt ändere ich den Wert von someReference in einer Komponente: someReference = "newValue"
Was jetzt geschieht: die doSomeStuffAfterViewIsUpdated Funktion vor dem DOM aktualisiert wird aufgerufen. Das bedeutet, dass die Konsole den alten Wert der Auswahl anzeigt.
Was ich will: Die doSomeStuffAfterViewIsUpdated Funktion sollte aufgerufen werden, nachdem das DOM von eckigen aktualisiert wurde, so dass die Konsole den "newValue" zeigt.
Was sollte ich anstelle von ngOnChanges verwenden, damit es funktioniert wie ich will?
Bitte beachten Sie, dass die wichtige Sache hier ist, dass der Code nach dem DOM-Update laufen sollte. Die Frage ist nicht, wie ich auf den neuen Wert des Elements zugreifen kann.
Thx!
Warum machen Sie das nicht einfach zu einer Komponente? Warum mischen Sie auch in jQuery so ein? Angular verfügt über eine eigene Funktionalität für die DOM-Manipulation. – jonrsharpe
jQuery soll zeigen, dass wir eine Nachbearbeitung durch eine unabhängige Bibliothek durchführen wollen. Warum sollte das Problem gelöst werden, wenn statt einer Richtlinie eine Komponente verwendet wird? – Burnee
Ist das, was Sie wollen, ngAfterViewChecked? https://angular.io/docs/ts/latest/guide/lifecycle-hooks.html – wannadream