Odświeżenie grida po załadowaniu nowych danych

Odświeżenie grida po załadowaniu nowych danych
K9
  • Rejestracja:prawie 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:141
0

Cześć, temat dotyczy angulara.
Mam w widoku komponenta pętlę *ngFor, która wypełnia elementy grida bootstrapowego. Teraz kwestia jest tego typu, ze elementy te załadowane są w pliku ts do tablicy, a zawartość tej tablicy może się zmieniać - elementy mogą do niej dochodzic, bądź ubywać z niej. Chciałbym w jakiś sposób odświeżać grida po zmianie zawartości tablicy. Próbowałem markForCheck(), ale nie zadziałało. Jakieś sugestie jak by to można dobrze zrobić?

Krzysztof Pe
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 3 lata
  • Postów:78
0
K9
Tylko to sie wydaje być jakimś potencjalnym rozwiązaniem, kiedy do czynienia mamy z komponentami parent-child. A w moim przypadku wszystko jest w jednym komponencie.
Krzysztof Pe
https://stackblitz.com/edit/angular-2hnndg Gdzie to robisz? Wrzuć może ten kod na stackblitz? Elementy są załadowane w pliku ts do tablicy - pokaż ten plik. Pokaż w jaki sposób te elementy są przekazywane do componentu.
K9
Nic się nie ładuje pod tym linkiem.
Krzysztof Pe
Spróbuj teraz, zrobiłem update linku
M8
  • Rejestracja:prawie 14 lat
  • Ostatnio:około miesiąc
  • Postów:151
0

A po zmianie elementów tablicy angular nie aktualizuje automatycznie zawartości grida ?


GG: 28287812
Skype: marcinmn.s
K9
Nie. Przynajmniej nie odnotowałem takiego działania.
M8
Widok po zmianie / aktualizacji tablicy powinien się zaktualizować.
M8
Możesz pokazać kod?
Krzysztof Pe
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 3 lata
  • Postów:78
0

To jest co najmniej dziwne, bo u mnie działa normalnie. https://stackblitz.com/edit/angular-2hnndg?embed=1&file=src/app/app.component.html

K9
  • Rejestracja:prawie 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:141
0

Nowe elementy dochodzą do tablicy jeżeli mi coś przyjdzie w .subscribe - może to ma jakieś znaczenie?

Krzysztof Pe
Co tam masz w tej tablicy? Czy to nie są jakieś typy proste?
M8
  • Rejestracja:prawie 14 lat
  • Ostatnio:około miesiąc
  • Postów:151
0

Jeśli iterujesz w ngFor bezpośrednio po elementach tablicy do której dodajesz dane to nie. A w konsoli nie masz błędów ?


GG: 28287812
Skype: marcinmn.s
K9
  • Rejestracja:prawie 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:141
0
marcin82w napisał(a):

Jeśli iterujesz w ngFor bezpośrednio po elementach tablicy do której dodajesz dane to nie. A w konsoli nie masz błędów ?

Faktycznie, był błąd, nie zauważyłem go. Poprawiłem i działa. Mam jeszcze jedno pytanie - bo w sumie problem jest taki, że ten *ngFor w widoku na początku życia komponentu nie ma danych i sypie błędami. Jak by można było poczekać na te wyniki, które przyjdą z subscribe'a?

Krzysztof Pe
Async pipe albo użyj ng-container z IFem
M8
  • Rejestracja:prawie 14 lat
  • Ostatnio:około miesiąc
  • Postów:151
0

Ale jeśli tablica będzie pusta to nie będzie iterował, w konstruktorze tylko zainicjuj tą tablicę. np
data= []


GG: 28287812
Skype: marcinmn.s
edytowany 1x, ostatnio: marcin82w
K9
  • Rejestracja:prawie 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:141
0

Zainicjowałem, ale to nie pomogło jako tako, sypie błędami, dopiero jak zrefreshuję stronę to elemety się ładują.

M8
  • Rejestracja:prawie 14 lat
  • Ostatnio:około miesiąc
  • Postów:151
0

A jak dodajesz elementy do tablicy ? Async pipe nie możesz użyć ?


