Javascript 根据vue js中选中的复选框和隐藏/显示按钮显示/隐藏表格数据
我想显示/隐藏我的表数据。当我选中复选框并单击按钮后打开时,我想隐藏它们,反之亦然 我可以将复选框值作为数组放到另一个非活动列表中,但不能绑定到按钮 这是我的组件文件Javascript 根据vue js中选中的复选框和隐藏/显示按钮显示/隐藏表格数据,javascript,vuejs2,Javascript,Vuejs2,我想显示/隐藏我的表数据。当我选中复选框并单击按钮后打开时,我想隐藏它们,反之亦然 我可以将复选框值作为数组放到另一个非活动列表中,但不能绑定到按钮 这是我的组件文件 <button class="btn btn-lg btn-primary" v-on:click="seen(inactiveList)">hide/show</button> <table class="row-border hover"> <tr>
<button class="btn btn-lg btn-primary" v-on:click="seen(inactiveList)">hide/show</button>
<table class="row-border hover">
<tr>
<th>Id</th>
<th>Title</th>
<th>UserId</th>
<th>Change Detail</th>
<th>Add Detail</th>
</tr>
<tr v-for = "(item,index) in paginate " :key= "index">
<td>{{item.id}}</td>
<td>{{item.title}}</td>
<td>{{item.userId}}</td>
<td><button class="btn btn-primary" >Edit</button></td>
<td><button class="btn btn-primary" >Add</button></td>
<td> <input type="checkbox" name="vehicle1"
v-on:change="list" v-bind:value="item" v-model="inactiveList"><br></td>
</tr>
</table>
<ul>
<li v-for="pageNumber in totalPages" v-if="Math.abs(pageNumber - currentPage) < 3
|| pageNumber == totalPages || pageNumber == 1">
<a v-bind:key="pageNumber" href="#" @click="setPage(pageNumber)"
:class="{current: currentPage === pageNumber,
last: (pageNumber == totalPages && Math.abs(pageNumber - currentPage) > 3),
first:(pageNumber == 1 && Math.abs(pageNumber - currentPage) > 3)}">{{ pageNumber }}</a>
</li>
</ul>
</div>
export default {
name: 'component2',
data(){
return{
currentPage: 1,
itemsPerPage: 10,
resultCount: 0,
inactiveList:[],
selected:false,
}
},
computed: {
...mapState([
'posts',
'loading'
]),
totalPages: function() {
return Math.ceil(this.resultCount / this.itemsPerPage)
},
paginate: function() {
debugger
if (!this.posts || this.posts.length != this.posts.length) {
return
}
this.resultCount = this.posts.length
if (this.currentPage >= this.totalPages) {
this.currentPage = this.totalPages
}
var index = this.currentPage * this.itemsPerPage - this.itemsPerPage
return this.posts.slice(index, index + this.itemsPerPage)
},
},
methods: {
setPage: function(pageNumber) {
this.currentPage = pageNumber
},
list: function(){
if(this.selected==false)
{
this.paginate.push= this.inactiveList;
return this.inactiveList
}
},
seen: function(inactiveList){
var index = this.inactiveList.length;
for(var i=0;i<index;i++)
{
this.inactiveList[i].id;
console.log(inactiveList[i].id)
}
},
},
mounted() {
this.$store.dispatch('loadPost');
},
}
</script>
import Vue from 'vue'
import Vuex from 'vuex'
import axios from "axios";
Vue.use(Vuex,axios);
export const store = new Vuex.Store({
state: {
posts:[],
loading: true
},
mutations:{
set_post(state,posts){
state.posts=posts;
},
changeLoadingState(state, loading) {
state.loading = loading
}
},
actions:{
loadPost({commit})
{
axios
.get('https://jsonplaceholder.typicode.com/posts')
.then(response => {
let post = response.data
console.log(post)
commit('set_post',post);
commit('changeLoadingState', false)
})
.catch(error => {
console.log(error)
this.errored = true
})
},
}
})
如果我正确地解除了对您的锁定,您希望切换每一行的可见性以及取消隐藏所有隐藏项的可能性 要做到这一点,您应该给每个项目一个布尔标志,如果它当前可见或不可见。 您可以将其作为属性直接存储在每个项目的数据中,或者,如果是排序数据,则可以基于索引创建一个数组,如果项目的排序发生了变化,则可以创建一个映射
data() {
return {
useVisibility: false,
items: {} // id -> item
};
},
不要忘记填充有关此示例代码的映射
现在,由于您已经提供了状态,您必须将输入绑定到每个项布尔标志
<input type="checkbox" name="item.name" @change="setVisibility(item.id, $event)" :value="item.visible" />
如果您不知道我为什么在这里使用Vue.set,请阅读反应性系统。但也许有更好的方法来更新标志
要取消隐藏所有隐藏项,只需迭代所有项,并使用v-on:click处理程序将可视标志设置为true
编写计算属性以获取可见项的列表
computed: {
visibleItems() {
if (this.useVisibility) {
// filter unchecked boxes
return Object.values(this.items).filter(item => item.visible)
// to filter checked boxes use the invert
// return Object.values(this.items).filter(item => !item.visible)
} else {
return Object.values(this.items)
}
}
}
并使用v-for渲染列表。注意。使用项目的id,以便VDOM可以正常工作
<tr v-for="(item, index) in visibleItems" :key="item.id">
...
<input type="checkbox" name="item.name" @change="setVisibility(item.id, $event)" :checked="item.visible" />
</tr>
...
隐藏/显示所有选中项的按钮
<button @click="useVisibility = !useVisibility"/>
请参见此如果我正确地解除了对您的锁定,您希望切换每行的可见性以及取消隐藏所有隐藏项的可能性 要做到这一点,您应该给每个项目一个布尔标志,如果它当前可见或不可见。 您可以将其作为属性直接存储在每个项目的数据中,或者,如果是排序数据,则可以基于索引创建一个数组,如果项目的排序发生了变化,则可以创建一个映射
data() {
return {
useVisibility: false,
items: {} // id -> item
};
},
不要忘记填充有关此示例代码的映射
现在,由于您已经提供了状态,您必须将输入绑定到每个项布尔标志
<input type="checkbox" name="item.name" @change="setVisibility(item.id, $event)" :value="item.visible" />
如果您不知道我为什么在这里使用Vue.set,请阅读反应性系统。但也许有更好的方法来更新标志
要取消隐藏所有隐藏项,只需迭代所有项,并使用v-on:click处理程序将可视标志设置为true
编写计算属性以获取可见项的列表
computed: {
visibleItems() {
if (this.useVisibility) {
// filter unchecked boxes
return Object.values(this.items).filter(item => item.visible)
// to filter checked boxes use the invert
// return Object.values(this.items).filter(item => !item.visible)
} else {
return Object.values(this.items)
}
}
}
并使用v-for渲染列表。注意。使用项目的id,以便VDOM可以正常工作
<tr v-for="(item, index) in visibleItems" :key="item.id">
...
<input type="checkbox" name="item.name" @change="setVisibility(item.id, $event)" :checked="item.visible" />
</tr>
...
隐藏/显示所有选中项的按钮
<button @click="useVisibility = !useVisibility"/>
请参见此
paginate
是一个函数,而不是一个对象-因此它肯定没有一个push
方法。语句this.inactiveList[i].id的目的是什么代码>在函数中循环列表的中?我正在获取非活动列表的id。由于我是Vue JS新手,您在获取id后没有做任何有用的事情。如果您希望通过单击按钮从数组中包括/排除项目,请在单击处理程序中执行此操作itemsArray[index].flagVisible=!itemsArray[index].flagVisible
,然后向数据表提供过滤结果集,例如,`:items=“itemsArray.filter(item=>!!item.flagVisible)”您可以为单击处理程序编写代码吗?分页是一个函数,而不是一个对象-因此它肯定没有推送方法。语句this.inactiveList[i].id的目的是什么代码>在函数中循环列表的中?我正在获取非活动列表的id。由于我是Vue JS新手,您在获取id后没有做任何有用的事情。如果您希望通过单击按钮从数组中包括/排除项目,请在单击处理程序中执行此操作itemsArray[index].flagVisible=!itemsArray[index].flagVisible
然后为数据表提供过滤结果集,例如,`:items=“itemsArray.filter(item=>!!item.flagVisible)”您可以为单击处理程序编写代码吗???是的,但我想在按钮单击时显示/隐藏它们我正在将选中的数据存储到空数组中,然后在按钮单击时,我想隐藏我包含的隐藏stuff.return Object.values(this.items.filter(item=>item.visible)按钮这里的Object.values是什么??因为this.items在此szenario中是键/值映射,而不是数组,Object.values()只获取值,即作为数组的项。是的,但我想在按钮单击时显示/隐藏它们我正在将选中的数据存储到空数组中,然后在按钮单击时,我想隐藏我包含的按钮隐藏stuff.return Object.values(this.items).filter(item=>item.visible)这里的object.values是什么?因为this.items在此szenario中是一个键/值映射,而不是一个数组,object.values()只作为数组获取值aka items。