Использую Angular 5(до этого с ангуляром не работал) не могу обратиться к функции которая находится внутри ngOninit объясните пожалуйста как это сделать. вот мой пример
app.component.ts
import {Component, OnInit} from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
objDate = Date.now();
slide1 = 'test text';
ngOnInit() {
var slides = document.querySelectorAll('.substrate .slide');
var currentSlide = 0;
var slideInterval = setInterval(nextSlide, 5000);
function nextSlide() {
goToSlide(currentSlide + 1);
}
function previousSlide() {
goToSlide(currentSlide - 1);
}
function goToSlide(n) {
slides[currentSlide].className = 'slide';
currentSlide = (n + slides.length) % slides.length;
slides[currentSlide].className = 'slide showing';
}
function next() {
alert('YoY');
nextSlide();
};
function previous() {
alert('YoY1');
previousSlide();
}
}
}
app.component.html
<div class="block-btn-name">
<div (click)="next()" class="btn btn-left"></div>
<h1 class="slide-name">{{slide1}}</h1>
<div (click)="previous()" class="btn btn-right"></div>
Чтобы функция могла использоваться в шаблоне, она должна быть методом соответствующего компонента.
Следовательно нужно сделать методами все нужные функции, например:
ngOnInit(){...}
goToSlide(n) {
slides[currentSlide].className = 'slide';
currentSlide = (n + slides.length) % slides.length;
slides[currentSlide].className = 'slide showing';
}
Для того, чтобы вызвать один метод из другого, нужно использовать ключевое слово this:
nextSlide() {
this.goToSlide(currentSlide + 1);
}
После переделки на методы перестанет работать setInterval(nextSlide, 5000) из-за потере контекста (подробнее в вопросе Потеря контекста вызова)
А также все переменные определенные в ngOnInit и используемые в методах, должны стать полями класса, и обращение к ним также будет через this.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей