поэтому я пытаюсь сделать некоторые события основанными на прокрутке моего приложения Angular.
У меня проблема, так как я пытаюсь получить доступ к элементу в своем HTML с помощью @ViewChild
.
Я могу получить доступ к элементу внутри ngAfterViewInit()
, но не могу получить к нему доступ снаружи. Всегда показывает undefined.
Вот мой класс компонентов:
export class NavBarComponent implements OnInit {
@ViewChild('navBar')
navBar:ElementRef;
constructor(private renderer: Renderer2) {
}
ngAfterViewInit(){
window.addEventListener('scroll', this.onScroll, true);
console.log(this.navBar.nativeElement);
}
ngOnInit(): void {
}
onScroll(){
console.log("I am scrolling right now.")
console.log(this.navBar.nativeElement)
}
onResize(){
}
onTabClick(){
}
}
Когда я вхожу в консоль внутри ngAfterViewInit()
, я получаю элемент HTML, но когда я вхожу в консоль внутри onScroll()
, он не определен.
Почему мой элемент исчезает и становится неопределенным после просмотра? Я не использую ngIf
или что-то еще, что удаляет элемент.
Вот HTML-код компонента.
<section class="et-hero-tabs" >
<h1>STICKY SLIDER NAV</h1>
<h3>Sliding content with sticky tab nav</h3>
<div class="et-hero-tabs-container" #navBar>
<a class="et-hero-tab" href="">ES6</a>
<a class="et-hero-tab" href="">Flexbox</a>
<a class="et-hero-tab" href="">React</a>
<a class="et-hero-tab" href="">Angular</a>
<a class="et-hero-tab" href="">Other</a>
<span class="et-hero-tab-slider"></span>
</div>
</section>
this.onScroll
. Чтобы сохранитьthis
, вы можете: (1) определить обратный вызов как стрелочную функцию:onScroll = () => { ... }
или (2) заключить вызов в стрелочную функцию:window.addEventListener('scroll', () => { this.onScroll(); }, true);
. - person ConnorsFan   schedule 28.05.2020fromEvent(window,'scroll').subscribe(res=>{...})
это позволит вам отказаться от подписки, отложить или ... - person Eliseo   schedule 28.05.2020