零基础入门Vue之窥探大法——计算与侦听

这篇具有很好参考价值的文章主要介绍了零基础入门Vue之窥探大法——计算与侦听。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在 上一小节 我介绍了我学习vue入门 插值语法 的过程。

在本篇,我将记录我对vue的 计算属性和侦听器 的学习记录

注:本篇对于”侦听“和”监听“是一个意思


一、计算属性

在官网上,可以看到这样一个例子:

<div id="example">
  {{ message.split('').reverse().join('') }}
</div>

Vue官方预判到了某些人学了Vue,会在{{}}写复杂的语句,而这些语句会大大降低可读性,但有时候又不得不去写这么复杂的逻辑来满足业务需求

因此Vue提供了新的配置项:computed

在面对每当我们读取变量时需要对变量进行处理后再现实的情况


1.1 计算属性的基本用法

看代码:

computedcomputed<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://v2.cn.vuejs.org/js/vue.js"></script>
    <title>梦开始的地方</title>
    <style>
        input{
            width: 500px;
            height: 50px;
        }
    </style>
</head>
<body>
    <div id="root">
        输入b站视频连接: <input v-model="bUrl"><br>
        该视频的id为: {{id}}
    </div>
</body>
<script type="text/javascript">
    new Vue({
        el:"#root", //绑定元素,el的属性值可以是dom节点也可以是css选择器
        data:{
            bUrl:"https://www.bilibili.com/video/BV1xC4y1C7Hz/?spm_id_from=333.1007.tianma.1-1-1.click", //这是可以存放用于展示的数据
        },
        computed:{
            id(){
                if(this.bUrl.includes("?")){
                    return this.bUrl.split("/").slice(-2,-1)[0];
                }

                return this.bUrl.split("/").slice(-1)[0];
            }
        }
    })
</script>
</html>

在这个例子中,在input框输入b站url链接,computed配置的方法会立刻计算,在dom节点可以当成属性来获取

为什么每次修改input的内容computed相关方法会重新执行一次呢?因为v-model对bUrl和input框的内容进行了双向绑定,一旦改变了其中一个另外一个也会跟着变化,变化的时候就会触发computed配置里面的相关方法


1.2 计算属性添加setter

除此之外,如果我要对计算属性的方法添加一个setter,那么就需要写成这样子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://v2.cn.vuejs.org/js/vue.js"></script>
    <title>梦开始的地方</title>
    <style>
        input{
            width: 500px;
            height: 50px;
        }
    </style>
</head>
<body>
    <div id="root">
        输入b站视频连接: <input v-model="bUrl"><br>
        该视频的id为: {{id}} <br>
    </div>
</body>
<script type="text/javascript">
    new Vue({
        el:"#root", //绑定元素,el的属性值可以是dom节点也可以是css选择器
        data:{
            bUrl:"https://www.bilibili.com/video/BV1xC4y1C7Hz/?spm_id_from=333.1007.tianma.1-1-1.click",
        },
        computed:{
            id:{
                get(){
                    if(this.bUrl.includes("?")){
                        return this.bUrl.split("/").slice(-2,-1)[0];
                    }

                    return this.bUrl.split("/").slice(-1)[0];
                },
                set(){
                    /* show your code. */
                }
            }
        }
    })
</script>
</html>

二、侦听器

在Vue中提供了单独的配置去监听变量的变化,这个配置项就是:watch


2.1 监听器的基本用法

对于watch来说,当被监听对象发生改变时会调用监听的回调函数(handler):

具体代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://v2.cn.vuejs.org/js/vue.js"></script>
    <title>梦开始的地方</title>
    <style>
        input{
            width: 200px;
            height: 20px;
        }
    </style>
</head>
<body>
    <div id="root">
        输入b站视频连接: <input v-model="msg"><br>
        变化: {{info}}
    </div>
