Jestem nowy w Angular2 i Angular w ogóle i próbuję uzyskać jQuery do ognia po dom jest aktualizowany, gdy dane składnika jest zmieniony. JQuery musi obliczyć wysokości elementów, więc nie mogę dokładnie użyć danych. Niestety wygląda na to, że onAllChangesDone uruchamia się tylko po zmianie danych, a nie w domenie.Jak wywołać funkcję po renderowaniu dom w Angular2
Odpowiedz
Jedyne rozwiązanie, jakie udało mi się znaleźć w haku cyklu życia: ngAfterViewChecked.
Przykład czat gdzie trzeba przewinąć listę wiadomości po dodaniu i renderowania nową wiadomość:
import {Component, AfterViewChecked, ElementRef} from 'angular2/core';
@Component({
selector: 'chat',
template: `
<div style="max-height:200px; overflow-y:auto;" class="chat-list">
<ul>
<li *ngFor="#message of messages;">
{{ message }}
</li>
</ul>
</div>
<textarea #txt></textarea>
<button (click)="messages.push(txt.value); txt.value = '';">Send</button>
`
})
export class ChatComponent implements AfterViewChecked {
public messages: any[] = [];
private _prevChatHeight: number = 0;
constructor (public element: ElementRef) {
this.messages = ['message 3', 'message 2', 'message 1'];
this.elChatList = this.element.nativeElement.querySelector('.chat-list');
}
public ngAfterViewChecked(): void {
/* need _canScrollDown because it triggers even if you enter text in the textarea */
if (this._canScrollDown()) {
this.scrollDown();
}
}
private _canScrollDown(): boolean {
/* compares prev and current scrollHeight */
var can = (this._prevChatHeight !== this.elChatList.scrollHeight);
this._prevChatHeight = this.elChatList.scrollHeight;
return can;
}
public scrollDown(): void {
this.elChatList.scrollTop = this.elChatList.scrollHeight;
}
}
Nie używaj funkcji AfterViewChecked, zamiast tego użyj funkcji AfterViewInit (wywoływanej tylko raz, po pierwszym AfterViewChecked). https://angular.io/guide/lifecycle-hooks –
@NicoToub AfterViewInit czasami jest wywoływana przed skonstruowaniem DOM. Znalazłem użycie funkcji AfterViewChecked z ręcznie obsługiwaną flagą, która zezwala na uruchamianie kodu tylko raz jako jedyna opcja. To nie jest eleganckie, ale działa. –
- 1. Jak wywołać funkcję * po * onPreferenceChange?
- 2. Jak wywołać funkcję po div jest gotowy?
- 3. Jak wywołać funkcję JavaScript w renderowaniu w JSF 1.2/Richfaces 3.3?
- 4. Dyrektywa Angular2: Jak wykryć zmiany DOM
- 5. Angular2 - Dodaj div do DOM
- 6. Jak wywołać funkcję w dyrektywie kątowej po przetworzeniu węzłów podrzędnych?
- 7. Angular 2 Wykonaj skrypt po renderowaniu szablonu
- 8. Jak wywołać funkcję jquery jak w javascript
- 9. Jak wywołać ngOnInit() ponownie w angular2
- 10. Jak wywołać funkcję co 2 minuty w kanale kątowym2?
- 11. Jak mogę wywołać funkcję po tym, jak osoba przestaje pisać?
- 12. CSS działa po renderowaniu strony
- 13. Jak wywołać funkcję członka szablonu?
- 14. jak wywołać operatora jako funkcję w C++
- 15. Jak wywołać funkcję javascript w ZK
- 16. jak wywołać funkcję javascript w górnej ramce?
- 17. Sterownik wyjścia Rails po renderowaniu
- 18. Jak dynamicznie wywołać funkcję TryParse?
- 19. Jak wywołać funkcję javascript po zakończeniu ładowania elementu iframe?
- 20. Jak wywołać funkcję po fadeOut() na wiele elementów
- 21. Jak wywołać funkcję po każdych 15 sekundach używając QT
- 22. Jak wywołać funkcję JavaScript po zakończeniu przejścia "Bootstrap: zwiń wtyczkę"
- 23. wywołać funkcję przed głównym
- 24. Jak wywołać funkcję AWS Lambda w Swift
- 25. jak wywołać funkcję w funkcji plsql
- 26. Jak wywołać funkcję w wtyczce jquery?
- 27. Jak wywołać funkcję Mathematica w programie Matlab?
- 28. Jak wywołać funkcję skalarną w procedurze przechowywanej?
- 29. Jak wywołać wieloznaczną funkcję ogólną w Swift?
- 30. Jak wywołać funkcję znalezioną w innym pliku?
Wiąże się z tym [ „kątowa 2 z jQuery”] (http://stackoverflow.com/questions/30623825/how-to-use-jquery-with-angle2)? Wypróbuj 'setTimeout'. – shmck
@shmck, który wydaje się działać tylko na budowie, potrzebuję czegoś, co pozwoli na uruchomienie funkcji za każdym razem, gdy dane zostaną zmienione, a dom zostanie zaktualizowany. – ComputerWolf
nowe wywołania zwrotne, które zostały dodane w alpha37 https://github.com/angular/angular/blob/2.0.0-alpha.37/CHANGELOG.md Rdzeń: dodano afterContentInit haki afterViewInit i afterViewChecked (d49bc43) , zamyka się # 3897 –