GG: 28287812
Skype: marcinmn.s
M8
  • Rejestracja:prawie 14 lat
  • Ostatnio:około miesiąc
  • Postów:151
0

Jakbyś kawałek kodu pokazał łatwiej było by podpowiedzieć.


GG: 28287812
Skype: marcinmn.s
K9
  • Rejestracja:prawie 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:141
0
marcin82w napisał(a):

A jak dodajesz elementy do tablicy ? Async pipe nie możesz użyć ?

W komponencie mam tablice items = new Array<Item>(); i później w ngOnInit mam .subscribe, gdzie po otrzymaniu danych robię this.items.push(dana_ktora_przyszla). Nie stosowałem prędzej async pipe- nie wiem czy się nada w tym przypadku? Bo próbowałem w ngFor dodać "| async", ale zarzuciło błędami.

M8
  • Rejestracja:prawie 14 lat
  • Ostatnio:około miesiąc
  • Postów:151
1

Dodaj, tylko nie rób subscribe w ngOnInit. Async pipie zadba o resztę.


GG: 28287812
Skype: marcinmn.s
K9
  • Rejestracja:prawie 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:141
0
marcin82w napisał(a):

Dodaj, tylko nie rób subscribe w ngOnInit. Async pipie zadba o resztę.

No tylko, że ten mój subscribe, który zbiera dane umieściłem w ngOnInit i wygląda mniej więcej tak:

Kopiuj
public ngOnInit(): void {
    this.subscription = this.dTService.initialized.subscribe((change: DSChange) => {
      change.added.forEach((item: Item) => {
        this.items.push(item);
      });
      change.changed.forEach((item: Item) => {
       this.items.push(item);
      });
      
    });
    
  }

Więc teraz pytanie co z tym zrobić, skoro mówisz, żeby nie robić subsribe w ngOnInit?

M8
  • Rejestracja:prawie 14 lat
  • Ostatnio:około miesiąc
  • Postów:151
0

A to tego nie zrobisz poprzez async pipe. Rozumiem że w ngFor iterujesz po items. W konstruktorze próbowałeś inicjować poprzez

Kopiuj
this.items = []

?


GG: 28287812
Skype: marcinmn.s
edytowany 4x, ostatnio: marcin82w
Zobacz pozostałe 5 komentarzy
M8
jeśli items będzie pustą tablicą (zero elementów) to po porstu nie będzie iterował, nie powinno być błędów. Czy na pewno w tym masz błąd ?
K9
Tzn. fakt, że po dodaniu this.items = [] w konstruktorze błędów nie ma w konsoli, jednak pojawia się problem tego rodzaju, że na widoku nie pojawiają się żadne elementy. A jak sądzę w ngOnInit one z jakimś tam poślizgiem są w końcu ładowane.
M8
ngOnInit jest wykonywany jeszcze przed renderowaniem widoku, jeśli zasubskrybujesz i dane przyjdą to w widoku powinny być widoczne, masz pewność że subscribe dobrze działa ? To this.items = [] ngOnInit na samym początku.
K9
Tzn sytuacja wygląda tak, że jak z menu przechodzę do komponentu to na widoku nie ma nic, pusto. Natomiast jak już jestem w danym komponencie i wymuszę w przeglądarce przeładowanie, to wtedy po odświezeniu wyglada ok
M8
A czy w momencie przechodzenia do komponentu masz się do czego zasubskrybować ? Wykonujesz zapytanie http i do odpowiedzi z niego subskrybujesz się ?
nowyworek
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:świat
  • Postów:174
0

Wszystko rób przez async pipe. Poczytaj o deklaratywnym podejściu w angularze. Ogólnie chodzi o to, że masz w pipie tak przekształcić dane, że jak walniesz subscribe(np async pipem) to dane są gotowe, to ma wiele zalet, m.in można użyć ChangeDetection.ON_PUSH ale także nie trzeba samemu robić unsubscribe


Julian
M8
To dobre posunięcie, jednak w backend trzeba trochę zmodyfikować to co będzie zwracane.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)