</body>
<script type="text/javascript">
    new Vue({
        el:"#root", 、
        data:{
            msg:"hello", 
            info:"没变化"
        },
        watch:{
            msg:{
                handler(oldValue,newValue){
                    this.info = `之前是${oldValue},现在是${newValue}。`;
                }
            }
        }
    })
</script>
</html>

除此之外,你还可以用vm去创建

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://v2.cn.vuejs.org/js/vue.js"></script>
    <title>梦开始的地方</title>
    <style>
        input{
            width: 200px;
            height: 20px;
        }
    </style>
</head>
<body>
    <div id="root">
        输入b站视频连接: <input v-model="msg"><br>
        变化: {{info}}
    </div>
</body>
<script type="text/javascript">
    let vm = new Vue({
        el:"#root", 
        data:{
            msg:"hello", 
            info:"没变化"
        },
    });

    vm.$watch('msg',function(oldValue,newValue){
        this.info = `之前是${oldValue},现在是${newValue}。`;
    });
</script>
</html>

2.2 监听器的各种配置

详见文档

  • deep
  • immediate

deepimmediate:true,<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://v2.cn.vuejs.org/js/vue.js"></script>
    <title>梦开始的地方</title>
    <style>
        input{
            width: 50px;
            height: 20px;
        }
    </style>
</head>
<body>
    <div id="root">
        <h1>{{mark.subject}}</h1>
        当前学习进度:{{mark.process}} % <br>
        输入要修改的值:<input type="text" v-model="newValue"> <button @click="changeProcess">确认</button>
    </div>
</body>
<script type="text/javascript">
    let vm = new Vue({
        el:"#root", 
        data:{
            newValue:0,
            mark:{
                subject:"Vue课程学习进度",
                process:30
            }
        },
        watch:{
            mark:{
                deep:true, //开启深度监听,即遇到对象时对象成员变化也会触发handler
                immediate:true, //开启立即执行,即刚一开始dom渲染也会被调用一次
                handler(oldV,newV){
                    if(!newV){
                        return; //把这个注释掉可以体会下有无immediate的区别
                    }
                    alert("老师修改进度为:"+ newV.process);
                }
            }
        },
        methods: {
            changeProcess(){
                this.mark.process = this.newValue;
            }
        },
    });
</script>
</html>

2.3 监听的两种简写方式

如果要使用监听的简写方式意味着你放弃了配置 immediate 和 deep 属性

就是将,原本配置对象的地方,改为一个函数,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://v2.cn.vuejs.org/js/vue.js"></script>
    <title>梦开始的地方</title>
    <style>
        input{
            width: 200px;
            height: 20px;
        }
    </style>
</head>
<body>
    <div id="root">
        输入b站视频连接: <input v-model="msg"><br>
        变化: {{info}}
    </div>
</body>
<script type="text/javascript">
    new Vue({
        el:"#root", 
        data:{
            msg:"hello", 
            info:"没变化"
        },
        watch:{
            msg(oldValue,newValue){
                this.info = `之前是${oldValue},现在是${newValue}。`;
            }
        }
    })
</script>
</html>

The More

计算属性缓存-vs-方法

计算属性-vs-侦听属性


本节完~~~~文章来源地址https://www.toymoban.com/news/detail-809341.html

