Javascript 从类函数内声明全局变量
我只想知道如何从Angular 5中的类函数中创建全局变量。我的问题是,我在一个函数中创建了一个setInterval变量,但我不知道如何访问该变量以在另一个函数中执行clearInterval(var)。对如何解决这个问题有什么建议吗 下面是一个简单的进度条,解释我的问题,注释掉的//clearInterval(RunningTimer);这就是我被困的地方Javascript 从类函数内声明全局变量,javascript,angular,typescript,Javascript,Angular,Typescript,我只想知道如何从Angular 5中的类函数中创建全局变量。我的问题是,我在一个函数中创建了一个setInterval变量,但我不知道如何访问该变量以在另一个函数中执行clearInterval(var)。对如何解决这个问题有什么建议吗 下面是一个简单的进度条,解释我的问题,注释掉的//clearInterval(RunningTimer);这就是我被困的地方 只需添加一个字段而不是局部变量: export class AppComponent { sStatus = "Inactive"
只需添加一个字段而不是局部变量:
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.log("Completed")
clearInterval(this.runningTimer);
this.sStatus = "Complete";
}
}
}
只需添加字段而不是局部变量:
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.log("Completed")
clearInterval(this.runningTimer);
this.sStatus = "Complete";
}
}
}
为什么不创建一个提供设置和清除变量功能的服务?这个服务可以注入到每个需要它的组件中
export class YourService{
private _yourVar: yourVarDefintion;
public get yourVar(): yourVarDefintion{
return this._yourVar;
}
public set yourVar(id: yourVarDefintion) {
this._yourVar = id;
}
}
为什么不创建一个提供设置和清除变量功能的服务?这个服务可以注入到每个需要它的组件中
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);
与
你已经做得差不多了。我认为你从错误的角度看这个问题,为什么要清除RunningTimer,这是一个定义在这里的范围内的变量,每次你输入这个函数它都是一个新变量,问题是你需要清除iProgressValue变量,所以 替换
//clearInterval(RunningTimer);
与
你已经差不多完成了。我真的不需要这么复杂的东西heyI不需要这么复杂的Heytian,出于某种原因,这在stackblitz中有效,但在我的项目中不起作用。在这个.RunningTimer上,我得到了一个错误:类型“timer”不可分配给类型“number”@Frank将类型更改为
timer
,setInterval
的隐式定义应该返回一个数字,不知道您有什么定义…这是相同的问题:我的解决方案是添加窗口。在setInterval前面,同时保持类型为number@Frank如果您使用的是2.8,请尝试runnitimer:ReturnType代码>但如果代码在浏览器中运行,则不应使用节点定义。Titian,出于某种原因,这在stackblitz中有效,但在我的项目中无效。在这个.RunningTimer上,我得到了一个错误:类型“timer”不可分配给类型“number”@Frank将类型更改为timer
,setInterval
的隐式定义应该返回一个数字,不知道您有什么定义…这是相同的问题:我的解决方案是添加窗口。在setInterval前面,同时保持类型为number@Frank如果您使用的是2.8,请尝试runnitimer:ReturnType代码>但如果代码在浏览器中运行,则不应使用节点定义。