【问题标题】:Changing <img> src with a dropdown menu with Vue使用 Vue 使用下拉菜单更改 <img> src
【发布时间】:2021-03-17 06:42:39
【问题描述】:

我是 Vue 的新手,我正在使用这个下拉菜单组件 (https://ej2.syncfusion.com/vue/documentation/drop-down-list/data-binding/) 从 json 数组中提取列表项,如下所示:

<template>
    <div id="app">
    <div id='container'>
        <ejs-dropdownlist id='dropdownlist' placeholder='Pick a name' :dataSource='images' :fields='fields'></ejs-dropdownlist>
    </div>
    <img v-for="image in images" :key="image.url" :src="require('@/assets/pics/' + image.url)">
  </div>
</template>

<script>
    export default {
        data() {
            return {
                images: [
                    {
                        id: 'm1',
                        name: 'Sample Name',
                        url: "../assets/pics/samplename.png"
                    },...

                    ],
                    fields : {text:'name', value:'id'}
            }
        }
    }
</script>

目前所做的只是通过v-for 循环一次列出所有图像,但我想从下拉菜单中的选定名称中获取 id/url 并将其传递给&lt;img&gt; 标记以下面只显示相应的图像,我该怎么做呢?谢谢!

【问题讨论】:

  • 下拉列表如何暴露它的选中项?没有v-model 或事件监听。
  • 我很新,所以我不确定这是否是您要问的,但它会使用 fields 属性公开所选项目,其中 name 和 id 值是绑定的
  • fields 属性是一种单向绑定,因此它不会随着下拉列表的选择而更新(并且可能仅引用某些字段/列数据)。检查文档后,我发现它支持v-model。我会发布答案

标签: javascript vue.js vuejs2 vue-component syncfusion


【解决方案1】:

您的下拉菜单需要v-model="selected" 绑定才能将所选图像传达给父级:

<ejs-dropdownlist v-model="selected"></ejs-dropdownlist> 
data() {
  return {
    selected: null, // Used by the dropdown
    images: [...]
  }
}

v-for 会导致模板循环遍历所有图像,因此您不希望这样。删除它并使用 selected 图像作为正确的 src:

<img v-if="selected" :src="require('@/assets/pics/' + selected.url)">

另一个问题是您的图像对象应该只有图像的名称,因为 assets 路径被硬编码到 src 绑定中:

{
   ...
   url: "samplename.png"
}

【讨论】:

  • 非常感谢您的成功!虽然一开始它不会呈现,但我不得不将“selected.url”更改为“selected”,并且字段属性中的值必须从“id”更改为“url”。
  • 不客气,我很高兴它有帮助。听起来下拉菜单不会自动公开整个数据对象,而只会公开您选择的属性。这是他们在设计该组件时做出的选择,但它的工作方式可能会有所不同
猜你喜欢
  • 1970-01-01
  • 2019-09-24
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-27
  • 1970-01-01
  • 2021-09-23
相关资源
最近更新 更多