原组件地址

https://www.naiveui.com/zh-CN/os-theme/components/avatar

Angular版本地址

https://blog.heyliubo.top/ng-naive-ui/components/avatar/examples

image.png

image.png**avatar.component.ts

  1. import { Component, OnInit, HostBinding, Input, ElementRef, SimpleChanges } from '@angular/core';
  2. /**
  3. * 头像组件
  4. */
  5. @Component({
  6. selector: 'n-avatar',
  7. templateUrl: './avatar.component.html',
  8. styleUrls: ['./style/style.scss']
  9. })
  10. export class naiveAvatarComponent implements OnInit {
  11. /** 头像是否带边框 */
  12. @Input() bordered = false;
  13. /** 头像的背景色 */
  14. @Input() color = undefined;
  15. /** 头像加载失败时显示的图片的地址 */
  16. @Input('fallback-src') fallbackSrc = undefined;
  17. /** 头像的图片在容器内的的适应类型 */
  18. @Input('object-fit') objectFit = 'fill';
  19. /** 头像的尺寸 */
  20. @Input() size: 'small' | 'medium' | 'large' | number = 'medium';
  21. /** 头像的地址 */
  22. @Input() src: string = undefined;
  23. /** 在Angular中,如果<n-avatar round></n-avatar>这么使用,Input,则在组件中取值为空字符串'' */
  24. /** 头像是否圆形 */
  25. @Input() round: boolean | string = false;
  26. /** 头像的图片加载失败执行的回调 */
  27. @Input('on-error') onError: (e: Event) => void = undefined;
  28. /** 变量类型是否为string */
  29. isString(value: string | number) {
  30. return typeof value === 'string';
  31. }
  32. /** 变量类型是否为number */
  33. isNumber(value: string | number) {
  34. return typeof value === 'number';
  35. }
  36. /** 私有变量,用来设置图片尺寸class */
  37. get _size() {
  38. // 将值返给ngClass使用
  39. return { [this.size]: this.isString(this.size) };
  40. }
  41. /** 构建行内样式css变量 */
  42. generateStyle() {
  43. const stack = [];
  44. this.isNumber(this.size) ? stack.push(`--n-merged-size:${this.size}px`) : '';
  45. this.round ? stack.push(`--n-border-radius: 50%`) : '';
  46. return stack.join(';');
  47. }
  48. /** 私有变量,用来设置行内样式,因为返给ngStyle会报错,无法使用css变量,所以返给[style] */
  49. get _style() {
  50. let value = this.generateStyle();
  51. return value;
  52. }
  53. /** 生命周期 */
  54. ngOnChanges(changes: SimpleChanges /* 暂时用不到,后续可能会用到这个参数 */) {
  55. /** 在Angular中,如果<n-avatar round></n-avatar>这么使用,Input,则在组件中取值为空字符串'' */
  56. this.round = this.round === '' ? true : false;
  57. }
  58. /** 生命周期 */
  59. ngOnInit(): void {}
  60. }

avatar.component.html

  1. <span class="n-avatar" [ngClass]="_size" [style]="_style">
  2. <img [src]="src" alt="" />
  3. </span>

更新中…