【问题标题】:how to get nested data in Vue js如何在Vue js中获取嵌套数据
【发布时间】:2016-03-09 04:21:02
【问题描述】:

我有一个显示项目列表的视图页面。单击某个项目时,当前项目详细信息将显示在详细视图页面上。 当前项目的标题和描述显示完美,但是对于每个项目,我还有一个包含 3 张图像的嵌套画廊,我也需要显示它们。这是jsFiddle

我正在使用List Rendering in Vue JS

HTML

  <h1 v-if="isActive(0)">Master View</h1>
  <h1 v-if="!isActive(0)">Detailed View</h1>

  <div id="breadcrumb">
    <a v-if="!isActive(0)" @click="setActive(0)">&lt; Back</a>
  </div>

  <main>
    <article>
      <h2>{{items[active].title}}</h2>
      <p>{{items[active].description}}</p>
    </article>

    <ul id="master-ul" v-if="isActive(0)">
      <li v-for="item in items" @click="setActive($index)">
        <img v-bind:src="item.thumbnail" alt="{{item.title}}" />
        <p>{{item.title}}</p>
      </li>
    </ul>

    <ul v-if="!isActive(0)">
      <!-- Need to display the nested images from the current index item -->
      <li v-for="item in items">
        <img v-bind:src="item.gallery.image" />
      </li>
    </ul>
  </main>

</div>

JS

new Vue({
  el: '#app',
  data: {
    active: 0,
    items: [{
      title: 'Default',
      description: 'lorem ipsum default',
      thumbnail: 'http://placehold.it/250x250'

    }, {
      title: 'One',
      description: 'lorem ipsum 1',
      thumbnail: 'http://placehold.it/250x250?text=Item+1+Thumb',
      gallery: {
        image: 'http://placehold.it/250x250?text=Item+1+image+1',
        image: 'http://placehold.it/250x250?text=Item+1+image+2',
        image: 'http://placehold.it/250x250?text=Item+1+image+3'
      }

    }, {
      title: 'Two',
      description: 'lorem ipsum 2',
      thumbnail: 'http://placehold.it/250x250?text=Item+2+Thumb',
      gallery: {
        image: 'http://placehold.it/250x250?text=Item+2+image+1',
        image: 'http://placehold.it/250x250?text=Item+2+image+2',
        image: 'http://placehold.it/250x250?text=Item+2+image+3'
      }

    }]
  },
  methods: {
    isActive: function(i) {
      return this.active === i
    },
    setActive: function(i) {
      return this.active = i
    }
  }
});

【问题讨论】:

    标签: nested vue.js


    【解决方案1】:

    已编辑:

    使用计算属性获取活动项目的图库

    &lt;img&gt; 标签上直接使用另一个 v-for 指令来循环浏览图库中的图像。

    computed: {
      activeImages: function () {
        return this.items[this.active].gallery
      }
    }
    <ul v-if="!isActive(0)">
     <li>
        <img  v-for="image in activeImages" v-bind:src="image" />
      </li>
    </ul>
    

    【讨论】:

    • 对不起,我很抱歉。这没有奏效。现在它正在从每个项目中获取最后一张图片。 jsfiddle.net/Lpg9dszq/6。我需要它来抓取所选项目中的图像。
    • 相应地编辑了我的答案。
    • 另外,如果你的数据真的像你的例子,gallery 对象不是有效的 Javascript,因为它们有重复的键,键必须是唯一的。
    • 我在 Vue 开发工具中收到控制台错误,提示“[Vue 警告]:评估表达式“item[active].gallery”时出错。而且我想我已经解决了重复键的问题.. jsfiddle.net/Lpg9dszq/13
    • 我也尝试过 item[0].gallery 但我得到了同样的错误
    猜你喜欢
    • 2022-01-25
    • 2021-01-11
    • 1970-01-01
    • 2021-09-13
    • 2021-01-03
    • 1970-01-01
    • 2020-12-17
    • 2021-01-26
    • 1970-01-01
    相关资源
    最近更新 更多