1 computed函数
1.1例子:vue2的写法
<template >
<div class="container">
<div>标题</div>
<div>{{ msg }}</div>
<button @click="ClickBtn">点击显示父组件信息</button>
<br />
第一个数:<input type="text" v-model="data.firstNum" />
<br />
第二个数:<input type="text" v-model="data.scordNum" />
<div>加起来:{{addNum}}</div>
</div>
</template>
<script >
import { reactive } from "@vue/reactivity";
name: "tabbar";
export default {
props: {
msg: String,
},
emits: ["handleBtn"], //组件放出去的事件也需要给在组件内部声明一下
computed: { //计算属性
addNum(){
return Number(this.data.firstNum)+Number(this.data.scordNum)
// 确保相加的是两个数字 而不是单纯的数值相加
}
},
setup(props, context) {
const data = reactive({
firstNum: 10,
scordNum: 2,
});
console.log(props); //传进来的值在此处可以被打印
console.log(context);
//点击组件内按钮 提交信息给父组件
function ClickBtn() {
//事件名 参数
console.log("点击自组件");
context.emit("handleBtn", "蚌埠住了");
}
return {
ClickBtn,
data,
};
},
};
</script>
<style lang="less" scoped>
.container {
margin: 10px;
background: cornsilk;
width: 100%;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
</style>
1.2 vue3中的计算属性的写法
先引入computed的属性
然后在setup中使用
return的值就是fullName的值
都在setup中不需要用this(也用不了)
之后记得在setup的函数return中return出来才可以在模板中使用
或者
以上情况只考虑了不修改计算属性的值的情况 只考虑了读的情况
在set中通过”-“进行拆分成数组(仅针对于以上案例中的拆分)
2 watch监听属性(功能与vue2 中的一致)
2.1 vue2 的写法
1 简易写法
2 handler写法
2.2 vue3中的写法
直接在setup中写watch,在setup中监听已经变成了内置的函数,
不用const 因为watch是一种行为,不是数据
情况一 :监视ref所定义的 一个 数据
情况二 :监视ref所定义的 多个 数据
vue3中可以调用多次watch函数
监视多个数据
监视多个数据的简便写法
把数据放进数组里
那么监听返回的数据也是数组
添加配置项
1 一般监听是数据发生变化之后再执行,那么我想要上来直接执行一遍watch怎么操作(之前是配置immediate为true)
实际上watch可以传递三个参数
第一个是监听的对象 第二个是执行操作的回调函数 第三个是个对象用来放置配置项
情况三 监听reactive定义的一个整个响应式数据(有坑!!!)
(有坑注意:此处无法正确的获得oldValue)
在vue3 中的reactive中 不论层级有多深 不用deep也可以监听到数据的变化
没办法关闭deep配置
情况四 监听reactive定义的一个整个响应式数据中的某一个属性值
把监视的参数改成函数的返回值(让箭头函数指向这个值,或者直接return这个值)
这里的oldValue是可以正常工作的
情况五 监听reactive中定义的响应式数据中的某些属性值
返回值放进数组中
特殊情况
课程链接:https://www.bilibili.com/video/BV1Zy4y1K7SH?p=152&spm_id_from=pageDriver
(对象类型的比较容易出问题)
总结: