首页 > 其他分享 >Vue(十):监视属性——watch

Vue(十):监视属性——watch

时间:2023-07-06 21:11:22浏览次数:31  
标签:Vue watch isHot weather numbers oldValue 监视 newValue

1.监视属性的基本用法

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>天气案例-监视属性</title>
        <script type="text/javascript" src="../js/vue.js"></script>
    </head>
    <body>
        <div id="root">
            <h1>今天的天气{{weather}}</h1>
            <button @click="changeWeather">改变天气</button>
        </div>
    </body>
    <!-- 
        监视属性watch
            写法:
                1.写在vm实例内部的watch配置
                2.写在vm实例外部,vm.$watch
            作用:被监视的属性改变时,回调函数执行,进行相关操作
            注意:被监视的属性必须存在,计算属性也可以被监视
     -->
    <script>
        const vm = new Vue({
            el: "#root",
            data: {
                isHot: true
            },
            computed: {
                weather() {
                    return this.isHot ? "炎热" : "凉爽"
                }
            },
            methods: {
                changeWeather() {
                    this.isHot = !this.isHot
                }   
            },
            //监视属性的第一种写法,写在实例内部
            watch: {
                isHot: {
                    //immediate默认为false,当设置为true时会在一开始就调用一次handler
                    immediate:true,
                    //handler在被监视的属性变化时调用
                    handler(newValue, oldValue) {
                        console.log("isHot变化了", oldValue, newValue)
                    }
                }
            }
        })

        //监视属性的第二种写法,写在vm实例外部,注意属性要加引号
        vm.$watch("weather", {
            handler(newValue, oldValue) {
                console.log("weather变化了", oldValue, newValue)
            }
        })
    </script>
</html>

2.深度监视

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>天气案例-深度监视</title>
        <script type="text/javascript" src="../js/vue.js"></script>
    </head>
    <body>
        <div id="root">
            <h1>a的值为:{{numbers.a}}</h1>
            <button @click="numbers.a++">a加一</button>
        </div>
    </body>
    <!-- 
        深度监视
        1.作用:监视有多个层级的属性,当对象内部值发生改变时,handler被调用
        2.写法:watch中加一个配置项 deep:true
     -->
    <script>
        const vm = new Vue({
            el: "#root",
            data: {
                numbers: {
                    a: 1,
                    b: 1,
                    c: {
                        c1: 1,
                        c2: 1
                    }
                }
            },
            //监视a的变化
            watch: {
                "numbers.a": {
                    handler(newValue, oldValue) {
                        console.log("a变化了", oldValue, newValue)
                    }
                },
                //监视整个numbers的变化,numbers中任意属性发生改变,都会触发handler
                numbers : {
                    deep: true, //开启深度监视
                    handler(newValue, oldValue) {
                        console.log("numbers变化了", oldValue, newValue)
                    }
                }
            }

        })

    </script>
</html>

3.监视属性简写

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>天气案例-监视属性简写</title>
        <script type="text/javascript" src="../js/vue.js"></script>
    </head>
    <body>
        <div id="root">
            <h1>今天的天气{{weather}}</h1>
            <button @click="changeWeather">改变天气</button>
        </div>
    </body>
    <!-- 
        简写的前提是除了handler不需要其他的配置项
     -->
    <script>
        const vm = new Vue({
            el: "#root",
            data: {
                isHot: true
            },
            computed: {
                weather() {
                    return this.isHot ? "炎热" : "凉爽"
                }
            },
            methods: {
                changeWeather() {
                    this.isHot = !this.isHot
                }   
            },

            watch: {
                isHot(newValue, oldValue) {
                    console.log("isHot变化了", oldValue, newValue)
                }
            }
        })

        vm.$watch("weather", function(newValue, oldValue) {
            console.log("weather变化了", oldValue, newValue)
        })
    </script>
</html>

 

(本文仅作个人学习记录用,如有纰漏敬请指正)

