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

[ANGULAR] Udostępnienie zmiennej pomiędzy komponentami

Object Storage Arubacloud
+2 głosów
244 wizyt
pytanie zadane 23 kwietnia 2023 w JavaScript przez mm Użytkownik (890 p.)
Hej,

W jaki sposób można udostępnić zmienną z komponentu do klasy service.  Chciałabym login użytkownika, który wpisuję przy logowaniu użyć w mojej klasie service. W jaki sposób można to przesłać?

1 odpowiedź

+1 głos
odpowiedź 24 kwietnia 2023 przez Wiciorny Ekspert (269,770 p.)
Masz na to trzy sposoby, albo jako @Input przekazywany do komponentu, albo za pomocą zewnętrznego serwisu który możesz użyć w ramach współdzielenia czegoś pomiędzy komponentami i wstrzykiwaniem jako zależność do np. konstruktora , działającego jako dyrektywa, albo za pomocą EventEmitera działającego jako funkcja zdarzenia.  

https://angular.io/api/core/EventEmitter - EventEmitter
https://angular.io/guide/architecture-services - Serwisy
https://manivelarjunan.medium.com/event-emitter-vs-subject-cross-component-communication-8934376605e1
https://angular.io/guide/inputs-outputs - Sharing data between child and parent directives and components
komentarz 24 kwietnia 2023 przez mm Użytkownik (890 p.)
Ja chciałabym tylko pobrać login, który jest wpisywany przy logowaniu i przekazać tą zmienną do ścieżki, którą mam w moim service. Bo na tą chwilę w konsoli otrzymuję błąd, że ta wartość (login) jest "undefined"
komentarz 24 kwietnia 2023 przez Wiciorny Ekspert (269,770 p.)
bez kodu Ci nie doradze.
komentarz 24 kwietnia 2023 przez mm Użytkownik (890 p.)

W sumie teraz mam inny problem, ale może będziesz mi w stanie pomóc. Chcę przesłać dla zalogowanego użytkownika liczbę punktów jaką zdobył, ale cały czas mam taki błąd w moim Springu: "Required request parameter 'points' for method parameter type int is not present", a w konsoli mam błąd http 400.

Mój kod w Springu:

  @PostMapping("/users/{login}/points")
    public ResponseEntity<User> przeslijWynik(@PathVariable String login, @RequestParam("points") int points) {
        User user = userRepository.findByLogin(login);

        user.setPoints(points);

        userRepository.save(user);


        return ResponseEntity.ok(user);

    }

I w Angularze:

przekazWynik(user:User) {

    this.userID=this.loginUserService.login;

    return this.http.post(`${this.url}/${this.userID}/points`, {points:user.points});

   

 

  }

 

Co muszę zmienić w kodzie? 

komentarz 24 kwietnia 2023 przez Wiciorny Ekspert (269,770 p.)

Masz coś takiego @RequestParam("points") int points
Wymagasz tutaj parametru w request URL a u Ciebie przesyłasz raczej RequestBody, więc albo @RequestParams zamienisz na @RequestBody i dostosujesz, albo musisz zmodyfikować metode po stronie klienta 

Jeśli masz przekazać to tak jak u CIebie to musisz zmienić na 

@RequestBody Map<String, Integer> points  

 string to klucz : points, natomiast wartosc to user.points, innym wypadku

Druga opcja to modyfikacja rządania klienta na coś pokroju takiego : 
 

return this.http.post(`${this.url}/${this.userID}/points?points=${user.points}`, {});

można również skorzystać z klasy HttpParams, aby przesłać parametry zapytania do serwera.
 

const options = { params: new HttpParams().set('points', user.points.toString()) };

return this.http.post(`${this.url}/${this.userID}/points`, {}, options);

trzeci argument metody post() to opcjonalny obiekt HttpParams

1
komentarz 24 kwietnia 2023 przez mm Użytkownik (890 p.)
Zadziałało. Dziękuję Tobie bardzo za pomoc :) :)

Podobne pytania

0 głosów
0 odpowiedzi 186 wizyt
pytanie zadane 18 maja 2022 w JavaScript przez Amakesh Nowicjusz (220 p.)
+2 głosów
1 odpowiedź 407 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.)

92,566 zapytań

141,420 odpowiedzi

319,613 komentarzy

61,952 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!

...