切换 Class 项 Vue.js
Toggle Class for an item Vue.js
所以我有一个使用 vue 资源从 api 引入的数据列表。我正在尝试将此列表与 bootstrap 手风琴集成。
所以:
我已经设置好了:
data: {
taller: false
}
和
<div class="panel panel-default"
v-repeat="faq: faqs | filterBy searchText"
v-transition="staggered"
stagger="200"
v-on="click: toggleHeight"
v-class="active: taller">
所以在点击时我将调用 toggleHeight 并通过 faq 实例:
toggleHeight: function(faq) {
this.taller = true;
}
此函数将 taller 设置为 true,但是它将所有常见问题解答项都设置为 true,而不仅仅是我传递给切换高度的那个。
如何只returntaller: true
点击常见问题解答项目?
谢谢
首先,你只有一个变量taller
。不是每个常见问题解答。所以你必须把它改成这样:
new Vue({
el: '#faq-list',
data: {
faqs: [{id:'foo',taller:false},{id:'bar',taller:true}]
},
methods: {
toggleHeight: function (faq, ev) {
faq.taller = false;
ev.target.classList.add('active');
}
}
});
你的 HTML 是这样的:
<div id="faq-list">
<div class="panel panel-default"
v-repeat="faq: faqs"
v-on="click: toggleHeight (faq, $event)"
v-class="active: taller">
{{ faq.id }}</div>
</div>
为了好玩,我添加了 CSS 以查看工作情况:
.active {
color: red;
}
这里是JSfiddle,供大家参考和摆弄。单击列表中的一项,它变为红色。
<div id="demo">
<div class="input-group">
<input class="form-control" v-model="searchText">
</div>
<script id="item-template" type="x-template">
<div
class="stag"
v-on="click: toggleHeight()"
v-class="active: taller"
>
<h3>{{ item.question }}</h3>
<h4>{{ item.answer }}</h4>
</div>
</script>
<question
v-repeat="item: items | filterBy searchText"
v-transition="staggered"
stagger="200">
</question>
</div>
</div>
和 js:
Vue.component('question', {
template: document.querySelector('#item-template'),
data: function() {
return {
taller: false
}
},
methods: {
toggleHeight: function() {
this.taller = ! this.taller
}
}
});
new Vue({
el: '#demo',
ready: function() {
this.fetchItems();
},
methods: {
fetchItems: function() {
this.$http.get('/dev/frequently-asked-questions/api/index', function(items) {
this.$set('items', items);
});
}
}
});
必须使用组件更直接地定位每个项目。
所以我有一个使用 vue 资源从 api 引入的数据列表。我正在尝试将此列表与 bootstrap 手风琴集成。
所以:
我已经设置好了:
data: {
taller: false
}
和
<div class="panel panel-default"
v-repeat="faq: faqs | filterBy searchText"
v-transition="staggered"
stagger="200"
v-on="click: toggleHeight"
v-class="active: taller">
所以在点击时我将调用 toggleHeight 并通过 faq 实例:
toggleHeight: function(faq) {
this.taller = true;
}
此函数将 taller 设置为 true,但是它将所有常见问题解答项都设置为 true,而不仅仅是我传递给切换高度的那个。
如何只returntaller: true
点击常见问题解答项目?
谢谢
首先,你只有一个变量taller
。不是每个常见问题解答。所以你必须把它改成这样:
new Vue({
el: '#faq-list',
data: {
faqs: [{id:'foo',taller:false},{id:'bar',taller:true}]
},
methods: {
toggleHeight: function (faq, ev) {
faq.taller = false;
ev.target.classList.add('active');
}
}
});
你的 HTML 是这样的:
<div id="faq-list">
<div class="panel panel-default"
v-repeat="faq: faqs"
v-on="click: toggleHeight (faq, $event)"
v-class="active: taller">
{{ faq.id }}</div>
</div>
为了好玩,我添加了 CSS 以查看工作情况:
.active {
color: red;
}
这里是JSfiddle,供大家参考和摆弄。单击列表中的一项,它变为红色。
<div id="demo">
<div class="input-group">
<input class="form-control" v-model="searchText">
</div>
<script id="item-template" type="x-template">
<div
class="stag"
v-on="click: toggleHeight()"
v-class="active: taller"
>
<h3>{{ item.question }}</h3>
<h4>{{ item.answer }}</h4>
</div>
</script>
<question
v-repeat="item: items | filterBy searchText"
v-transition="staggered"
stagger="200">
</question>
</div>
</div>
和 js:
Vue.component('question', {
template: document.querySelector('#item-template'),
data: function() {
return {
taller: false
}
},
methods: {
toggleHeight: function() {
this.taller = ! this.taller
}
}
});
new Vue({
el: '#demo',
ready: function() {
this.fetchItems();
},
methods: {
fetchItems: function() {
this.$http.get('/dev/frequently-asked-questions/api/index', function(items) {
this.$set('items', items);
});
}
}
});
必须使用组件更直接地定位每个项目。