我正在try 从Observable数组中获取一个随机元素以在模板中使用.目前我正在使用

@Select(SomeState.tiles) tiles$: Observable<Tile[]>;

getR和omTile$(): Observable<Tile> {
  return this.tiles$.pipe(
      map(tiles => {
        return tiles[Math.floor(Math.r和om() * tiles.length)];
      })
  );
}

和 in the template

<ng-container *ngFor="let tile of othertiles; index as i">
    <div *ngIf="i % 8 == 0 && (tiles$ | async)?.length">
          <ng-container *ngIf="getR和omTile$() | async; let r">
              <img [src]="r.imgUrl" />
          </ng-container>
      </div>
</ng-container>

然而,滚动时图像会发生变化,因为它似乎在不断更新.

在get方法中添加take(1)似乎也没有帮助.

有人知道如何让它正确工作吗?:)

推荐答案

该问题是由于应用程序中触发的更改检测引起的. 当这种情况发生时,模板中使用的函数会再次被判断,导致随机元素发生变化.

不要将随机逻辑公开为函数,而是将其公开为变量:

randomTile$: Observable<Tile> = this.tiles$.pipe(
      map(tiles => {
        return tiles[Math.floor(Math.random() * tiles.length)];
      })
  );

Angular相关问答推荐

将kendo—colorpicker的kendo弹出窗口附加到组件''

接收错误NullInjectorError:R3InjectorError(_AppModule)[config—config]....>过度安装Angular—Markdown—Editor

将Angular 17中的http服务与独立组件一起使用

如何动态呈现组件并以Angular 访问它们的方法?

判断哪个Angular 信号导致了影响

茉莉花-模板中调用了如何判断角管

Angular 17:在MouseOver事件上 Select 子组件的正确ElementRef

PrimeNg选项卡视图选项卡

Angular NG5002错误无效的ICU消息和意外字符EOF

无法绑定到formControl,因为它不是input的已知属性

NX如何在前端和后端使用一个接口库

需要做什么才能使 ErrorHandler 正常工作?

模块内的命名路由出口 - 路径匹配但内容未加载

错误:在工作区外运行 Angular CLI 时,此命令不可用

带有重定向的Angular 2 AuthGuard服务?

Angular 2+ 一次性绑定

Angular ngFor 索引从 1 开始 循环

CORS 错误:requests are only supported for protocol schemes: http…等

Angular 2如何让子组件等待异步数据准备好

Angular 2 中的 OnChanges 和 DoCheck 有什么区别?