首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每秒添加材料进度条的值Angular10

每秒添加材料进度条的值Angular10
EN

Stack Overflow用户
提问于 2021-01-01 21:14:26
回答 1查看 116关注 0票数 0

我希望每秒都为进度条的值添加一些值,这样当进度条为100时,我就可以执行一些操作。我已经写了下面的代码,但它什么也做不了。

Ts文件:

代码语言:javascript
复制
export class ProgressSpinnerTest implements OnInit {

  color: ThemePalette = 'primary';
  mode: ProgressSpinnerMode = 'determinate';
  value = 0;
  sub: Subscription;

  ngOnInit(): void {
    this.sub = interval(1000).subscribe(x => {
    this.progressBar();
});
}

progressBar(): void {
  this.value + 10;
  if (this.value === 100) {
    console.log("done");
    this.value = 0;
  }
}
}

组件:

代码语言:javascript
复制
<mat-card>
  <mat-card-content>
    <h2 class="example-h2">Result</h2>

    <mat-progress-bar
        class="example-margin"
        [color]="color"
        [mode]="mode"
        [value]="value">
    </mat-progress-bar>
  </mat-card-content>
</mat-card>

如何才能使它每秒增加10个进度条的值呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-01 21:56:12

您还可以使用rxjs运算符执行此操作:

代码语言:javascript
复制
  color: ThemePalette = 'primary';
  mode: ProgressSpinnerMode = 'determinate';
  progress: Observable<number>;
  ngOnInit(): void {
    this.progress = interval(1000).pipe(
      mapTo(10),
      scan((a, b) => a + b),
      takeWhile((value) => value < 100, true),
      map((value) => (value == 100 ? 0 : value))
    );
    this.progress.pipe(takeLast(1)).subscribe((_) => console.log('done'));
  }

和html:

代码语言:javascript
复制
<mat-progress-bar 
  [color]="color"
  [mode]="mode"
  [value]="progress | async">
</mat-progress-bar>

一个不错的做法是尽量避免在组件中使用订阅,让angular使用异步管道处理订阅。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65529969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档