1. 实现搜索计算
1.1 搜索逻辑描述



1.2 实现思路:
- 渲染出搜索列表,并添加相应样式
- 存储选中结果,为了保证数据,采用搜索列表的索引值为key值
- 交互数据同步
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<style>
ul{
background:
padding: 0px;
margin: 0px;
}
ul li{
list-style: none;
padding: 10px 40px;
}
ul li a {
padding: 0px 10px;
}
.active{
background:
}
.choose-box{
height: 40px;
padding-left: 40px;
line-height: 40px;
background:
}
.choose-box span {
background:
padding: 2px;
border: 1px solid
margin-left: 10px;
background: transparent;
}
.choose-box span a{
background:
padding: 0px 6px;
}
</style>
</head>
<script>
var dataList=[{
typeName:'性别',
contentList:['男','女','不限']
},{
typeName:'爱好',
contentList:['读书','跑步','游泳','篮球']
},{
typeName:'技术',
contentList:['头发特长','Java','React','Vue']
}]
</script>
<body>
<div id='app'>
<div class='choose-box' >
已选结果
<span v-for="item,key in choose" @click="remove(key)">
{{item}}
<a>x</a>
</span>
</div>
<ul>
<li v-for="data,index in dataList">
{{data.typeName}}:
<a herf='javascript;'
v-for="item,i in data.contentList"
@click="addChoose(item,index,i)"
v-bind:class="{active:data.index===i}"
>{{item}}</a>
</li>
</ul>
</div>
<script>
//选中状态data数据
dataList.forEach(item=>item.index=-1)
let vm =new Vue({
el:'#app',
data:{
dataList,
choose:{}
},
methods:{
addChoose(item,index,i){
this.$set(this.choose,index,item)
this.dataList[index].index=i
console.log(this.choose)
},
remove(key){
this.$delete(this.choose,key)
this.dataList[key].index=-1
}
}
})
</script>
</body>
</html>
复制代码
2.实现全选功能
2.1 全选功能描述
- 点击全选时,全部子项选中,取消全选时,全部子项取消选中

- 在全选状态下,取消选中其中一个子项,取消全选,所有子项选中时,全选选中

2.2 实现思路
- 单选按钮,及全选按钮使用
v-model进行
数据绑定
- 全选按钮根据计算获取,使用Vue的
computed
属性设置和获取全选按钮的状态
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src='./src/vue.js'></script>
<title>全选功能</title>
<script>
var data=[
{checked:true,name:'JAVA'},
{checked:true,name:'React'},
{checked:true,name:'Vue'},
{checked:true,name:'node'},
]
</script>
</head>
<body>
<div id='app'>
<p><input type="checkbox" v-model="checkedAll"/>全选</p>
<p v-for="item in data">
<input type="checkbox" v-model="item.checked"/>
{{item.name}}
</p>
</div>
<script>
var vm=new Vue({
el:'#app',
data:{
data
},
computed:{
checkedAll:{
get(){//获取全选状态
return data.every(one=>one.checked)
},
set(newValue){//设置全选状态
this.data.forEach(item=> item.checked=newValue)
}
},
}
})
</script>
</body>
</html>
复制代码