Vuejs打开/切换单个项目

时间:2017-07-10 17:45:32

标签: vue.js toggle each

我使用单个文件组件并在其中一个组件中有一个列表。这个列表应该像手风琴一样工作,但就我在Vuejs文档中找到的情况而言,单独打开每个项目并不容易。从ajax调用中检索数据(问题和答案)。我使用jQuery,但想知道我如何使手风琴工作Vuejs风格。任何帮助将不胜感激!

以下是代码:

export default {
  name: 'faq-component',
  props: ['faqid', 'faqserviceurl', 'ctx'],
  data: function () {
    return {
    	showFaq: "",
    	totalFaqs: this.data,
    	isOpen: true
     }
  },
  watch: {	  
	 'showFaq': function(val, faqid, faqserviceurl) {
		 var self = this;
		 $.ajax ({
             url: this.faqserviceurl,
             type: 'GET',
             data: {id: this.faqid, q: val, scope:1},
             success: function (data) { 
                self.totalFaqs = data; 
             },
             error: function () {
             	$("#answer").html('Sorry');
             }			 
		 });
	  }
  },
  methods: {
	  'toggle': function() {
		  this.isOpen = !this.isOpen
		  
	  }
  }
  
}
<template>
	<div class="card faq-block">		
		<div class="card-block">		
			<form>
				<div class="form-group">
					<input class="form-control" type="text" placeholder="Your question" id="faq" v-model="showFaq">
				</div>
			</form>		
			
			<div id="answer"></div>		
			<ul class="faq">
				<li v-for="faq in totalFaqs">
					<p class="question" v-html="faq.vraag" v-bind:class={open:isOpen} @click="isOpen = !isOpen"></p>
					<p class="answer" v-html="faq.antwoord"></p>
				</li>
			</ul>					
		</div>
	</div>
</template>

1 个答案:

答案 0 :(得分:1)

isOpen中的每个对象添加totalFaqs属性,并在数据中使用该属性而不是单个isOpen属性。

<p class="question" v-html="faq.vraag" v-bind:class={open: faq.isOpen} @click="faq.isOpen = !faq.isOpen"></p>

如果您无法从服务器端更改模型,请将其添加到客户端。

success: function (data) {
  data.forEach(d => self.$set(d, 'isOpen', false)) 
  self.totalFaqs = data 
}