javascript - 如何在 Angular 8 中将 Base64 图像放在 mat-card 上

标签 javascript angular typescript base64

我正在制作一个带有 Spring Boot 和 mysql 后端的 Web 应用程序。我有一个具有 Lob 属性的模型,它以 base64 格式存储图像(来自前端)。现在我想引入该模型并将其数据放在垫卡上。我可以添加其他属性,但不能添加图像。

这是我的TS

import { ToyService } from 'src/app/services/toy-service';
import { Toy } from 'src/app/services/models/toy';
import { Router } from '@angular/router';

@Component({
  selector: 'app-toys',
  templateUrl: './toys.component.html',
  styleUrls: ['./toys.component.css']
})
export class ToysComponent implements OnInit {

  toy = new Toy()
  toys = [];
  toysImages = [];
  imageUrl: string;


  image;



  constructor(private toyService: ToyService, private router: Router) { }

  ngOnInit() {
    this.loadToys();
  }



  public loadToys() {
    this.toyService.readPolicies().subscribe((toys: Toy[]) => {
      this.toys = toys;      
      this.castingImages(toys)
    })

  }
  //Here, i try to decode de base64 to a image
  public castingImages(toys: Toy[]) {    

    for (let i = 0; i < toys.length; i++) { 

        this.image = new Image()
        this.image.src = toys[i].picture;

        toys[i].picture = this.image.src      

    }
  }


  redirect() {
    this.router.navigate(['./toys']);
  }

}

这是我的 HTML


    <ng-container *ngFor="let card of toys">
        <mat-card class="example-card">
            <mat-card-header>
                <div mat-card-avatar class="example-header-image"></div>
                <mat-card-title>{{card.id}}</mat-card-title>
                <mat-card-subtitle>Dog Breed</mat-card-subtitle>
            </mat-card-header>



            <!-- And i want to do something like... -->
            <img mat-card-image
                src={{card.picture}}>



            <mat-card-content>
                <p>
                    {{card.name}}
                </p>
            </mat-card-content>
            <mat-card-actions>
                <button mat-button>LIKE</button>
                <button mat-button>SHARE</button>
            </mat-card-actions>
        </mat-card>
    </ng-container>

</div>
<mat-divider></mat-divider>```

Thank you so much.

最佳答案

您可以尝试以下方法

import { DomSanitizer } from '@angular/platform-browser';

export class ToysComponent implements OnInit {
  constructor(private toyService: ToyService, private router: Router, private sanitizer: DomSanitizer) { }

  public castingImages(toys: Toy[]) {    
    for (let i = 0; i < toys.length - 1; i++) { 
      toys[i].picture = this.sanitizer.bypassSecurityTrustResourceUrl('data:image/png;base64, ' + toys[i].picture);
    }
  }
}

在模板中,您可以调用函数来清理 url

<img mat-card-image [src]="card.picture">

关于javascript - 如何在 Angular 8 中将 Base64 图像放在 mat-card 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60786061/

相关文章:

Angular:无法读取未定义的属性 'call'(引导时)

express - 赋值表达式的左侧不能是常量或只读属性

javascript - Jest - 在 typescript 中模拟一个命名的类导出

angular - Visual Studio 对装饰器的实验性支持是一项功能,可能会在未来的发布错误中发生变化

javascript - 如果条件满足则订阅,否则返回/退出 rxjs

javascript - addEventListener 重复自身

javascript - 以编程方式更改 EditorGrid 的单元格值

javascript - CKEditor 4 - iframe 中的对话框/模式位置

javascript - 单击编辑按钮后显示更新和取消按钮

javascript - 如何在Angular 6中发送ajax请求?