标签:Vue,watch,isHot,weather,numbers,oldValue,监视,newValue
From: https://www.cnblogs.com/jmsstudy/p/17533351.html

相关文章

  • vue(七)路由 vue-router
    安装和使用通过vue-router路由管理页面之间的关系,是Vue.js的官方路由1、安装路由npminstall--savevue-router2、配置路由文件route/index.js//导入路由库import{createRouter,createWebHashHistory}from"vue-router"//导入静态页面importHomeviewfrom"../vi......
  • 【vue-问题】vue : 无法加载文件 D:\Program Files\nodejs\node_global\vue.ps1,因
    【vue-问题】vue:无法加载文件D:\ProgramFiles\nodejs\node_global\vue.ps1,因为在此系统上禁止运行脚本。解决方法:①:管理员方式运行PowerShell,输入get-ExecutionPolicy。如果它回复Restricted,表示是禁止的②:输入:set-ExecutionPolicyRemoteSigned③:输入Y(也有可能不会询问,直......
  • vue(六)网络请求
    AxiosAxios是一个基于promise的网络请求库,安装npminstall--saveaxios局部引入:组件中引入importaxiosfrom"axios"全局引入:main.js中引入,并挂载//在main.js中全局引入importaxiosfrom"axios"//挂载到全局constapp=createApp(App)app.config.globalPrope......
  • vue(五)CSS样式添加
    Vue具有三种样式化应用程序的方法:外部CSS文件。单文件组件(.vue文件)中的全局样式。单文件组件中组件范围的样式。外部CSS导入外部CSS文件import"./assets/reset.css";单组件全局样式<style>/*全局样式*/.btn{padding:0.8rem1rem0.7rem;......
  • Vue router 路由
    路由跳转页面和路由模式vue的路由路由的文档https://v3.router.vuejs.org/zh/api/路由是干什么的==》就是来负责跳转页面...反正是和页面打交道的vue+router是单页面应用(SPA)解释一下“什么是”单页面:整个项目==》只有一个html文件缺点:不合适做SEO目前来说:后台管理......
  • 第十篇 - Vue接收后台Json数据
    先看下想达到的效果,当用户名密码输错了,就报用户名密码错误。用户名密码成功了,就跳转到登录成功页面上一节已经实现SpringBoot封装Json数据,这次使用VuepostAPI获取Json数据HelloWorld.vue/*eslint-disable*/<template><divclass="login_container"><divclass="......
  • vue 3教程
    创建项目create-vue创建vue3项目推荐,这个库也是官方进行维护的,所以使用起来无烦恼,yyds。执行方式也是比较简单的,我们可以基于vite创建vue3或者vue2的项目npminitvue@3npminitvue@2依次填写和选择下列选项✔Projectname:…vue3-train项目名称✔AddTypeScript?......
  • vue3 安装 3d-force-graph
    1.首先创建vue3的项目2.创建好后通过开发工具打开项目并打开命令行,输入指令npminstall 3d-force-graph安装即可3.在使用的页面中引入 3d-force-graph<!--官网的basic案例--><template><!--ref用于在组件中引用当前的DOM元素。--><divref="container"></div><......
  • vue3 虚拟dom与diff算法
    diff算法vue3diff算法原码地址:  https://github.com/vuejs/core1.diff算法主要是说renderer.ts中patchChildren这段代码逻辑,如下:  2.diff算法排序分为无key时diff算法排序逻辑和有key时diff算法排序逻辑2.1无key时diff算法排序逻辑,分为三步如下,如图1中无key......
  • 2.vue-charts组件
    1.vue-echarts和echarts的区别·vue-echarts是封装后的vue插件,基于EChartsv4.0.1+开发,依赖Vue.jsv2.2.6+,功能一样的只是把它封装成vue插件这样更方便以vue的方式去使用它。·echarts就是普通的js库。 2.vue-echarts特征·轻量,高效,按需绑定事件·支持按需导入E......