• 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

Mały hosting, OGROMNE możliwości
0 głosów
451 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,170 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,170 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ź 1,231 wizyt
pytanie zadane 5 maja 2023 w JavaScript przez mm Użytkownik (890 p.)
+2 głosów
1 odpowiedź 630 wizyt
pytanie zadane 2 maja 2023 w JavaScript przez mm Użytkownik (890 p.)
+2 głosów
1 odpowiedź 574 wizyt
pytanie zadane 23 kwietnia 2023 w JavaScript przez mm Użytkownik (890 p.)

93,718 zapytań

142,631 odpowiedzi

323,263 komentarzy

63,266 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...