首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用图像验证v-select

使用图像验证v-select
EN

Stack Overflow用户
提问于 2020-05-13 21:07:04
回答 3查看 6.1K关注 0票数 1

我使用的是Vuetify v-select组件:https://vuetifyjs.com/en/components/selects/

我想用这样的图像进行选择:

但我在文档里什么也没找到

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-05-13 21:45:37

您必须使用项目插槽https://vuetifyjs.com/en/components/selects/#api

代码语言:javascript
复制
<v-select :items="items" label="Standard">
   <template v-slot:selection="{ item, index }">
      <img :src="item.image">{{ item.name }}
   </template>
   </template>
   <template v-slot:item="{ item }">
      <img :src="item.image">{{ item.name }}
   </template>
</v-select>

JS:

代码语言:javascript
复制
new Vue({
  el: '#app',
  vuetify: new Vuetify(),
  data: () => ({
    items: [
      { name: 'Foo', image: 'https://www.gravatar.com/avatar/b17065ea1655f1e3283aac8d8fc16019?s=48&d=identicon&r=PG'},
      { name: 'Bar', image: 'https://www.gravatar.com/avatar/b17065ea1655f1e3283aac8d8fc16019?s=48&d=identicon&r=PG'},
      { name: 'Hoo', image: 'https://www.gravatar.com/avatar/b17065ea1655f1e3283aac8d8fc16019?s=48&d=identicon&r=PG'},
      { name: 'Coo', image: 'https://www.gravatar.com/avatar/b17065ea1655f1e3283aac8d8fc16019?s=48&d=identicon&r=PG'}],
  }),
})

JSFiddle:https://codepen.io/reijnemans/pen/vYNadMo?editors=1010

票数 12
EN

Stack Overflow用户

发布于 2020-05-13 22:09:17

您可以利用插槽将图像内容填充到select。我已经使用https://emoji-css.afeld.me/来获取国家的旗帜。

请看示例Codepen:https://codepen.io/aaha/pen/ZEbRwpy?editors=1011我无法填满整个国家/地区列表。如果你能填满它并分享,那就太好了,我也可以在其他地方用到它。:D

代码语言:javascript
复制
<v-select
  v-model="select"
  :items="countries"
  label="Select"
  item-text="name"
  >
  <template v-slot:item="slotProps">
    <i :class="['mr-2', 'em', slotProps.item.flag]"></i>
      {{slotProps.item.name}}
    </template>
 </v-select>
代码语言:javascript
复制
data: {
    select: null,
    countries: [
      {
        name: "Andorra",
        flag: "em-flag-ad"
      },
      {
        name: "Arab Emirates",
        flag: "em-flag-ae"
      },
      {
        name: "Afghanistan",
        flag: "em-flag-af"
      },
      {
        name: "Antigua & Barbuda",
        flag: "em-flag-ag"
      },
      {
        name: "Albania",
        flag: "em-flag-al"
      },
      {
        name: "Anguilla",
        flag: "em-flag-ai"
      }
   ],
  }
票数 4
EN

Stack Overflow用户

发布于 2021-01-17 21:59:55

我自己的组件实现使用了<v-menu>而不是<v-select>,所以在UI方面看起来像是想要的模拟,没有<v-select>的所有UI(比如底部边框、箭头、标签等等)。

简介:我被要求创建一个下拉选择器来在语言之间切换。选择不同的国家/地区将导致使用相应的所选语言翻译web应用程序

TL;DR:工作笔:https://codepen.io/narxx/pen/JjRxjrQ (很抱歉添加了一些额外的样式,不知道为什么Vuetify的样式没有加载,它看起来真的很糟糕。在我的项目中,它看起来很棒-我保证!:))

模板:

代码语言:javascript
复制
<v-menu offset-y>
  <template v-slot:activator="{ on, attrs }">
    <img
      style="width: 32px"
      class="d-block"
      :src="getIcon()"
      v-bind="attrs"
      v-on="on"
    />
  </template>
  <v-list>
    <v-list-item
      v-for="(lang, index) in langs"
      :key="index"
      class="lang-menu-item"
    >
      <div class="d-flex align-center" @click="setLang(lang.value)">
        <img style="width: 32px"
              :src="lang.iconSrc"
              class="mr-2 d-block"/>
        <span>{{ lang.text }}</span>
      </div>
    </v-list-item>
  </v-list>
</v-menu>

关于上面的模板的一些解释:

使用<v-menu>组件允许我们手动创建自己的html作为激活器元素,在本例中,我们希望将一个国家的旗帜显示为激活器元素。

<v-list>中,我们将通过迭代语言列表来手动创建下拉列表中的项(在langs中-请参阅JS部分)。

JS:

代码语言:javascript
复制
data () {
  return {
    selectedLang: this.$i18n.locale,
    langs: [
      {
        value: 'en',
        text: 'English',
        iconSrc: require('../assets/flags/eng.svg')
      },
      {
        value: 'fr',
        text: 'French',
        iconSrc: require('../assets/flags/fr.svg')
      },
    ],
  }
},
computed: {
  getIcon () {
    return (item) => {
      let image = item || this.selectedLang
      let iconSrc = null
      Object.keys(this.langs).forEach( (index) => {
        if (this.langs[index].value === image) {
          iconSrc = this.langs[index].iconSrc
        }
      })
      return iconSrc
    }
  },
},
methods: {
  setLang(lang) {
    this.selectedLang = lang
    this.$i18n.locale = lang
  },
}

对上面代码的一些解释

selectedLang是我们在选择新语言时要改变的反应变量。将默认使用当前i18n语言环境中的任何内容。

langs:给定一个对象列表,其中包含语言名称(将在下拉列表中的屏幕上打印的文本)、稍后将应用于i18n元素以更改应用程序的区域设置的值,以及表示国家/地区的图像的链接。也可以是svg的base64,也可以是标志字体的类名,等等。

getIcon:将接受语言值的计算结果(代码如enfr..)遍历langs中的所有语言,并返回与要在下拉列表和激活器元素中显示的给定值匹配的图像。

setLang:在下拉列表中注册单击事件后更改语言的方法,触发此方法。当然,您将更改此方法,以便在项目中做任何您想做的事情。

CSS (lang sass):

代码语言:javascript
复制
.lang-menu-item
  cursor: pointer
  &:hover
    background-color: var(--v-primaryBG-base)

只要让列表看起来好一点就行了。背景颜色是我在项目中使用的变量,用于整个应用程序的默认背景。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61775457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档