vue + ts 项目中watch的用法

 要使vue支持ts写法,我们需要用到vue-property-decorator这个组件完全依赖于vue-class-componet

首先安装:

npm i -D vue-property-decorator

@Watch(path: string, options: WatchOptions = {}) 

@Watch装饰器接受两个参数:

  • path: string类型,表示需要被监听的属性名;
  • options?: WatchOptions = {} 包含两个属性: 
    immediate?: boolean 监听开始后是否立即调用该回调函数; 
    deep?: boolean 表示是否深度监听

使用Demo如下:

<template>
  <div class="watchPage">
    <h1>child: {{child}}<input type="text" v-model="child"/></h1>
    <h1>person.name: {{person.name}}<input type="text" v-model="person.name"/></h1>
  </div>
</template>

<script lang="ts">
// 从vue-property-decorator中引入Component、Watch、Vue
import { Component, Vue, Watch } from 'vue-property-decorator';

@Component
export default class WatchPage extends Vue {
  child = ''
  person = {
    name: 'zxx'
  }
  @Watch('child')
  onChildChanged(val: string, oldVal: string) {
    console.log(val, oldVal);
  }

  @Watch('person', { immediate: true, deep: true })
  onPersonChanged(val: Person, oldVal: Person) {
    console.log(val, oldVal);
  }
}
</script>

以上script中代码等同于:

export default {
  data() {
    return {
      child: '',
      person: {
        name: 'zxx'
      }
    }
  }
  watch: {
    child: [
      {
        handler: 'onChildChanged',
        immediate: false,
        deep: false,
      },
    ],
    person: [
      {
        handler: 'onPersonChanged',
        immediate: true,
        deep: true,
      }
    ],
  },
  methods: {
    onChildChanged(val, oldVal) {
      console.log(val ,oldVal);
    },
    onPersonChanged(val, oldVal) {
      console.log(val ,oldVal);
    }
  },
}

 参考资料: https://github.com/kaorun343/vue-property-decorator

 

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值