javascript - Vue.js 在列表中显示 v-show

标签 javascript vue.js vue-resource

我相信这对你们来说会非常容易。我试图制作一个简单的帖子列表,帖子标题始终可见,当您单击列表中的特定帖子时,您会看到帖子的正文。我为此使用了 v-show。但是,当我单击特定帖子时,会显示所有帖子的正文,而不仅仅是我单击的那个。

这是模板:

<template>
<div class="container">
    <h1>My Posts</h1>
    <ul class="list-group">
        <li class="list-group-item" v-for="post in list">
            <div @click="changeShow">
                <h4>{{ post.title }}</h4>
                <p v-show="show">{{ post.body }}</p>
                <span v-show="show" class="label label-primary">ID: {{ post.userId }}</span>
            </div>
        </li>
    </ul>

</div>

逻辑:

<script>

export default{

    data(){
        return{
            msg:'hello vue',
            list: [],
            show: false
        }
    },
    ready(){
        this.fetchPostList();
    },

    methods:{
        fetchPostList: function () {
            var root = 'http://jsonplaceholder.typicode.com';
            this.$http.get(root + '/posts').then(function (response) {
                this.list = response.data;
            })
        },
        changeShow: function () {
            this.show = !this.show;
        }
    }

}

最佳答案

根据您的需要,有几种方法可以解决这个问题。

多开

您可以让每个帖子成为它自己的组件,这样您就可以将show 绑定(bind)到每个单独的帖子而不是所有帖子。

Vue.component('post', {
  template: '#post-template',
  props: {
    post: Object,
  },
  data() {
    return {
      show: false,
    }
  },
  methods: {
    toggleShow() {
      this.show = !this.show
    },
  },
})

然后你可以像这样使用它:

<post v-for="post in posts" :post="post"></post>

一开

如果你只想打开一个,你可以传递一个 id 作为 Prop 并根据它显示它。

Vue.component('post', {
  template: '#post-template',
  props: {
    post: Object,
    selectedId: Number,
  },
  computed: {
    show() {
      return this.post.id === this.selectedId
    },
  },
})

然后你可以这样做

<post :selected-id="selectedId" :post="post" @click="selectedId = post.id"></post>

关于javascript - Vue.js 在列表中显示 v-show,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39778665/

相关文章:

javascript - Bootstrap 模式不使用 vue js v2 双向绑定(bind)更新

unit-testing - vue-test-utils : mocking vue-router and vuex in the same test

javascript - 在另一个 promise 中解决 promise

javascript - Vue.js 的 CORS 问题

javascript - 如何在使用 vue-resource 时使用 data(){} 但不使用 Mounted(){} 来启动函数

javascript - 断言在页面对象中不可用? - 无法读取未定义的属性 'ok'。

javascript - 组件渲染后,Vue.js 将 click 事件绑定(bind)到 v-html 内的 anchor 元素

javascript - 使用 jQuery 将 HTML 字符串转换为 DOM 对象

javascript - 我在 Angular 项目中有多个 ngFor 使用 trackBy :trackByFunction with single function or create multiple function?

vue.js - graphql-标签/加载器 : Module build failed with GraphQLError: Syntax Error