Вызвать функцию внутри ngOnInit

197
26 апреля 2018, 09:41

Использую 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>
Answer 1

Чтобы функция могла использоваться в шаблоне, она должна быть методом соответствующего компонента.

Следовательно нужно сделать методами все нужные функции, например:

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.

READ ALSO
&ldquo;броски кубиков&rdquo; происходят бесконечно

“броски кубиков” происходят бесконечно

Этот код имитирует бросок 2 кубиковВ зависимости от того, что на них выпало, увеличивается height соответствующего блока

122
Хранения дат и часовые пояса

Хранения дат и часовые пояса

У меня в базе данных храниться дата добавления какого-либо объекта,причем,храниться она в формате UNIXПользователь видит дату в формате (День-месяц-год),...

206
Передача данных методом POST через header

Передача данных методом POST через header

Делаю редирект на страничку:

207
Laravel правильная выборка данных

Laravel правильная выборка данных

Всем привет! Есть не разрешенный по LARAVEL, а конкретно выборка данных из БД, уже 2 дня над этой проблемой бьюсь=((( Как выбрать из БД данные за текущий...

186