• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Angular zwracanie losowej wartości z array

Object Storage Arubacloud
0 głosów
195 wizyt
pytanie zadane 2 grudnia 2022 w JavaScript przez TheDarkSide Użytkownik (930 p.)
zmienione kategorie 2 grudnia 2022 przez Comandeer

Próbuję zwrócić jedną losową wartość z tablicy, ale coś nie wychodzi. Jakieś sugestie ?

Array: 

[ { "id": "1", "category": "comedy", "content": "Millers" }, { "id": "2", "category": "horror", "content": "Sinister" }]

HTML:

<div  class="container">
       <p *ngFor="let movie of movies"> {{ movie.content }}</p>    </div>
</div>
<button class="next">
    Next
</button>

Service:

 loadData(): Observable<any> {
        return this.http.get<any>(`http://localhost:3004/movies`).pipe(
            map(response => {
                return response;
            })
        )
    };

Component.ts:

export class HomeComponent implements OnInit {

  public movies:any = [];
  constructor(private PagesService: PagesService
  ) { }

  ngOnInit(): void {
    this.loadData()
  };

  loadData() {
    this.PagesService.loadData().subscribe(response => {
      console.log(response)
      this.movies[Math.floor(Math.random() * this.movies.length)];
      //this.movies = response

    })
  };
}

Proóbowałam tez coś takiego :

 <!-- <p>{{ randomValue }}</p>-->

ts.:

// var randomValue = this.movies[Math.floor(Math.random() * this.movies.length)];
    //  return randomValue

 

1 odpowiedź

0 głosów
odpowiedź 2 grudnia 2022 przez ScriptyChris Mędrzec (190,190 p.)

Samo

this.movies[Math.floor(Math.random() * this.movies.length)];

jedynie odczytuje losowy element z tablicy, ale nic z nim nie robi (chyba, że pod spodem byłby jakiś getter/proxy robiące side effecty). Trzeba natomiast go jeszcze gdzieś użyć/przypisać. Czyli zapis:

this.movies = response

jest ok wewnątrz callbacka przekazanego do subscribe. Następnie poniższy zakomentowany kod ma sens:

var randomValue = this.movies[Math.floor(Math.random() * this.movies.length)];
return randomValue

 i powinien być umieszczony wewnątrz metody, którą templatka wywołuje, żeby wyświetlić wylosowany element z tablicy.

komentarz 8 grudnia 2022 przez TheDarkSide Użytkownik (930 p.)
Nadal nie działa :(

HTML:

 <!-- <p>{{ randomValue }}</p>-->

TS:

export class HomeComponent implements OnInit {

 

  public movies:any = [];

  constructor(private PagesService: PagesService

  ) { }

 

  ngOnInit(): void {

    this.loadData()

  };

 

  loadData() {

    this.PagesService.loadData().subscribe(response => {

      console.log(response)

    })

var randomValue = this.movies[Math.floor(Math.random() * this.movies.length)];

return randomValue

  };

}
komentarz 8 grudnia 2022 przez ScriptyChris Mędrzec (190,190 p.)

Zmienna randomValue to powinno być pole klasy (komponentu), więc zrób z tego this.randomValue - wtedy będzie dostępne w templatce. A zwracanie randomValue z metody loadData nie ma sensu, skoro wołasz ją w ngOnInit, ale nie robisz nic ze zwróconą wartością.

Podobne pytania

+2 głosów
1 odpowiedź 409 wizyt
pytanie zadane 5 maja 2023 w JavaScript przez mm Użytkownik (890 p.)
+2 głosów
1 odpowiedź 235 wizyt
pytanie zadane 2 maja 2023 w JavaScript przez mm Użytkownik (890 p.)
+2 głosów
1 odpowiedź 246 wizyt
pytanie zadane 23 kwietnia 2023 w JavaScript przez mm Użytkownik (890 p.)

92,573 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...