consdata.com
Blog techniczny Blog biznesowy Dział HR
EN
angular

Czy wiesz, że w Angularze istnieje sygnałowa alternatywa @ViewChild?

author Mariusz Bartosik
4 sierpnia 2026

@ViewChild służy do pobrania referencji elementu z szablonu. Jego standardowe wykorzystanie może wyglądać tak:

@Component({
  selector: 'app-root',
  standalone: true,
  template: `
    <div #rightClickMenu>
      Click me right. Counter: 
    </div>
  `,
})
export class PlaygroundComponent implements AfterViewInit {
  @ViewChild('rightClickMenu') rightClickMenu!: ElementRef;
  counter = signal(0);

  ngAfterViewInit() {
    this.rightClickMenu.nativeElement.addEventListener('contextmenu', (event: MouseEvent) => {
      event.preventDefault();
      this.counter.set(this.counter() + 1);
    });
  }
}

Podczas wykorzystania @ViewChild zmienna przechowująca referencję jest uzupełniana dopiero po zainicjowaniu widoku. Dlatego TypeScript dla takiego przypadku wymaga określenia dodatkowego typu undefined lub wyłączonej non-null asercji.

Angular 17.2 wprowadził metodę viewChild, która zwraca referencję w postaci sygnału.

W wersji z viewChild powyższy komponent wygląda następująco:

@Component({
  selector: 'app-root',
  standalone: true,
  template: `
    <div #rightClickMenu>
      Click me right. Counter: 
    </div>
  `,
})
export class PlaygroundComponent {
  rightClickMenu = viewChild.required<ElementRef>('rightClickMenu');
  counter = signal(0);

  constructor() {
    effect(() => {
      this.rightClickMenu().nativeElement.addEventListener('contextmenu', (event: MouseEvent) => {
        event.preventDefault();
        this.counter.set(this.counter() + 1);
      });
    });
  }
}

Sygnałowe podejście poprawia czytelność kodu i upraszcza rozwiązanie. W drugim przykładzie zamiast AfterViewInit została użyta sygnałowa funkcja effect, aby wykonać działanie na elemencie w momencie, gdy jego referencja zostanie zwrócona przez sygnał.

W tej sytuacji można używać również funkcji computed(), aby wyprowadzać wartości z sygnału. Dodatkową zaletą jest możliwość użycia metody required, która wymusza obecność żądanego elementu w szablonie komponentu, dlatego warto ją stosować dla statycznie zdefiniowanych elementów, aby ograniczyć konieczność stosowania dodatkowych asercji.

W sygnałach odpowiednikami dekoratorów @ViewChildren, @ContentChild i @ContentChildren są metody viewChildren(), contentChild() i contentChildren().

Źródła

  • Angular Signals Queries
  • Angular ViewChild and ContentChild

Pełny przykład dostępny: StackBlitz

Najnowsze wpisy

  • Czy wiesz, że w Angularze istnieje sygnałowa alternatywa @ViewChild?
  • Czy wiesz, jak wykonać profilowanie aplikacji za pomocą JDK Flight Recorder?
  • Czy wiesz, jak analizować i optymalizować zależności w bundle?
Dołącz do nas

  • SENIOR FULLSTACK DEVELOPER (JAVA + ANGULAR) Poznań (hybrydowo) lub zdalnie UoP 14 900 - 20 590 PLN brutto
    B2B 19 680 - 27 220 PLN netto
  • REGULAR FULLSTACK DEVELOPER (JAVA + ANGULAR) Poznań (hybrydowo) lub zdalnie UoP 11 300 - 15 900 PLN brutto
    B2B 14 950 - 21 000 PLN netto
  • ZOBACZ WSZYSTKIE OGŁOSZENIA

Podobne wpisy

post-image
jdk-flight-recorder

Czy wiesz, jak wykonać profilowanie aplikacji za pomocą JDK Flight Recorder?

Podczas przeprowadzania testów wydajnościowych czasami napotykamy sytuację, w której ich wyniki nie są zadowalające. Pojawia się wtedy pytanie, jak sprawdzić, co dzieje się wewnątrz aplikacji i na co zużywa ona...

author
Jakub Wilczewski 24 lip 2026
post-image
CommonJS

Czy wiesz, jak analizować i optymalizować zależności w bundle?

Pokażę, jak analizować plik stats.json i skutecznie zmniejszać rozmiar bundle'a w Angularze poprzez optymalizację importów CommonJS oraz wykorzystanie ESM (lodash-es).

author
Aleksander Burzec 16 cze 2026
post-image
spring boot

Czy wiesz, jak działa mechanizm uploadu plików w Springu?

Poznaj, jak w Springu działa upload plików, które parametry multipart warto ustawić i jak bezpiecznie przechowywać pliki po zakończeniu żądania.

author
Bartosz Pietrowiak 22 maj 2026
Dołącz do nas

  • SENIOR FULLSTACK DEVELOPER (JAVA + ANGULAR) Poznań (hybrydowo) lub zdalnie UoP 14 900 - 20 590 PLN brutto
    B2B 19 680 - 27 220 PLN netto
  • REGULAR FULLSTACK DEVELOPER (JAVA + ANGULAR) Poznań (hybrydowo) lub zdalnie UoP 11 300 - 15 900 PLN brutto
    B2B 14 950 - 21 000 PLN netto
  • ZOBACZ WSZYSTKIE OGŁOSZENIA
consdata.com
  • Kontakt

    • sales@consdata.com
    • +48 61 41 51 000

  • Biuro

    • K9Office
      Krysiewicza 9/14
      61-825 Poznań
      Polska

  • Rozwiązania

    • Eximee
    • Kouncil
  • Blog Dołącz do nas
Copyright © 2024 Consdata. All rights reserved. Privacy Policy & Cookies
Chcemy używać plików cookie oraz skryptów podmiotów trzecich do polepszania funkcjonowania tej strony Zgadzam się