2016-08-23 9 views
6

W Angular 1.x mogę użyć. $ Watch, aby obejrzeć wszystko, co chciałem, jednak w Angular 2 mamy ngOnChanges, który jest naprawdę fajny i wydajne, ale tylko wejścia zegarki i dekoratory wyjściowe. Jednak od czasu do czasu naprawdę muszę oglądać lokalne nieruchomości, aby móc emitować wydarzenie po ich zmianie. Pamiętam, jak zobaczyłem artykuł wyjaśniający, w jaki sposób można wyraźnie powiedzieć Angularowi 2, aby obejrzał jedną właściwość, ale dla mojego życia nie mogę już znaleźć tego artykułu i każde wyszukanie, które właśnie zrobiłem, po prostu mówi mi, żebym używał dekoratorów wejścia/wyjścia z onChanges. Jak mogę utworzyć obserwatora dla @ViewChild lub innych właściwości lokalnych?Angular 2 watch składnik właściwości dla zmian bez @ Input lub @ Output

Na przykład mam ngForm, że gdy jego stan weryfikacji zmienia się z poprawnego na niepoprawny lub vice versa, chcę wysłać stan do innego komponentu, aby mógł zareagować. Jednak ponieważ mój ngForm to @ViewChild a nie @Input lub @Output ngOnChanges nie wykrywa zmiany.

Odpowiedz

11

Odpowiednikiem niestandardowego Angular 1 $watch() w Angular 2 jest wykonanie haka cyklu życia ngDoCheck() i wykonanie własnych sprawdzeń. Przewodnik deweloperów Lifecycle Hooks ma an example.

Należy pamiętać, że twoja metoda ngDoCheck() będzie wywoływana za każdym razem, gdy uruchomi się wykrywanie zmian (podobnie jak zegarek Angular 1), więc upewnij się, że jest on wdrożony tak wydajnie, jak to tylko możliwe.

Spróbuj użyć RxJS (Obserwowalny, Temat itp.), Jeśli to możliwe, ponieważ jest bardziej wydajny. Mamy used to be able to subscribe to the NgForm's ControlGroup to be notified of changes, ale nie wiem, czy to wciąż jest dostępne.

+1

Co powiesz na NgModelChange? – Toolkit

Powiązane problemy