• vue中computed和watch


    computed 计算属性

    能够监听vue数据上的变化,页面上来就执行一次,每改变一次数据就又触发。在操作数据的时候,会派生出另一个事情

    1、函数形式
    computed:{
        listenArr(){
        /*
        使用data中数据,自动帮你监听数据的变化
        返回的结果就是通过改变数据 做的另一件事情(当数据变化时候需要做的事情)
        */
        }
    }
    2、对象形式
    computed:{
        listenArr:{
            get(){
                //获取时候
            },
            set(newVal){
                //修改时候
            }
        }
    }

    get是获取的时候执行的操作。set是修改时候执行的操作

    应用场景:

    比如在用户输入框改变数据的时候过滤数字;

    通过数据的变化,来进行累计;

    通过单选按钮的变化,来进行判断是否全选等等

    优点:指定看哪个数据,就只看哪个数据

    PS:需要注意的是  函数名,不要和data中的数据一样。

    <div id="app">      
            全选
            <input type="checkbox" v-model="all">
            <hr>
            <input type="checkbox" v-for="(val,key) in arr" v-model="val.checked">{{arr}}
    </div>
     new Vue({
            el:'#app',
            data:{
                arr:[
                    {checked:true},
                    {checked:false},
                    {checked:false},
                    {checked:true}
                ]
            },
            //当使用get和set时候,computed中定义的属性为一个对象
            //当不使用get和set时候,computed中定义的属性可以是一个函数
            computed:{
               /*
                all(){
                    return this.arr.every(e=>e.checked);
                }
               */
                all:{
                    get(){
                        //获取的时候执行的操作
                       return this.arr.every(e=>e.checked);
                    },
                    set(newVal){
                        //修改时候执行的操作。其中newVal 是改变之后的结果
                        return this.arr.forEach(e=>e.checked = newVal)
                    }
                }
            }
            
        });

    watch 指定数据监听器

    当指定数据发生变化时候触发。一开始不会触发,只有指定的数据发生变化就又触发一次
     
    第一种写法:
    watch:{
      要监听的数据名(新的数据,旧的数据){
      //只能监听一层,两层或者深层监听不到,需要deep为true(深度监听)
      }
    }
     
    第二种写法
    watch:{
      要监听的数据名(新的数据,旧的数据){
      handler(){
         //执行的操作
      },
      deep:true
      }
    }

    应用场景:

    监听路由参数的变化

    种localStorage的时候,深度添加等等

     <div id="app">      
           <input type="text" v-model="val">
           <ul>
               <li v-for="(val,key) in arr">
                   <input type="checkbox" v-model="val.checked">
               </li>
           </ul>
           {{arr}}
     </div>
    new Vue({
            el:'#app',
            data:{
                val:'hao123',
                arr:[
                    {checked:true},
                    {checked:false},
                    {checked:false},
                    {checked:false}
                ]
                
            },
            watch:{
                arr:{
                    handler(v){
                        localStorage.setItem('data',JSON.stringify(v))
                    },
                    deep:true
                }
            }
    
        });
        function getStorage(name){
            //存储到本地
            let data = localStorage.getItem(name) || '[{"checked":false},{"checked":false},{"checked":false}]';
            return  JSON.parse(data); //[] -> [{}]
        }

    总结:computed和watch都起到监听一个数据,并进行处理的作用 

    计算属性会根据依赖的属性进行缓存,只有依赖的属性发生变化,下次获取的值才会重新计算

    watch用于观察和监听vue实例,每当监听的数据变化时都会执行回调进行后续操作

    computed 是一个数据受多个数据影响,当进行数值计算并且依赖其他数据时应使用computed,可以利用其缓存特性 避免每次获取值时重新计算

    watch 是一个数据影响多个数据,主要用于数据变化时异步操作或者开销较大的情况

    computed在监听数据变化时候,上来就会执行一次。而watch页面上来是不会执行的,只有指定数据发生变化才会触发

    computed具有缓存性,值不变化会读取缓存,watch无缓存性,值不变化也会执行

  • 相关阅读:
    UML(Unified Modeling Language)统一建模语言
    20、ASP.NET MVC入门到精通——WebAPI
    16、ASP.NET MVC入门到精通——MVC过滤器
    .net开发过程中Bin目录下面几种文件格式的解释
    13、ASP.NET MVC入门到精通——MVC请求管道
    15、ASP.NET MVC入门到精通——MVC-路由
    14、ASP.NET MVC入门到精通——Ajax
    10、ASP.NET MVC入门到精通——Model(模型)和验证
    12、ASP.NET MVC入门到精通——HtmlHelper
    8、ASP.NET MVC入门到精通——View(视图)
  • 原文地址:https://www.cnblogs.com/theblogs/p/10353771.html
Copyright © 2020-2023  润新知