1使用计算属性 computed 实现按钮是否禁用

我们在有些业务场景的时候,需要将按钮禁用。
这个时候,我们需要使用(disabled)属性来实现。
disabled的值是true表示禁用。false表示可以使用。
由于disabled的值是动态变化的。
此时我们就可以使用计算属性computed 这个方法。
只要值发生变化 他就会重新去计算。
在vue3中,如果需要使用computed需要引入。
<template>
<div>
<div>
<div>
<input type="txet" v-model="cont" />
</div>
<button @click="func1" :disabled="flag">按钮</button>
</div>
</div>
</template>
<script>
import {ref,computed} from 'vue'
export default {
name: 'App',
setup(){
let cont=ref();
function func1(){
console.log(cont.value)
}
//按钮是否可以使用
let flag=computed(()=>{
return ( cont.value ? false : true )
})
return {flag,cont,func1}
},
}
</script>

2 将上面的控制按钮是否可以点击逻辑抽离出去

<template>
<div>
<div>
<div>
<input type="txet" v-model="cont" />
</div>
<button @click="func1" :disabled="flag">按钮</button>
</div>
</div>
</template>
<script>
import {ref,computed} from 'vue'
export default {
name: 'App',
setup(){
let cont=ref();
function func1(){
console.log('我可以点击了')
}
let {flag}=funFlag(cont);
return {flag,cont,func1}
},
} // 在vue3的computed计算属性中。我们需要使用的话
// 需要引入computed。
// computed 经常使用在按钮是否可以点击这样的场景
// disabled=false;顾名思义可以点击。 disabled=true不可以使用
//按钮是否可以使用
function funFlag(cont){
let flag=computed(()=>{
return ( cont.value ? false : true )
})
return {flag}
}
</script>

3 computed实现姓名的拼接

上面那一个案例实现的是按钮是否可以点击,
这次我们是用 computed 实现姓名的拼接。
其实computed只要是一个数据依赖另外几个或者一个数据的变化而变化的时候。
我们就可以使用computed 。
vue3中的计算属性的函数中如果只传入一个回调函数,表示的是get
<template>
<div>
<div>
<div>
姓:<input type="txet" placeholder="请输入姓" v-model="user.xing" /> <br>
名:<input type="text" placeholder="请输入名" v-model="user.ming">
</div>
</div> <div>
计算属性的使用
<input type="txet" placeholder="显示的是姓名" v-model="fullName" />
</div> </div>
</template>
<script>
import {reactive,computed} from 'vue'
export default {
name: 'App',
setup(){
let user=reactive({
xing:"李",
ming:"自成",
})
// vue3中的计算属性的函数中如果只传入一个回调函数,表示的是get
let fullName=computed(()=>{
return user.xing+"_"+user.ming
})
return {fullName,user}
},
}
</script>

4 computed中get和set的使用

当我们输入姓和名的时候,
下面的input框会进行拼接。
当我们改变下面input框的时候,上面姓的input框和名的input框的值,也会对应发生变化
如果我们需要使用computed的get和set方法的话,需要传递的是一个对象。
如果不需要使用get和set方法。传递的是一个箭头函数
<template>
<div>
<div>
<div>
姓:<input type="txet" placeholder="请输入姓" v-model="user.xing" /> <br>
名:<input type="text" placeholder="请输入名" v-model="user.ming">
</div>
</div> <div>
计算属性的使用
<input type="txet" placeholder="显示的是姓名" v-model="fullName" />
</div> </div>
</template>
<script>
import {reactive,computed} from 'vue'
export default {
name: 'App',
setup(){
let user=reactive({
xing:"李",
ming:"自成",
})
let fullName=computed({
//取user中值的时候触发
get(){
console.log(1)
return user.xing+"_"+user.ming
},
// 当重新设置fullName值发生变化的时候就会触发
set(value){
// value是fullName中显示的值
let names=value.split("_");
user.xing=names[0];
user.ming=names[1];
}
})
return {fullName,user}
},
}
</script>

5.watch属性中immediate,deep 的用法

immediate:true 表示的是会默认执行一次watch,
这样界面初次渲染数据才能够正确的显示姓和名的拼接。 deep:true,表示的是会进行深度的监听,
当我们监听的是一个对象,对象中的任何一个值发生变化的时候。
watch就会监听到.
<template>
<div>
<div>
<div>
姓:<input type="txet" placeholder="请输入姓" v-model="user.xing" />
<br />
名:<input type="text" placeholder="请输入名" v-model="user.ming" />
</div>
</div>
<div>
计算属性的使用
<input type="txet" placeholder="显示的是姓名" v-model="fullName" />
</div>
</div>
</template>
<script>
import { reactive,ref, watch} from "vue";
export default {
name: "App",
setup() {
let user = reactive({
xing: "李",
ming: "自成",
}); let fullName=ref(''); // 初次渲染的时候,无法自动去拼接姓和名
// watch(user,({xing,ming })=>{
// fullName.value=xing+"_"+ming
// }) // 这里使用了解构
// immediate:true 表示的是会默认执行一次watch,
// deep:true,表示的是会进行深度的监听
// 这样界面初次渲染数据才能够正确的显示姓和名的拼接
watch(user,({xing,ming })=>{
fullName.value=xing+"_"+ming
}, {immediate:true,}
)
return { fullName, user };
},
};
</script>

6.watch监听两个或者两个以上的数据监听

有两种方式:
第一种:再写一个watch.
第二种:一个watch.把他们变成一个数组
我更喜欢在写一个watch。可能很多人不太喜欢这样。
但是我觉得很直观

