Czy jest jakiś sposób w Angular2, aby zdarzenie zostało wywołane, gdy mój komponent stanie się widoczny? Jest on umieszczony w tabControl i chcę otrzymać powiadomienie, gdy użytkownik się przełącza Chciałbym, aby mój komponent wywołał zdarzenie.Zdarzenie, gdy składnik staje się widoczny
Odpowiedz
Co w końcu zrobiłem (co nie jest piękne, ale działa, gdy nie mam lepszego sposobu na zrobienie tego ...), należy użyć wywołania zwrotnego ngAfterContentChecked()
i samodzielnie obsłużyć zmianę.
@ViewChild('map') m;
private isVisible: boolean = false;
ngAfterContentChecked(): void
{
if (this.isVisible == false && this.m.nativeElement.offsetParent != null)
{
console.log('isVisible switched from false to true');
this.isVisible = true;
this.Refresh();
}
else if (this.isVisible == true && this.m.nativeElement.offsetParent == null)
{
console.log('isVisible switched from true to false');
this.isVisible = false;
}
}
Można użyć ngAfterViewInit()
zwrotnego
https://angular.io/docs/ts/latest/guide/lifecycle-hooks.html
to nie pasuje do moich potrzeb, umieściłem log wewnątrz tego wywołania zwrotnego i jest wywoływana tylko raz (niezależnie od tego, czy mój komponent jest widoczny czy nie) – Shimrod
Angular nie ma możliwości sprawdzenia, kiedy komponent staje się widoczny, jeśli jest ukryty za innym elementem DOM .. Jeśli użyjesz '* ngIf =" "' do pokazania/ukrycia, a następnie komponentu, gdy zakładka jest zaznaczona lub odznaczona, wtedy 'ngAfterViewInit()' jest wywoływana za każdym razem –
Nie ma takiego zdarzenia, ale jeśli używasz formantu karty, właściwy sposób to zrobić byłoby utworzyć zmianę zakładki @Output
dla kontrolka na karcie, jeśli jest niestandardowa, w przeciwnym razie większość elementów sterujących na karcie (takich jak ng-bootstrap) również ma pewne zdarzenia związane z wymianą kart.
Jeśli Twój komponent musi być tego świadomy, możesz użyć tego zdarzenia zmiany karty, aby wykryć, która karta jest widoczna, a jeśli wiesz, która karta jest widoczna, wiesz również, czy Twój składnik jest widoczny, czy nie. Więc można zrobić coś takiego:
onTabChange(event) {
this.currentTab = /** Get current tab */;
}
a następnie można przesłać go do siebie komponentu jeśli masz wejście:
@Input() activated: boolean = false;
a następnie można zastosować go z:
<my-component [activated]="currentTab == 'tabWithComponent'"></my-component>
Teraz można posłuchać OnChanges
, aby sprawdzić, czy wartość modelu activated
została zmieniona na true
.
Można również byłaby to skorzystać z usługi z Observable
tak:
@Injectable()
export class TabService {
observable: Observable<any>;
observer;
constructor() {
this.observable = Observable.create(function(observer) {
this.observer = observer;
});
}
}
Kiedy składnikiem chce słuchać tych zmian, może zapisać się do tabService.observable
. Gdy twoja karta się zmieni, możesz przesłać do niej nowe elementy za pomocą tabService.observer.next()
.
To świetny pomysł, jednak nie działam w moim przypadku ponieważ tabcontrol którego używam jest z primeng i dostarczają tylko zdarzenia na zmianie karty _ zanim książka się zmieniła>> mój komponent nie jest widoczny w tej chwili ... – Shimrod
- 1. pyqt: odbiera sygnał, gdy widget staje się widoczny/ukryty
- 2. JS: detektor zdarzeń, gdy element staje się widoczny?
- 3. UITextField staje się pierwszym respondentem, gdy widok staje się widoczny, ale nie chcę tego do
- 4. | - (20) - Ograniczenie [UIInputSetContainerView łamie się, gdy pasek stanu wezwania staje się widoczny
- 5. Zdobądź zdarzenie, gdy element ListView jest widoczny lub nie
- 6. Elementy elastyczne nie kurczą się, gdy okno staje się mniejsze
- 7. Zdarzenie Fire RxJava zmienia się tylko wtedy, gdy Fragment jest widoczny w ViewPager
- 8. NavigateUrl = "#" staje się href = "SubFolder/#"?
- 9. jQuery - Zdarzenie, gdy atrybut węzła zmienia się
- 10. Jakieś kryteria, gdy $ 0 skryptu Perla staje się puste?
- 11. Gdy wątek roboczy działa, interfejs użytkownika staje się niestabilny.
- 12. Dlaczego łańcuch zostaje okaleczony, gdy staje się "tym"?
- 13. Kursor Firefox jest niewidoczny, staje się widoczny po kliknięciu czegokolwiek innego.
- 14. Składnik menu nie wyświetla się
- 15. Zdarzenie ogniowe JavaScript, gdy DIV jest w widoku
- 16. Kiedy funkcja @ staje się przydatna?
- 17. Kiedy oprogramowanie staje się "zastrzeżone"?
- 18. atrybut danych staje się całkowitą
- 19. Kompilator TypeScript staje się wolny?
- 20. Żądanie POST staje się GET
- 21. Zdarzenie, gdy window.location.href zmienia
- 22. QWidget :: mapToGlobal(), gdy widget nie jest widoczny
- 23. Tło kółka Androida staje się owalne.
- 24. wersja Zgromadzenie „0,001" staje się” 0,1"
- 25. Datepicker widoczny błąd?
- 26. Jak rysować przezroczyste linie, w których kolor staje się silniejszy, gdy się nakładają?
- 27. Zmienna statyczna Java staje się pusta
- 28. ActionBar ukrywa się, gdy pojawia się klawiatura
- 29. HttpWebRequest.GetResponse() staje się coraz timed out
- 30. C#: utwórz zdarzenie, gdy zmieni się wartość pola obiektu.
Jeśli jest to zaimplementowane sterowanie kartą, z pewnością można dodać emitera zdarzeń i emitować w tym samym miejscu, w którym zmienia się zakładkę? – Seer
Używam kontrolki zakładki primeng, a jedyne zdarzenie, które istnieje, jest wywoływane przed zmianą, więc kontrola nie jest jeszcze widoczna w tym czasie :( – Shimrod