Javascript 从类函数内声明全局变量

Javascript 从类函数内声明全局变量,javascript,angular,typescript,Javascript,Angular,Typescript,我只想知道如何从Angular 5中的类函数中创建全局变量。我的问题是,我在一个函数中创建了一个setInterval变量,但我不知道如何访问该变量以在另一个函数中执行clearInterval(var)。对如何解决这个问题有什么建议吗 下面是一个简单的进度条,解释我的问题,注释掉的//clearInterval(RunningTimer);这就是我被困的地方 只需添加一个字段而不是局部变量: export class AppComponent { sStatus = "Inactive"

我只想知道如何从Angular 5中的类函数中创建全局变量。我的问题是,我在一个函数中创建了一个setInterval变量,但我不知道如何访问该变量以在另一个函数中执行clearInterval(var)。对如何解决这个问题有什么建议吗

下面是一个简单的进度条,解释我的问题,注释掉的//clearInterval(RunningTimer);这就是我被困的地方


只需添加一个字段而不是局部变量:

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但如果代码在浏览器中运行,则不应使用节点定义。