7. watchEffect 的用法

需要引入watchEffect 这个方法
监视,不需要配置immediate:true,
本身就会被默认执行一次
<template>
<div>
<div>
<div>
姓:<input type="txet" placeholder="请输入姓" v-model="user.xing" />
<br />
名:<input type="text" placeholder="请输入名" v-model="user.ming" />
</div>
</div>
<div>
计算属性的使用
<input type="txet" placeholder="显示的是姓名" v-model="fullName" />
</div>
</div>
</template>
<script>
import { reactive,ref, watchEffect} from "vue";
export default {
name: "App",
setup() {
let user = reactive({
xing: "李",
ming: "自成",
});
let fullName=ref('');
// 监视,不需要配置immediate:true,
// 本身就会被默认执行一次
watchEffect(()=>{
fullName.value=user.xing+"_"+user.ming
})
return { fullName, user };
},
};
</script>

端午总结Vue3中computed和watch的使用的更多相关文章

  1. vue 3 学习笔记 (七)——vue3 中 computed 新用法

    vue3 中 的 computed 的使用,由于 vue3 兼容 vue2 的选项式API,所以可以直接使用 vue2的写法,这篇文章主要介绍 vue3 中 computed 的新用法,对比 vue2 ...

  2. vue3中使用computed

    演示示例(vant组件库的轮播图): <van-swipe :loop="false" :width="150" class="my-Swipe ...

  3. vue3中watch函数

    watch 监听普通类型 let count = ref(1); const changeCount = () => { count.value+=1 }; watch(count, (newV ...

  4. Vue3中的响应式对象Reactive源码分析

    Vue3中的响应式对象Reactive源码分析 ReactiveEffect.js 中的 trackEffects函数 及 ReactiveEffect类 在Ref随笔中已经介绍,在本文中不做赘述 本 ...

  5. vue中computed(计算属性)和watch在实现父子组件props同步时的实际区分

    vue中computed和watch的对比是一个很有意思的话题. 看过官网教程以后,我们往往更倾向多使用computed.computed优点很多,却在某些时候不太适用. 今天我们就稍微讨论一下,当我 ...

  6. Vue中computed和watch的区别

    在vue中computed和watch的真正区别是:computed产生于它的依赖,而watch产生于它的依赖的变化.只要依赖存在,我们就能访问到其对应的computed属性:但只有依赖发生了改变,我 ...

  7. Vue中computed分析

    Vue中computed分析 在Vue中computed是计算属性,其会根据所依赖的数据动态显示新的计算结果,虽然使用{{}}模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的,在模板中放入太 ...

  8. vue3中使用axios如何去请求数据

    在vue2中一般放在created中,但是在vue3中取消了created生命周期,请求方式有两种 直接在setup中去获取数据 setup(props) { const data = reactiv ...

  9. 在vue3中使用router-link-active遇到的坑

    在使用 router-link-active 设置链接激活时CSS类名时,发现在例如 /member/order 和 /member/order/:id 这两个都包含 /member/order的路由 ...

随机推荐

  1. AZscaaner源码解读之数据库连接(一)

    准备开个新坑,但是可能近期不会更新,先写一篇开个头. sqlalchemy 目前在Python中使用得比较多的是sqlalchemy,sqlalchemy是一个对象关系映射(ORM).sqlalche ...

  2. 解决上传文件大小限制 PHP+Apache

    1.设置Apache文件大小上传限制 http.conf文件(apache/config目录下)添加如下设置(1G=1024*1024*1024): FcgidMaxRequestLen  53687 ...

  3. PHP 通用格式化调试函数

    /** * 打印调试函数 * @param $content * @param $is_die */function pre($content, $is_die = true){ header('Co ...

  4. 数据人必读!玩转数据可视化用这个就够了——高德LOCA API 2.0升级来袭!

    引言 "一图胜千言",大数据时代来临,数据与人们生活密切相关.复杂难懂且体量庞大的数据给人的感觉总是冷冰冰的,让人难以获取到重点信息,也找不出规律和特征,数据价值发挥不出来.空间数 ...

  5. 逆向工程初步160个crackme-------1

    放假在家学习的效率真的很低,看完看雪加密解密的前两章就迫不及待的找了几个crackme练习一下,顺便熟悉ollydbg的使用. 工具:exeinfope(查壳工具),ollydbg(2.10版) 1. ...

  6. 02、SpringBoot2入门

    1.系统要求 Java 8 & 兼容java14 . Maven 3.3+ idea 2019.1.2 1.1.maven设置 <mirrors> <mirror> & ...

  7. [笔记] 《c++ primer》显示器程序 Chapter7

    补充Sales_data没有体现出的其他类特性 Screen.h 1 #include <string> 2 #include <iostream> 3 4 class Scr ...

  8. 实例:使用playbook实现httpd安装、配置、以及虚拟主机的配置

    一.安装环境配置 1.在控制节点给受控主机配置本地仓库文件 [root@ansible ~]# vim /etc/yum.repos.d/dvd.repo [AppStream] name=appst ...

  9. 057.Python前端Django模型ORM多表查询

    一 基于对象的查询 1.1 一对多查询 设计路由 from django.contrib import admin from django.urls import path from app01 im ...

  10. linux中级之lvs配置(命令)

    一.nat模式配置 环境说明: DS:nat网卡(自动获取也可以,充当vip): 192.168.254.13 255.255.255.0 vmnet3网卡(仅主机): 172.16.100.1 25 ...