【问题标题】:Return multiple values from a computed filter in Vue JS从 Vue JS 中的计算过滤器返回多个值
【发布时间】:2018-02-12 00:09:27
【问题描述】:

我有一个搜索框,当用户输入艺术家姓名时,它会显示与用户输入匹配的艺术家列表。

我想在搜索中的艺术家姓名旁边显示艺术家图像。

我有一个包含以下内容的对象。艺术家姓名作为键,图像路径作为值

Radiohead: 'path_to_image',
Elliott Smith:'path_to_image'

我有一个计算属性,用于过滤艺术家姓名以进行搜索。

computed: {
filteredArtists() {
  return Object.keys(this.artistsList).filter((artist) => {
    return artist.match(this.artistName)
  }) 
}

},

在我的模板中,我正在遍历值

<ul class="searchFliter" v-for="artist in filteredArtists">
  <li v-text="artist"></li>
</ul>

我找不到用计算值来管理它的方法。我可以轻松地遍历我的对象并显示艺术家姓名和艺术家图像,但无法过滤它。

提前致谢

【问题讨论】:

    标签: javascript vue.js vuejs2


    【解决方案1】:

    如果您想坚持您的数据结构,那么您可以通过多种方式设法将图像与匹配的艺术家一起显示。由于您实际上是在计算属性中获取artistList 对象的键列表,因此您可以使用该键通过artistList[artist] 获取路径。

    <ul class="searchFliter" v-for="artist in filteredArtists">
      <li>{{artist}} <img :src="artistList[artist]"></li>
    </ul>
    

    但是,如果您希望按照帖子标题中的建议从列表中返回多个值,那么您可以更改计算属性。

    filteredArtists() {
      let matches = return Object.keys(this.artistsList).filter((artist) => {
        return artist.match(this.artistName)
      }) 
    
      return matches.map(m => ({name: m, imagePath: this.artistsList[m]}))
    }
    

    这里的计算属性是查找所有匹配项,然后创建一个包含名称和图像路径的新对象。像这样在模板中使用它:

    <ul class="searchFliter" v-for="artist in filteredArtists">
      <li>{{artist.name}} <img :src="artist.imagePath"></li>
    </ul>
    

    当然,您也可以选择不同的数据结构。为什么不使用艺术家对象数组?

    [
      {name: "Radiohead", imagePath: "path to image"},
      {name: "Elliott Smith", imagePath: "path to image"}
    ]
    

    在这种情况下,您的计算属性就变成了

    filteredArtists() {
      return this.artistsList.filter(m => m.name.match(this.artistName))
    }
    

    【讨论】:

    • 这非常有效。非常感谢。我还有一个问题,如果我在
    • 中使用 v-text 显示文本,为什么这不起作用
  • @QaisAbouJaoudé 你想如何展示它? v-text = 什么?
  • v-text="艺术家"
  • @QaisAbouJaoudé 在答案的所有选项中,artist 是一个对象,您需要将属性与v-text 一起使用,如v-text="artist.name"。但我想不出你为什么会使用v-text。
  • 啊哈。谢谢。我是 Vue.js 的新手,所以我不确定什么是最好用的。但我发现使用 v-text 比将内容放在 html 标签之间更干净
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签