zoukankan      html  css  js  c++  java
  • Vue的监听属性基础知识学习

    监听属性 watch

    检测Vue实例中的数据变动,可以依据数据变动作出相应动作(就是自己定义函数来干些事儿!)

    <body>
        <div id="app">
            千米:<input type="text" v-model="kilometers"> 米: <input type="text" v-model="meters">
        </div>
        <script src="../node_modules/vue/dist/vue.js"></script>
        <script>
            const app = new Vue({
                el: "#app",
                data: {
                    kilometers: 0,
                    meters: 0
                },
                // 定义监听器 监听属性:meters, kilometers
                // 其中一个值发生变化,另外一个就会调用
                watch: {
                    kilometers(val) {
                        this.meters = val * 1000;
                    },
                    meters(val) {
                        this.kilometers = val / 1000;
                    }
                }
    
            })
        </script>
    </body>
    

    注意点

    时刻注意this指向
    不要使用箭头函数来定义监听器属性,箭头函数绑定的是父级作用域的上下文,上面那个例子中this指向window, 会导致this.meters=undefined,this.kilometers=undefined

    适合场景

    当需要数据变化时执行异步或者开销较的操作时,使用监听器最为合适。比如可以开一个web worker去干其他事情看看下面的例子:开了一个worker去计算,watch-fib.html专心数据展示

    1. faibnaci.js
    // 完成斐波那契额数列的计算
    function fib(n) {
        if (n == 1 || n == 2) return n;
        return arguments.callee(n - 1) + arguments.callee(n - 2);
    }
    onmessage = function(event) {
        // 将数据转为10进制整数
        var num = parseInt(event.data, 10);
        console.log(num);
        postMessage(fib(num));
    }
    
    1. watch-fib.html
    <body>
        <div id="app">
            <input type="text" v-model="num">
            <p v-show="result">{{result}}</p>
        </div>
        <script src="../node_modules/vue/dist/vue.js"></script>
        <script>
            const app = new Vue({
                el: "#app",
                data: {
                    num: 0,
                    result: ''
                },
                methods: {
    
                },
                watch: {
                    num(val) {
                        // 这里可以设置一个中间状态,提示用户页面没有卡主
                        this.result = "请稍等........";
                        if (val > 0) {
                            let worker = new Worker('./fibonaci.js');
                            // 注意this指向
                            worker.onmessage = (event) => this.result = event.data;
                            worker.postMessage(val);
                        } else {
                            this.result = '';
                        }
                    }
                }
            })
        </script>
    

    监听器的形式

    • 监听方法名
    • 监听一个对象的属性变化
    const app = new Vue({
                el: "#app",
                data: {
                    person: {
                        age: 0,
                        name: "Bob"
                    }
                },
                watch: {
                    person: {
                        handler(val, oldVal) {
                            if (val.age >= 10) {
                                this.info = "已成年";
                            } else {
                                this.info = "未成年";
                            }
                        },
                        deep: true
                    }
                }
            });
    
    • deep 深层次监听
    • immediate 监听函数立即执行

    与计算属性的区别

    监听属性用于监听Vue实例的数据变动,并依据该数据变动作出响应,如更新另外一个数据,或者发出异步请求从服务端请求数据,与计算属性区别就是监听器不需要返回新的数据,不能被当做数据属性使用,当需要数据变化时执行异步或者开销较大的操作时,使用监听器最为合适

    github地址

    https://github.com/suckitfa/watcher-attrs
    

    参考

    • 《Vue.js从入门到实战》
    慢慢来,比较快!基础要牢,根基要稳!向大佬致敬!
  • 相关阅读:
    tensorflow 2.0 学习 (十) 拟合与过拟合问题
    tensorflow 2.0 学习 (九) tensorboard可视化功能认识
    tensorflow 2.0 学习 (八) keras模块的认识
    tensorflow 2.0 学习 (七) 反向传播代码逐步实现
    tensorflow 2.0 学习 (六) Himmelblua函数求极值
    tensorflow 2.0 学习 (五)MPG全连接网络训练与测试
    arp协议简单介绍
    Pthread spinlock自旋锁
    线程和进程状态
    内核态(内核空间)和用户态(用户空间)的区别和联系·
  • 原文地址:https://www.cnblogs.com/rookie123/p/14765465.html
Copyright © 2011-2022 走看看