Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

301
Views
Angular 2+: obtenga la referencia de appcomponent div en otros componentes

Tengo componentes llamados app.component, que es el componente principal del proyecto angular. La navegación al componente del cliente se realiza mediante enrutamiento. Y

Estructura de carpetas src\app

 - app.component.html - app.component.ts

y src\aplicación\componentes\cliente

 - customer.component.html - customer.component.ts

En mi app.component.html

 <div class="top-container" #topContainerRef> <router-outlet></router-outlet> </div>

En mi cliente.component.ts

Quiero obtener una referencia del div de contenedor más alto que se encuentra en app.components

quiero reemplazar

 document.getElementsByClassName('top-container')[0].scrollTop = some values

con algo parecido a

 @ViewChild('topContainerRef', { read: ElementRef, static: false }) topContainerRef: ElementRef; this.topContainerRef.nativeElement.scrollTop= "some value" //here the topContainerRef is undefined

¿Hay alguna manera de que pueda usar elementRef en lugar de classname o Id's?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

No puede usar ViewChild para el #topContainerRef para obtener una referencia de este elemento, porque su CustomerComponent no lo representa.

Debe obtener la referencia de este elemento dentro del componente de la aplicación y encontrar una manera de pasarlo a todos los demás niños que puedan necesitarlo (no recomendado).

O simplemente puede crear un servicio y usarlo para "solicitar" el cambio de scrollTop por cualquier componente que tenga acceso a este elemento (en su caso, el componente de la aplicación).

Yo lo haría algo como esto:

 export class AppContainerService { private scrollTopSource = new ReplaySubject<number>(1); public scrollTop$ = this.scrollTopSource.asObservable(); public updateScrollTop(value: number) { this.scrollTopSource.next(value); } }

Dentro de su componente de CustomerComponent :

 public class CustomerComponent implements OnInit { // ... constructor(private containerService: AppContainerService) { } ngOnInit() { this.containerService.updateScrollTop(/* whatever value you need */); } // ... }

Y finalmente, el AppComponent que reaccionará a los cambios de scrollTop:

 export class AppComponent implements AfterViewInit { @ViewChild('topContainerRef', { read: ElementRef, static: false }) topContainerRef: ElementRef; private subscriptions = new Subscription(); constructor(private containerService: AppContainerService) { } ngAfterViewInit() { this.subscriptions.add(this.containerService.scrollTop$.subscribe((value: number) => { this.topContainerRef.nativeElement.scrollTop = value; })); } ngOnDestroy() { this.subscriptions.unsubscribe(); } }

No te olvides de cancelar la suscripción dentro de ngOnDestroy . Esto es importante para que no tengas pérdidas de memoria.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!