zoukankan      html  css  js  c++  java
  • 关于vue的computed、filters、watch

    filters

    这个属性大家可能用的不是很多

    因为一般的数组过滤我们用 es6的filter就能完成了

    我想到一个场景,网上买书促销

    满100减50

    满两百减100

      <input type="text" v-model="price"/>
      <p>满100减50</p>
      <p>满200减100</p>
      <p>折后价格:{{price | priceFilter}}</p>
    
       data:{
        price:100
      },    
      filters:{
        priceFilter(price){
          let disCount = 0
          if(price>=100 && price <200){
            disCount = 50
          }else if(price > 200){
            disCount = 100
          }else{
            
          }
          price = price - disCount
          return price
        }
      }
    

     这种场景用filters就比较适合了

    computed

    computed适合比较单纯的数据改动,拼接等操作并且保存在一个新的变量里

    比如拼接姓和名

      <p>{{lastName}}{{firstName}}</p>
      <p>computed:{{username}}</p>
      <input type="text" v-model="firstName"/>
      <input type="text" v-model="str"/>
    
    
      data:{
        firstName:'小明',
        lastName:'王',
        str:'213'
      },
      computed:{
        username:function(){
          console.log(123)
          return this.lastName + this.firstName
        }
      }
    

     特别注意的是,computed会缓存

    在我们要监听的数据没有变化的时候,是不会再去执行对象相应的数据的

    比如修改str,不会输出123

    但是如果是filters的话,会重新执行里面的操作,不会缓存

    所以,computed性能比较好

    watch

    watch监听一我一般用来处理页面的联动效果

    一般是发请求或者监听路由进行相应操作

     watch想说的是  immediate 和 deep两个属性

    immediate在数据第一次改变前就会调用

    适合初始化数据

      <select name="codeName" v-model="selectedOption" id="">
        <option :value="item" v-for="item in selectArr">{{item}}</option>
      </select>
    
    const vm = new Vue({
      el:"#app",
      data:{
        selectArr:['js','java'],
        selectedOption:'js',
        showText:''
      },
      
      watch:{
        selectedOption:{
         handler:function(val, oldVal){
          this.showText = this.selectedOption
        },
        immediate:true
        }
      }
    }

     deep是深度监听,能监听对象新增属性值

      <input type="text" v-model="deepA.obj.y">
      <input type="text" v-model="deepB.obj.y">
    
    const vm = new Vue({
      el:"#app",
      data:{
        deepA:{x:1,obj:{y:1}},
        deepB:{x:2,obj:{y:2}}
    }
    
     watch:{
        deepA:{
         handler:function(val, oldVal){
          console.log('deepA has change')
        },
        deep:false
        },
        deepB:{
         handler:function(val, oldVal){
          console.log('deepB has change')
        },
        deep:true
        }
      }
    

     当我们改变 deepA的时候,watch不会触发

    deepB因为有了 deep:true所以触发了

    另外:input改变deepA和deepB的时候都会触发 filters里面方法(不会缓存)

    以上所有demo的地址

  • 相关阅读:
    anaconda安装
    MySQL数据库安装(windows 10 64bit)
    Redis数据库安装(windows 10 64bit)
    MongoDB可视化界面配置
    MongoDB安装(windows 10环境)
    四,程序流程控制之函数
    三,程序流程控制之顺序结构、分支结构与循环结构
    一,Python入门
    关于如何使用Python绘制基本数据图形模型
    关联分析
  • 原文地址:https://www.cnblogs.com/anxiaoyu/p/10673390.html
Copyright © 2011-2022 走看看