【问题标题】:How can I add images on the Angular 2/4 material design select component如何在 Angular 2/4 材料设计选择组件上添加图像
【发布时间】:2017-08-01 15:24:16
【问题描述】:

我正在使用material angular select component。单击选择器时我可以看到图标,但问题是当我选择一个选项时,它只显示值而不显示图标。

目前代码正在重写<md-option>,删除<img>标签并添加{{bodyStyle.viewValue}}

app.component.html

<div class="form-control form-control--center">                 
 <md-select [(ngModel)]="selectedBodystyle" floatPlaceholder="never" name="bodyStyle">
    <md-option *ngFor="let bodyStyle of bodyStyles" [value]="bodyStyle.value">
        <img src="{{bodyStyle.icon}}" alt="{{bodyStyle.viewValue}}">
            {{bodyStyle.viewValue}}

    </md-option>
 </md-select>
</div>

app.component.ts

  selectedBodystyle: string;
  bodyStyles = [
    { value: 'Mercedez' , viewValue: 'Mercedez', icon: "http://lorempixel.com/50/50/transport/" },
    { value: 'Ferrari'  , viewValue: 'Ferrari' , icon: "http://lorempixel.com/50/50/transport/" },
    { value: 'BMW'      , viewValue: 'BMW'     , icon: "http://lorempixel.com/50/50/transport/" }
  ];

更新

我尝试在viewValue 属性中添加图像

{ value: 'Ferrari'  , viewValue: '<img src="http://lorempixel.com/50/50/transport/" alt="Ferrari">Ferrari' }

但它以纯文本形式加载 html,在被选中后不显示图像

这是它在选择一个选项后显示的内容,它删除了仅显示 viewValue 中的唯一内容的图像

【问题讨论】:

  • 有一个公开的 PR 可以为您简化此过程 github.com/angular/material2/pull/3341。我不确定没有组件工厂和一些诡计是否可能
  • 我一直在尝试如何在 中传递图像,因为它就是它所选择的......让我检查你的链接......谢谢

标签: angular angular-material2


【解决方案1】:

更新(在 md-menu beta.8 旁边显示图标):

您可以在md-menu 旁边放置一个单独的&lt;img&gt; 标签,并使用所选菜单项中的图像src。请注意,为此,value 需要与整个对象绑定,而不仅仅是对象属性。

html:

<div class="form-control form-control--center">  
<i *ngIf="selectedIcon"><img [src]="selectedIcon" alt="selectedIcon" style="margin-bottom: -15px"></i>
 <md-select [(ngModel)]="selectedBodystyle" 
            floatPlaceholder="never" 
            name="bodyStyle"
            (change)="optionSelected($event)">
    <md-option *ngFor="let bodyStyle of bodyStyles" [value]="bodyStyle">
        <img [src]="bodyStyle.icon" [alt]="bodyStyle.viewValue">
            {{bodyStyle.viewValue}}
    </md-option>
 </md-select>
</div> 

ts:

export class SelectFormExample {
  selectedBodystyle: string;
  selectedIcon;
  bodyStyles = [
    { value: 'Mercedez' , viewValue: 'Mercedez', icon: "http://lorempixel.com/40/40/transport/" },
    { value: 'Ferrari'  , viewValue: 'Ferrari' , icon: "http://lorempixel.com/30/30/transport/" },
    { value: 'BMW'      , viewValue: 'BMW'     , icon: "http://lorempixel.com/50/50/transport/" }
  ];

  optionSelected(event){
    // console.log(event.value.icon);
    this.selectedIcon = event.value.icon;
  }
}

Plunker demo

原文:

使用[src]="bodyStyle.icon" 而不是src="{{bodyStyle.icon}}"

我建议对alt="{{bodyStyle.viewValue}}" 也这样做。改为[alt]="bodyStyle.viewValue"

【讨论】:

  • 我的代码和你的plunker完全一样......我需要的是在被选中后显示图标
  • 我更新了问题,我尝试了一些方法但没有奏效
  • 正如威尔所说,material2 没有简单的方法来显示所选选项的图像。但是,我为您创建了一个解决方法。再次检查plunker,让我知道它是否适合您...
  • 这解决了我的问题,你所做的事情是有道理的。我不知道为什么看起来你的 plunkr 不起作用它改变了文本而不是图像......我改变了 lorempixel 图像和工作正常。如果您可以使用 plunkr 代码做出新的答案,我将标记为解决方案.. 希望它可以帮助其他人
  • 很高兴它解决了您的问题。我已经更新了答案。另外,只是想指出,图像没有改变,因为它们都有相同的图像src。我已经为每个项目使用不同的src 更新了 plunker,现在每个选项都会更改。
【解决方案2】:

这是在黑暗中拍摄,但请尝试

<img [src]="bodyStyle.icon"...

【讨论】:

  • 我试过这个选项,问题是选择一个选项后它显示的是值而不是图像
猜你喜欢
  • 1970-01-01
  • 2018-05-08
  • 1970-01-01
  • 2017-12-10
  • 1970-01-01
  • 2017-12-17
  • 2018-02-09
  • 2019-02-22
  • 2017-11-24
相关资源
最近更新 更多