v-如果在v-for中以显示一个部分

时间:2018-10-29 08:23:20

标签: javascript vue.js vuejs2

我正在尝试执行诸如linkedin评论之类的操作,尽管页面上显示了多个帖子,但是如果您单击该帖子的“显示评论”,则只会显示该帖子的评论。

我的解决方案:在created()中创建162个布尔变量,然后使用v-for的索引来写我的v-if,但它不会打开我想要的div。当我对这些变量进行euqal时必须在created()中提及确实,他们都开放。我们只显示162个帖子!

当其为false时,单击其值后将其更改为true(已通过console.log进行了检查),但div无法打开!

<template>
  <span v-if="post.comments_status == 1" class="optiontext cursor-pointer" @click="showcomment(index)"><i
            class="fa fa-comment-o"></i> OPEN COMMENT SECTION FOR THIS POST 
  </span>

<div class="col-md-8" id="imtop" style="direction:rtl">

    <!-- v-if part to show comments-->
    <div v-if="Commenton[index] == true" class="col-md-12 commentsec">
        <div class="eachcomment col-md-12">
            <div class="usercomment">
                <img :src="images" class="pop-img-min"/>
            </div><!-- usercomment end-->
        </div>

    </div><!-- end of allposts-->
</div>
</template>

<script>
  import vSelect from 'vue-select'
  import axios from 'axios'
  export default {

  components: {vSelect},
  props: ['alltags','posts'],
  data() {
    return {
      searchoptions:[{label:'جدیدترین ',value:'newest'},{label:'محبوبترین',value:'محبوبترین'}],
      Commenton:[],
    }
  },

  created() {
    for(var i = 0; i<162;i++) {
      this.Commenton[i] = false;
    }

  },
  mounted() {
    this.getInitialUsers();
    this.scroll(this.post);
  },
  methods: {
    showcomment(indexof){
      if(this.Commenton[indexof] == false){
        this.Commenton[indexof]=true;
      }else if(this.Commenton == true) {
        this.Commenton=false;
      }
    },

  },

}


</script>

注意:它是一个单页面web应用,包含超过1000行代码,不得不删除很多部分,因此您可能会看到其他div标签或其他内容,但该程序正常运行。

我的后端是laravel,但我认为这与它无关!

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

You are having reactivity problems.

这些问题是由于vue由于Javascript环境的限制而无法检测到数组修改而导致的。要确保vue看到您所做的更改,请使用this.$set(object, key, value)

// Inside your created method:
this.$set(this.Commenton, i, false);

// inside you showComment method
    showcomment(indexof){

        if(this.Commenton[indexof] == false){
            this.$set(this.Commenton, indexof, true);
        }else if(this.Commenton[indexof] == true) {
            this.$set(this.Commenton, indexof, false);
        }


   },