Wpis z mikrobloga

#programowanie #typescript #angular #webdev Cześć Mirki pytanie z typescripta. Mam napisaną tam funkcje którą chciałbym jednorazowo wywołać w widoku html. Jednak wywołanie jej z poziomu html poprzez {{Func(args)}} powoduje ze wywoluje sie ona 6 razy a nie jeden raz. Przy użyciu przykładowo eventu (click) wywoluje sie prawidlowo, jeden raz. Jakies rady?
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@DrizztDoUrden: problem jest po stronie parsera danych. Wygląda jak byś po prostu 6 razy parsował funkcje.{{Func(args)}} i wyświetlał wynik. Bez kodu ciężko będzie pomóc.

Spróbuj zmienić umiejscowienie funkcji która przetwarza dane. Bo może być tak ze np parser jest wczytwany w 6 różnych plikach potrzebnych do wygenerowania strony.
  • Odpowiedz
@tlaziuk: Z tym ze funkcja wywołuje sie w tabeli, jako podsumowanie kilku kolumn. Wiec duzo wygodniej wywoływać ją z poziomu html, gdzie mam odrazu dostep do odpowiednich argumentów. Nie ma sposobu zeby ta funkcja wywolala sie jednokrotnie przy przeladowaniu strony ale z wywolaniem z poziomu html?
  • Odpowiedz
@tlaziuk: Próbowałem jakimiś warunkami, ale lecą wyjątki związane z odświeżeniem wartości. Dana wartość zmienia się szybciej niż poprzednia zostanie validowana i wyjątek. Zna ktoś może jakiś sposób na obejście tego?
  • Odpowiedz
@DrizztDoUrden
Jak Ci wali error Expression has been changed.... to możesz wykonanie tego kodu opakować w setTimeout(tutajTwojaFunkcja, 0).

To jest naturalne, że Twoja funkcja w bindingu {{ }} woła się kilkukrotnie. Angular z każdym uruchomieniem systemu detekcji odswieża bindingi na widoku, więc dzieje się to wiele razy. Wylicz sumę wartości raz i umieść tam już pole ze sumą, niech ta suma jest polem klasy.

Jeśli to jest jakaś dynamiczna tabelka to
  • Odpowiedz
@DrizztDoUrden: duzo wygodniej, ale cos nie idzie? Trochę sobie przeczysz. Posluchaj kolegów i zrób to zgodnie z zachowaniem odrobiny czystości kodu.

ps. Tak jak napisal tlaziuk chodzi o odswiezanie widoku - wiec łatwiej dać ja w kodzie niz pilnowac wszystkich powodow dla których odswieza sie widok.
  • Odpowiedz
via Wykop Mobilny (Android)
  • 0
@DrizztDoUrden: jeśli masz takie problemy prawdopodobnie robisz coś źle, pewnie masz jakiś skomplikowany komponent. Osobiście wywoływanie jakieś funkcji w template to dla mnie anty pattern. Gdy chcesz zmodyfikować wartośc przez funkcje typu pure, jest mechizm pipe Możesz jeszcze spróbować strategii OnPush, ale to łatanie problemu, a nie jego rozwiązanie od "środka"
  • Odpowiedz