computed用法
计算属性就是当依赖的属性的值发生变化的时候,才会触发他的更改,如果依赖的值,不发生变化的时候,使用的是缓存中的属性值。
1、函数形式
import { computed, reactive, ref } from 'vue'let price = ref(0)//$0let m = computed<string>(()=>{return `$` + price.value})price.value = 500
2、 对象形式
<template><div>{{ mul }}</div><div @click="mul = 100">click</div></template><script setup lang="ts">import { computed, ref } from 'vue'let price = ref<number | string>(1)//$0let mul = computed({get: () => {return price.value},set: (value) => {price.value = 'set' + value}})</script><style></style>
computed购物车案例
<template><div><table style="width:800px" border><thead><tr><th>名称</th><th>数量</th><th>价格</th><th>操作</th></tr></thead><tbody><tr :key="index" v-for="(item, index) in data"><td align="center">{{ item.name }}</td><td align="center"><button @click="AddAnbSub(item, false)">-</button>{{ item.num }}<button @click="AddAnbSub(item, true)">+</button></td><td align="center">{{ item.num * item.price }}</td><td align="center"><button @click="del(index)">删除</button></td></tr></tbody><tfoot><tr><td></td><td></td><td></td><td align="center">总价:{{ $total }}</td></tr></tfoot></table></div></template><script setup lang="ts">import { computed, reactive, ref } from 'vue'type Shop = {name: string,num: number,price: number}let $total = ref<number>(0)const data = reactive<Shop[]>([{name: "小满的袜子",num: 1,price: 100},{name: "小满的裤子",num: 1,price: 200},{name: "小满的衣服",num: 1,price: 300},{name: "小满的毛巾",num: 1,price: 400}])const AddAnbSub = (item: Shop, type: boolean = false): void => {if (item.num > 1 && !type) {item.num--}if (item.num <= 99 && type) {item.num++}}const del = (index: number) => {data.splice(index, 1)}$total = computed<number>(() => {return data.reduce((prev, next) => {return prev + (next.num * next.price)}, 0)})</script><style></style>
