Я просто хотел бы знать, как создать глобальную переменную из функции класса внутри Angular 5. Моя проблема в том, что я создаю переменную setInterval в одной функции, но тогда я не знаю, как получить доступ к этой переменной, чтобы сделать clearInterval ( var) в другой функции. Есть какие-нибудь советы, как решить эту проблему?
Вот простой индикатор выполнения, объясняющий мою проблему, закомментированный // clearInterval (RunningTimer); вот где я застрял
https://stackblitz.com/edit/angular-y8zcio?file=app%2Fapp.component.html



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Просто добавьте поле вместо локальной переменной:
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";
}
}
}
@Frank Измените тип на timer, неявное определение setInterval должно возвращать число, не знаю, какие определения у вас есть ...
Вот такая же проблема: github.com/TypeStrong/atom-typescript/issues/1053 Моим решением было добавить окно. перед setInterval, сохраняя тип как число
@Frank, если у вас 2.8, попробуйте runninTimer: ReturnType<typeof setInterval>;, но если код работает в браузере, вы не должны использовать определения узлов.
Почему вы не создаете сервис, который предлагает функцию для установки и очистки переменной? Этот сервис можно внедрить в любой компонент, где он нужен.
export class YourService{
private _yourVar: yourVarDefintion;
public get yourVar(): yourVarDefintion{
return this._yourVar;
}
public set yourVar(id: yourVarDefintion) {
this._yourVar = id;
}
}
Мне действительно не нужно что-то такое сложное, эй
Я думаю, вы смотрите на это под неправильным углом, зачем вам очищать RunningTimer, это переменная в области, которая определена там, каждый раз, когда вы вводите эту функцию, это будет новая переменная, проблема в том, что вам нужно чтобы очистить переменную iProgressValue, поэтому
заменять
//clearInterval(RunningTimer);
с участием
this.iProgressValue = 0;
и вы почти закончили.
Тициан, в stackblitz это почему-то работает, а в моем проекте не работает. На this.RunningTimer я получаю сообщение об ошибке: Тип «таймер» не может быть назначен типу «число»