关于vue3的自定义hook

把一些逻辑写在单独的ts文件里,vue文件使用的时候引入即可

计算属性

1、方法1:return计算属性

直接写出去的话,使用时报错

ExpirationTime是一个计算属性,若直接在html上使用{{ExpirationTime(orderForm)}}报错

查阅资料显示:在 setup 函数中,调用 createExpirationTime 函数,并将 orderForm 作为参数传递。然后返回这个计算属性,以便在模板中使用。

setup声明在 <script> 标签内部。在这种情况下,你不需要显式地调用 setup 函数,而是可以直接定义响应式状态和计算属性

但是还是报错!!!!

最终代码

/**
 * 定义计算属性  计算续订之后的时间
 */
import { computed } from 'vue'
import moment from 'moment'
import { orderTypeEnum } from '@/components/option.js'
export default function ExpirationTime(form) {
  return computed(() => {
    const date = moment(new Date())
    //如果存在时间,而且是包月计费
    if (form.duration && form.feeType == orderTypeEnum.MONTH) {
      //使用moment库的add方法
      return date.add(Number(form.duration), 'month').format('YYYY-MM-DD HH:mm:ss')
      //如果存在时间,而且是包年计费
    } else if (form.duration && form.feeType == orderTypeEnum.YEAR) {
      //使用moment库的add方法
      return date.add(Number(form.duration), 'year').format('YYYY-MM-DD HH:mm:ss')
    } else {
      return ''
    }
  })
}

需要return一个计算属性,这样在html中可以直接调用

2、方法二:将变量写在自定义hook里面

export default function aboutForm() {
  // 表单数据
  const orderForm = reactive({
    feeType: ''
    regionAndZone:''
  })

  /**
   * 计算属性计算到期时间
   */
  const ExpirationTime = computed(() => {
    const date = moment(new Date())
    //如果存在时间,而且是包月计费
    if (orderForm.duration && orderForm.feeType == orderTypeEnum.MONTH) {
      //使用moment库的add方法
      return date.add(Number(orderForm.duration), 'month').format('YYYY-MM-DD HH:mm:ss')
      //如果存在时间,而且是包年计费
    } else if (orderForm.duration && orderForm.feeType == orderTypeEnum.YEAR) {
      //使用moment库的add方法
      return date.add(Number(orderForm.duration), 'year').format('YYYY-MM-DD HH:mm:ss')
    } else {
      return ''
    }
  })
  return {
    orderForm,
    ExpirationTime,
  }
}

vue文件里引入

import aboutForm from './hooks/aboutForm.ts'
const {orderForm, ExpirationTime} = aboutForm()

orderForm是全局变量,vue文件的其他函数也用到了这个变量。

全局变量是可以写在自定义hook里面的!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值