VUE的过滤器、计算属性、侦听器的使用语法和场景

过滤器 - filter

转换数据格式的函数, 传入值返回处理后的值

应用:插值表达式 和 v-bind 表达式

定义语法

全局过滤器:Vue.filter("过滤器名", 函数体)
  Vue.filter("过滤器名", (值) => {return "返回处理后的值"})

局部过滤器:filters: { 过滤器() { }}
filters: {
   过滤器名: (值) => {return "返回处理后的值"}
}

使用语法


插值表达式使用:{{ 值 | 过滤器名 }}   (| 管道操作符)
属性绑定使用: v-bind:属性 = "值 | 过滤器名"

过滤器传参和多过滤器:
   过滤器传参:   vue变量 | 过滤器(实参) 
   多个过滤器:   vue变量 | 过滤器1 | 过滤器2 
使用案例
main.js中定义全局过滤器:

Vue.filter("reverse", (val) => {
  return val.split("").reverse().join("")
})
 <template>使用:<p>翻转过滤器: {{ msg | reverse }}</p> 
多个过滤器使用 和 过滤器传参:

<p>全局定义翻转:{{ msg | reverse(' | ') | toUp}}</p>
filters: { toUp: (msg) => { return msg.toUpperCase() }}
Vue.filter("reverse",(msg,s) => msg.split("").reverse().join(s))
定义一个局部时间过滤器

<td>{{ obj.time | formatDate }}</td>
import moment from "moment";
filters: {
    formatDate(val) {
      return moment(val).format("YYYY-MM-DD");
    }
}

计算属性 - computed

优点:缓存--基于依赖项的值结果进行缓存的,依赖变量不变, 直接从缓存取结果,依赖项改变, 函数自动执行并重新缓存

缓存:多次使用 执行一次,函数多次调 用执行多次

应用:计算变量值

简写语法:只读取不修改


computed: {
   "计算属性名" () {
      return "值"
   }
}
使用案例

<p>{{ num }}</p> 
data(){
  return {
   a: 10,
   b: 20
  }
}

computed: {
 num(){
  return this.a + this.b  
 }
}

完整写法:给计算属性变量直接赋值

应用:单选影响全选:v-model给全选框绑定isAll计算属性,isAll里返回小选框选中状态结果


computed: {
    "属性名": {   
        set(值){    //set:设置值,接收最新修改的值
           console.log(val); 
        },
        get() {     //get:获取值,返回属性具体值
            return "值"
        }
    }
}
使用案例

isAll: {
  set(val) {     // 大选框控制小选框
        this.arr.forEach(obj => obj.c = val)
      },
   get() {       // 小选框控制大选框
      return this.arr.every(obj => obj.c === true)
   }
}

侦听器 - watch

普通侦听

侦听器-watch可以侦听data/computed属性值改变

使用watch配置项, key是要侦听的data/计算属性名

定义语法

语法:v-model="属性名"
watch: {
    "被侦听的属性名" (newVal, oldVal){
    }
}
使用案例

<div><input type="text" v-model="name"></div>
return {name: ""}
watch: {        // newVal: 当前最新值; oldVal: 上一刻值
    name(newVal, oldVal){
      console.log(newVal, oldVal);
    }
}

深度侦听 - 立即执行

侦听复杂类型(对象 / 数组), 或者立即执行侦听函数

深度监听:属性的值改变了,也会监听到

定义语法

watch: {
    "要侦听的属性名": {
        handler (newVal, oldVal) { },   
        deep: true,        // 深度侦听里面值变化
        immediate: true,   // 立即执行
    }
}
使用案例

<input type="text" v-model="deepUser.name" />
<input type="text" v-model="deepUser.age" /> 
deepUser: {  name: '',  age: 0  }
watch: {
  deepUser: {
    deep: true,                 // 深度监听对象里面的值
    immediate: true,            // 立即监听
    handler(newVal, oldVal) {   //打印监听的对象user
      console.log(newVal, oldVal); 
    },
  }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋绥冬禧.

一键三联就是最大的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值