效果
代码
< template>
< div id= "box" >
< ! -- 全选功能-- >
< input type= "checkbox" @change= "handleChange" v- model= "isAllChecked" / >
< ! -- 绑定事件,不选用click,使用change每次check值改变会触发双向绑定布尔值-- >
< ul>
< li v- for = "data in datalist" >
< input type= "checkbox" v- model= "checkgroup" : value= "data" @change= "handleLiChange" / >
< ! --
v- model绑定数组,且要有value值
value使用数组绑定
: value= "data.number||data.price||data.id||data.number*data.price"
-- >
{ { data } }
< ! -- 设置添加删除按钮-- >
< button @click= "handleDelClick(data)" > del< / button>
< ! -- 用户体验限制不小于0 所以不能使用data. number-- -- >
{ { data. number} } < ! -- 当前数量-- >
< button @click= "data.number++" > add< / button>
< ! -- data. number++ 自增1 点击事件,简单逻辑可直接使用代码-- >
< / li>
< / ul>
{ { checkgroup } }
< p> 总金额计算: { { getSum ( ) } } < / p>
< ! -- 函数表达式,函数要有返回值-- >
< / div>
< / template>
< script lang= 'ts' >
import { reactive, toRefs, onBeforeMount, onMounted } from "vue" ;
import { useRouter, useRoute } from "vue-router" ;
export default {
name : "" ,
setup ( ) {
let router = useRouter ( ) ,
route = useRoute ( ) ;
const data = reactive ( {
checkgroup : [ ] ,
isAllChecked : false ,
datalist : [
{
name : "商品1" ,
price : 10 ,
number : 1 ,
id : "1" ,
} ,
{
name : "商品2" ,
price : 20 ,
number : 2 ,
id : "2" ,
} ,
{
name : "商品3" ,
price : 30 ,
number : 3 ,
id : "3" ,
} ,
] ,
getSum ( ) {
var sum = 0 ;
for ( var i in this . checkgroup) {
sum += this . checkgroup[ i] . number * this . checkgroup[ i] . price;
}
return sum;
} ,
handleChange ( ) {
console. log ( "改变了" , this . isAllChecked) ;
if ( this . isAllChecked) {
this . checkgroup = this . datalist;
} else {
this . checkgroup = [ ] ;
}
} ,
handleLiChange ( ) {
console. log ( "handleLiChange-判断是不是都勾选" ) ;
if ( this . checkgroup. length === this . datalist. length) {
this . isAllChecked = true ;
} else {
this . isAllChecked = false ;
}
} ,
handleDelClick ( data ) {
data. number-- ;
if ( data. number === 0 ) {
data. number = 1 ;
}
} ,
} ) ;
onBeforeMount ( ( ) => { } ) ;
onMounted ( ( ) => { } ) ;
const refData = toRefs ( data) ;
return {
... refData,
} ;
} ,
} ;
< / script>
< style scoped> < / style>