如何从角度html

时间:2019-11-05 09:30:42

标签: angular typescript

我正在创建一个“演示文稿编辑器”,在此编辑器中,我可以概览创建的所有演示文稿。在概述中,我想将每个演示文稿的第一张幻灯片显示为预览。

问题是我只将图像URL存储在“幻灯片”数组中。 “演示文稿”数组只是演示文稿中使用的幻灯片ID的列表。

因此,为了从所有内容中过滤背景图像,我尝试了以下方法:

<div [ngStyle]="{'background-image': 'url('+(slides | filter : {'_id':'presentation.slides[0].slideid'}).imageurl+')'}">

我想过滤幻灯片数组作为演示文稿的第一张幻灯片的ID,然后从该幻灯片中获取URL。

由于我要显示每个演示文稿,因此我必须动态显示此“预览幻灯片”,所以这就是我的html大致看起来像rn

<div *ngFor="let presentation of presentations">
   // The div from above
</div>

也许是语法错误,还是太多^^,你们对如何解决我的问题有想法吗?

3 个答案:

答案 0 :(得分:2)

我建议事先映射对象并使用属性对其进行增强,让其命名为thumbnail

您现在的组件中可能有类似这样的内容:

ngOnInit() {
  this.anyService.getPresentations().pipe(
    /*some kind of unsubscription*/
  ).subscribe(presentations => this.presentations = presentations);

  this.anyService.getSlides().pipe(
    /*some kind of unsubscription*/
  ).subscribe(slides => this.slides = slides);
}

我建议使用rxjs和异步管道。这样会导致类似的情况

ngOnInit() {
  this.presentations$ = this.anyService.getPresentations();
  this.slides$ = this.anyService.getSlides();

  this.extendedPresentations$ = combineLatest([this.presentations$, this.slides$]).pipe(
    // TODO: care about falsy values
    map(([presentations, slides]) => presentations.map(
      presentation => {
        return {
          ...presentation,
          thumbnail: slides.find(slide => slide._id === presentation.slides[0].slideid).imageurl
        }
      }
    )),
  )
}

在模板中:

<div *ngFor="let presentation of extendedPresentations$ | async">
   <div [ngStyle]="{'background-image': presentation.thumbnail}">
</div>

答案 1 :(得分:1)

您可以在TS文件中创建一个函数,以获取给定幻灯片ID的网址,例如

isHittable

然后在用户界面上

getUrl(slideid){
let slide=slides.find(s=> s._id==slideid);
return slide.imageurl
}

答案 2 :(得分:1)

您可以尝试这样的事情:

在循环中您可以执行此操作

<div *ngFor="let presentation of presentations; let i = index;">
  <div [ngStyle]="getBackgroundImage(i)">
</div>

您获取背景的功能将如下所示

getBackgroundImage(i) {
let presentation = presentations[i];
let slide = presentation.slides.filter(
          slide => slide.id === presentation.slides[0].slideId);
}

return {
'background-image': `url($slide.imageurl)`

};

}