到了这里,关于零基础入门Vue之窥探大法——计算与侦听的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue学习-计算属性和侦听器

    1、计算属性的定义和原理 1、定义:要用的属性不存在,要通过已有属性计算得来。 2、原理:底层借助了Objcet.defineproperty方法提供的getter和setter。 3、get函数什么时候执行?   (1) 初次读取时会执行一次。   (2)当依赖的数据发生改变时会被再次调用。 4、优势:与

    2023年04月18日
    浏览(50)
  • Vue--》计算属性与监视(侦听)属性的使用

    目录 计算属性(computed) 监视属性(watch) 监视的两种方法 immediate选项 深度监视/

    2024年02月02日
    浏览(40)
  • vue中的计算属性和侦听属性的区别

    计算属性: computed  computed是用来计算出来一个值 ,这个值调用的时候不需要加括号,会根据依赖进行缓存,依赖不变,computed的值不会重新计算 侦听属性: watch (两个属性) 1immediate:表示是否要在第一次渲染的时候执行这个函数 2deep:如果我们监听一个对象,那么我们是

    2024年02月22日
    浏览(34)
  • Web前端 ---- 【Vue3】computed计算属性和watch侦听属性(侦听被ref和reactive包裹的数据)

    目录 前言 computed watch watch侦听ref数据 ref简单数据类型 ref复杂数据类型 watch侦听reactive数据 本文介绍在vue3中的computed计算属性和watch侦听属性。介绍watch如何侦听被ref和reactive包裹的数据 在vue3中,计算属性computed也是组合式api,也就是说要先引入,再在setup中使用 语法 完整:

    2024年01月18日
    浏览(62)
  • 【vue2】计算属性(computed)与侦听器(watch)详解

    🥳博       主: 初映CY的前说(前端领域) 🌞个人信条: 想要变成得到,中间还有做到! 🤘本文核心: 计算属性与侦听属性的用法 目录( 文末有给大家准备好的Xmind思维导图 ) 一、计算属性computed ①默认get()方法,仅是获取值 ②不仅仅是获取值,还具有修改属性功能

    2024年01月16日
    浏览(52)
  • 浅谈在 Vue2 和 Vue3 中计算属性和侦听器的一些变化

    计算属性 computed 和侦听器 watch 都是 Vue.js 框架中用来响应式更新视图的重要概念。因此无论是在哪个版本,它们都是不可缺少的概念, 这篇文章就不过多详细介绍计算属性和侦听器的概念和理论了 ,接下来主要谈谈 Vue2 和 Vue3 中计算属性和侦听器的语法变化和异同。 计算属

    2023年04月26日
    浏览(55)
  • vue04---计算属性/监听(侦听)属性/Vue生命周期/组件介绍和使用/组件间通信/ref属性

    # 1 计算属性是基于它们的依赖变量进行缓存的 # 2 计算属性只有在它的相关依赖变量发生改变时才会重新求值,否则不会变(函数只要页面变化,就会重新运算) # 3 计算属性就像Python中的property,可以把方法/函数伪装成属性 # 4 计算属性,必须有返回值 基本使用 重写过滤案

    2024年02月08日
    浏览(64)
  • 深入与浅谈 Vue 中计算属性和侦听器的区别和使用(Vue3版本为例)

    #五一技术创作马拉松# 计算属性 computed 和侦听器 watch 都是 Vue.js 框架中用来响应式更新视图的重要概念。在 Vue 项目开发中,这两个技术点是非常重要的,同时也是 Vue 基础中不可缺少的知识点。在面试中,计算属性 computed 和侦听器 watch 也是经常出现的考点,作为前端开发也

    2024年02月07日
    浏览(72)
  • Vue3 计算属性和侦听器实战(computed、watch)——简易点餐页面

    这篇文章记录一下 Vue3 计算属性和侦听器 (computed、watch) 实战的内容,这篇文章我们在有计算属性和侦听器的基础上,我们来制作一个简易点餐页面,接下来我们一起来从零到一开始制作。 计算属性和侦听器相关文章推荐: 深入与浅谈 Vue 中计算属性和侦听器的区别和使用

    2024年02月09日
    浏览(100)
  • 计算机视觉:窥探数字世界的眼睛

    目录 简介: 一. 计算机视觉的起源与发展 二. 计算机视觉的应用领域 三. 计算机视觉的挑战与未来发展 结论: 计算机视觉(Computer Vision)是人工智能(AI)领域中的一个重要分支,专注于研究如何使计算机系统能够“看见”、理解和解释图像和视频的技术。它旨在模拟人类

    2024年02月12日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包