Объявление глобальной переменной Angular из функции класса

Я просто хотел бы знать, как создать глобальную переменную из функции класса внутри Angular 5. Моя проблема в том, что я создаю переменную setInterval в одной функции, но тогда я не знаю, как получить доступ к этой переменной, чтобы сделать clearInterval ( var) в другой функции. Есть какие-нибудь советы, как решить эту проблему?

Вот простой индикатор выполнения, объясняющий мою проблему, закомментированный // clearInterval (RunningTimer); вот где я застрял

https://stackblitz.com/edit/angular-y8zcio?file=app%2Fapp.component.html

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
783
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Просто добавьте поле вместо локальной переменной:

export class AppComponent  {
  sStatus = "Inactive";
  iProgressMax = 100;
  iProgressValue = 0;
  private runningTimer: number
  Run() {
    this.sStatus = "Running...";
    this.runningTimer = setInterval(() => {this.Running()}, 500);
  }

  Running() {
    this.iProgressValue = this.iProgressValue + 20;

    if (this.iProgressValue >= this.iProgressMax) {
      console.info("Completed")
      clearInterval(this.runningTimer);
      this.sStatus = "Complete";
    }
  }
}

Тициан, в stackblitz это почему-то работает, а в моем проекте не работает. На this.RunningTimer я получаю сообщение об ошибке: Тип «таймер» не может быть назначен типу «число»

Frank 18.04.2018 10:00

@Frank Измените тип на timer, неявное определение setInterval должно возвращать число, не знаю, какие определения у вас есть ...

Titian Cernicova-Dragomir 18.04.2018 10:01

Вот такая же проблема: github.com/TypeStrong/atom-typescript/issues/1053 Моим решением было добавить окно. перед setInterval, сохраняя тип как число

Frank 18.04.2018 10:03

@Frank, если у вас 2.8, попробуйте runninTimer: ReturnType<typeof setInterval>;, но если код работает в браузере, вы не должны использовать определения узлов.

Titian Cernicova-Dragomir 18.04.2018 10:05

Почему вы не создаете сервис, который предлагает функцию для установки и очистки переменной? Этот сервис можно внедрить в любой компонент, где он нужен.

export class YourService{

      private _yourVar: yourVarDefintion;

      public get yourVar(): yourVarDefintion{
        return this._yourVar;
      }

      public set yourVar(id: yourVarDefintion) {
        this._yourVar = id;
      }
}

Мне действительно не нужно что-то такое сложное, эй

Frank 18.04.2018 09:54

Я думаю, вы смотрите на это под неправильным углом, зачем вам очищать RunningTimer, это переменная в области, которая определена там, каждый раз, когда вы вводите эту функцию, это будет новая переменная, проблема в том, что вам нужно чтобы очистить переменную iProgressValue, поэтому

заменять

//clearInterval(RunningTimer);

с участием

this.iProgressValue = 0;

и вы почти закончили.

Другие вопросы по теме