全栈开发之路——前端篇(4)watch监视、数据绑定和计算属性

全栈开发一条龙——前端篇
第一篇:框架确定、ide设置与项目创建
第二篇:介绍项目文件意义、组件结构与导入以及setup的引入。
第三篇:setup语法,设置响应式数据。
辅助文档:HTML标签大全(实时更新)

本文继续介绍数据绑定、计算属性和比较重要的watch监视

文章目录

  • 一、单向绑定和双向绑定
      • 单向绑定
      • 双向绑定
  • 二、计算属性
      • 基本示例
  • 三、Watch监视数据
    • 1.作用范围
    • 2.watch的写法(基本类型)
    • 3.如何停止监视
    • 4.watch监视对象类型
      • 1)监视对象
      • 2)监视对象的属性
      • 3)监视reactive对象

一、单向绑定和双向绑定

单向绑定

<template><div class = "style_test">姓:  <input type = "text" :value="xin">  <br>名:  <input type = "text" :value="ming">  <br>全名:<input type = "text"></div>
</template><script>export default{name : 'Test',//组件名}
</script><script setup>import {ref} from 'vue'import {reactive} from 'vue'let xin = ref('张')let ming = ref('三')
</script>
<style>.style_test{background-color: rgb(72, 138, 166);box-shadow: 0 0 10px;border-radius:10px;padding: 20px;}
</style>

通过:value=“变量”,我们可以实现单向绑定,即数据可以由我设置好的变量流向页面。

但是当我们修改文本框之后,我们xin和ming是不会发生改变的 。

双向绑定

把:model改成v-model即可

<template><div class = "style_test">姓:  <input type = "text" v-model="xin">  <br>名:  <input type = "text" v-model="ming">  <br>全名:<span>{{xin}}{{ming}}</span></div>
</template>

双向绑定后就可以实时渲染修改的数据了。你在文本框里改数据,变量的值会立刻发生变化。

目前需求简单,你写 全名:<span>{{xin}}{{ming}}</span>倒也没什么,但是这个对象很难维护,比如,我需要中文转为拼音,那就解决不了了,所以我们要引入计算属性。

二、计算属性

我们先引入import {computed} from vue
为了解决刚刚上述的问题,如果我们可以写一个函数,进行一系列操作,最后返回我们想要的,那就方便了。

基本示例

<template><div class = "style_test">姓:  <input type = "text" v-model="xin">  <br>名:  <input type = "text" v-model="ming">  <br>全名:<span>{{fullname}}</span> <br><button @click="changename">改名为李四</button></div>
</template><script>export default{name : 'Test',//组件名}
</script><script setup>import {computed, ref} from 'vue'import {reactive} from 'vue'let xin = ref('张')let ming = ref('三')let fullname = computed({get(){  //读取时调取return xin.value+ming.value},set(source_data){  //设置时调取const [str1,str2] =  source_data.split('-')xin.value = str1ming.value = str2}})function changename(){fullname.value = '李-四'}
</script><style>.style_test{background-color: rgb(72, 138, 166);box-shadow: 0 0 10px;border-radius:10px;padding: 20px;}
</style>

接下来进行代码的讲解

首先,我们要先用computed函数,来构造个名字为fullname的计算属性。
然后我们要设置一个get函数和一个set函数。get函数会在每次要用到fullname的时候自动执行,返回值即其获得的值。
同理,在后续代码中修改fullname.value的时候,会自动调用set函数

比如这个修改,set函数的source_data 就会接收到’李-四’的值,然后根据-切分这个字符串,然后分别赋值给xin和ming。这样,再次调用fullname的时候,调用get函数的时候,就是更新后的值了,效果如图。


计算属性算出来的也是一个ref的响应式数据

三、Watch监视数据

import {watch} from 'vue'

1.作用范围

watch只能监视以下数据:
1.ref和reactive定义的数据
2.函数的返回值
3.一个包含以上内容的数组

2.watch的写法(基本类型)

语法是这样的watch(监视谁?, 监视到了要干嘛?)
一个代码示例如下:

<template><div class = "style_test"><h2>和为:{{sum}}</h2><button @click="add_sum">sum+1</button><h2>{{counter}}</h2></div>
</template>
<script setup>import {ref,watch} from 'vue'let sum = ref(0)let counter = ref(0)function add_sum(){sum.value += 1}watch(sum,() =>{counter.value+=1})</script>


如图,每次sun发生变化,就会自动执行watch函数中的回调函数。
注,在watch的时候,不需要加.value

3.如何停止监视

watch函数是由返回值的,返回一个停止监视的函数。我们用一个函数去接收他,然后在需要停止的时候调用即可。

   const stpw = watch(sum,() =>{counter.value+=1if(counter.value>=10){stpw()}})  


如此写代码,在counter大于10之后就不监视了。

4.watch监视对象类型

1)监视对象

如果在监视里写类名,那么只有对象指向的地址发生改变的时候才会监视到。

<template><div class = "style_test">       <h2>age为:{{person.age}}</h2><h2>name为:{{person.name}}</h2><button @click="add_name">age+1</button><button @click="change_person">换人</button><h2>age:{{counter}}</h2><h2>对象:{{counter2 }}</h2></div>
</template><script>export default {name : 'Test'//组件名}
</script><script setup>import {ref,watch} from 'vue'let person=ref({name : 'TTTi9er',age : 18})let counter = ref(0)let counter2 = ref(0)function add_name(){person.value.age += 1}const stpw = watch(person.age,() =>{counter.value+=1if(counter.value>=10){stpw()}})const stpw2 = watch(person,() =>{counter2.value+=1if(counter.value>=10){stpw2()}})function change_person(){person.value ={name : '张三',age  : 100}}
</script><style>.style_test{background-color: rgb(72, 138, 166);box-shadow: 0 0 10px;border-radius:10px;padding: 20px;}
</style>

2)监视对象的属性

想要监视对象的属性,我们需要使用watch的第三个参数来开启深度监视。

   const stpw = watch(person,() =>{counter.value+=1if(counter.value>=10){stpw()}},{deep : true})

这样不论是对象,还是对象的属性发生变化,都可以监视到。
据说还有可以监视特定对象的方法,参考链接,笔者亲测无效,如果有佬知道麻烦告知。

3)监视reactive对象

rective,默认是深度监视的,而且无法关闭

<template><div class = "style_test">       <h2>age为:{{person.age}}</h2><h2>name为:{{person.name}}</h2><button @click="add_name">age+1</button><button @click="change_person">换人</button><h2>age:{{counter}}</h2><h2>对象:{{counter2 }}</h2></div>
</template><script>export default {name : 'Test'//组件名}
</script><script setup>import {reactive,watch,ref} from 'vue'let counter= ref(0)let counter2= ref(0)let person=reactive({name : 'TTTi9er',age : 18})function add_name(){person.age += 1}const stpw = watch(person,() =>{counter.value+=1if(counter.value>=10){stpw()}},{deep : true})const stpw2 = watch(person,() =>{counter2.value+=1if(counter2.value>=10){stpw2()}})function change_person(){Object.assign(person,{name:'李四',age:100})}</script><style>.style_test{background-color: rgb(72, 138, 166);box-shadow: 0 0 10px;border-radius:10px;padding: 20px;}
</style>

监视的操作没区别,基本只有.value的差别。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/6151.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python | Leetcode Python题解之第64题最小路径和

题目&#xff1a; 题解&#xff1a; class Solution:def minPathSum(self, grid: List[List[int]]) -> int:if not grid or not grid[0]:return 0rows, columns len(grid), len(grid[0])dp [[0] * columns for _ in range(rows)]dp[0][0] grid[0][0]for i in range(1, r…

All In ai,Oracle 23C没了,等来了Oracle 23ai

今年一月份的Blog介绍Oracle命名规则的时候&#xff0c;说到Oracle的命名是紧紧跟随时代浪潮的前言科技的&#xff0c;在文章的最后还大胆预测也许Oracle的下一个版本就叫25A了&#xff0c;结果Oracle根本等不及&#xff0c;把原来已经海量宣传的Oracle 23C直接改名为23ai&…

分布式与一致性协议之Raft算法(四)

Raft算法 Raft是如何解决成员变更问题的 在日常工作中&#xff0c;你可能会遇到服务器故障的情况&#xff0c;这时你需要替换集群中的服务器。如果遇到需要改变数据副本数的情况&#xff0c;则需要增加或移除集群中的服务器。总的来说&#xff0c;在日常工作中&#xff0c;集…

如何基于nginx搭建https网站

华子目录 使用nginx的http_ssl模块建立加密传输的网站查看配置文件ssl配置文件的主要参数实验&#xff1a;搭建nginxssl加密认证的web服务器 使用nginx的http_ssl模块建立加密传输的网站 查看 [rootserver ~]# nginx -V #查看是否有--with-http_ssl_module模块&#xff0c;如…

AI时代,如何让ChatGPT成为你最好的编程老师|TodayAI

ChatGPT作为生成式预训练变换器&#xff08;GPT&#xff09;系列模型的一种&#xff0c;专门设计用来理解和生成文本&#xff0c;其生成的文本能够高度模仿人类的对话方式。这种能力不仅让它在进行日常对话时表现得像极了真人&#xff0c;还使其在各种专业领域内&#xff0c;比…

TCP四次挥手分析

TCP四次挥手分析 概念过程分析为什么连接的时候是三次握手&#xff0c;关闭的时候却是四次握手&#xff1f;为什么要等待2MSL&#xff1f; 概念 四次挥手即终止TCP连接&#xff0c;就是指断开一个TCP连接时&#xff0c;需要客户端和服务端总共发送4个包以确认连接的断开。 在…

基于深度学习的3D目标检测与跟踪

目标检测和跟踪对于自动驾驶来说是至关重要和基础的任务&#xff0c;旨在从场景中识别和定位出那些预定义类别的对象。在所有形式的自动驾驶数据中&#xff0c;3D点云学习引起了越来越多的关注。目前&#xff0c;有许多用于3D目标检测的深度学习方法。然而&#xff0c;鉴于点云…

【方法】PDF如何取消“限制编辑”?

我们知道&#xff0c;PDF设置“限制编辑”可以用来保护文件&#xff0c;设置后很多功能就会被锁定&#xff0c;比如无法编辑内容&#xff0c;无法打印&#xff0c;另存文件等等&#xff0c;可以看到大多数菜单选项都是灰色状态&#xff0c;无法点击。 那如果后续想要使用锁定的…

启动盘制作

魔术师pe安装教程 我一般使用魔术师来安装windows系统 魔术师pe地址下载 解压后使用 把ios映像文件放入pe系统u盘下 开机按f1,进入bios,将usb接口拉到本电脑&#xff0c;在按f10保存&#xff0c;在按f12即可找到pe的u盘 ventoy安装教程 其他系统安装我使用ventoy ventoy地…

宇宙最强Windows下载神器IDM,还不快用 互联网下载管理器(IDM)全面评测

互联网下载管理器&#xff08;IDM&#xff09;是一款功能强大的下载工具&#xff0c;自 1999 年问世以来&#xff0c;一直以其卓越的性能和稳定性受到用户的喜爱。IDM 可以帮助用户加速下载速度&#xff0c;最高可达 5 倍&#xff0c;同时还具有断点续传、定时下载、自动分类等…

第14章 软件测试过程和管理

一、测试过程模型 &#xff08;一&#xff09;组织级测试过程 用于开发和管理组织级测试规格说明。常用的组织级测试规格说明包括组织级测试方针和组织级测试策略。 &#xff08;二&#xff09;测试管理过程 1、内容 包括测试管理和动态测试。动态测试&#xff1a;测试设计…

大数据组件之Storm详解

Storm 是一个免费并开源的分布式实时计算系统&#xff0c;具有高容错性和可扩展性。它能够处理无边界的数据流&#xff0c;并提供了实时计算的功能。与传统的批处理系统相比&#xff0c;Apache Storm 更适合处理实时数据。 让我们深入了解一下 Storm&#xff1a; 1.Storm 简介…

超强动画制作软件blender

blender中文手册&#xff1a;Blender 4.1 Manual Blender 是一款集3D建模、渲染、动画、视频编辑、音频处理、游戏设计等多功能于一体的软件。由于其开源性质&#xff0c;它拥有庞大的用户群体和活跃的开发者社区&#xff0c;这使得Blender的功能和性能得到了不断的提升和优化…

【数学建模】2024五一数学建模C题完整论文代码更新

最新更新&#xff1a;2024五一数学建模C题 煤矿深部开采冲击地压危险预测&#xff1a;建立基于多域特征融合与时间序列分解的信号检测与区间识别模型完整论文已更新 2024五一数学建模题完整代码和成品论文获取↓↓↓↓↓ https://www.yuque.com/u42168770/qv6z0d/gyoz9ou5upv…

NI CRIO 9045 LABVIEW2020

1.labview工程如果要访问CRIO&#xff0c;需要设置以下&#xff0c;否则在项目中连接失败。 2.项目中如果要传文件&#xff0c;需要安装WebDEV 3.使用WebDAV将文件传输到实时(RT)目标 https://knowledge.ni.com/KnowledgeArticleDetails?idkA03q000000YGytCAG&lzh-CN

Redis协议与异步方式

Rredis Pipeline redis pipeline 是一个客户端提供的机制&#xff0c;而不是服务端提供的&#xff1b; pipeline 不具备事务性&#xff1b; 目的&#xff1a;节约网络传输时间&#xff1b; 通过一次发送多次请求命令&#xff0c;从而减少网络传输的时间。 Redis发布订阅 为了支…

下载Node.js及其他环境推荐nvm

文章目录 项目场景&#xff1a;下载Node.js环境配置配置环境变量 安装脚手架安装依赖安装淘宝镜像安装 cnpm&#xff08;我需要安装&#xff09;nvm 安装 Node.js &#xff08;推荐&#xff09; 项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 项目…

数据库管理-第179期 分库分表vs分布式(20240430

数据库管理179期 2024-04-30 数据库管理-第179期 分库分表vs分布式&#xff08;20240430&#xff09;1 分库分表1.1 分库1.2 分表1.3 组合1.4 问题 2 分布式3 常见分布式数据库4 期望总结 数据库管理-第179期 分库分表vs分布式&#xff08;20240430&#xff09; 作者&#xff1…

《Spring-MVC》系列文章目录

简介 Spring MVC是一种基于Java的实现MVC设计模式的请求驱动类型的轻量级Web框架&#xff0c;它通过把Model&#xff08;模型&#xff09;、View&#xff08;视图&#xff09;、Controller&#xff08;控制器&#xff09;分离&#xff0c;将web层进行职责解耦&#xff0c;把复杂…

记一次古董级netapp存储更换故障硬盘全过程

1、案例背景 记一次某医院PACS存储NetApp FAS2554更换故障硬盘的过程。 这个netapp设备以前从未调试过&#xff0c;据客户说该设备上线也有快9年了&#xff0c;头一次故障硬盘。因为己经过保了&#xff0c;客户只是采购的硬盘&#xff0c;我这来免费服务了。。。 netapp调试…