记录一下vue3和ts的坑 (遇到就会写)

1. vue3 全局挂载问题

在vue2中,全局挂载通过Vue.prototype的方式,通过原型定义在每个vue实例中可用

vue2中的方法                                                                                          

在main.js 使用Vue.prototype.$xxx = zzz(zzz可以是变量也可以是import的方法)

// 例子
Vue.prototype.$test = 50 //定义全局变量test的值为50

在需要的页面通过this.$xxx引入

// 例子
alert(this.$test) // 弹出的值为50

 vue3中的方法 (vue3+ts)                                                                        

在vue3中,Vue.prototype无法使用,而且也没有this

在main.ts中使用globalProperties

app.config.globalProperties.$xxx = zzz

// 先通过app创建vue
const app = createApp(App)
app.mount('#app')
app.config.globalProperties.$test = 50 // test变量值为50

在需要引用的vue实例中先引入getCurrentInstance

import { getCurrentInstance } from 'vue'

 定义proxy

const { proxy } = getCurrentInstance()

在需要使用全局的地方用proxy.$xxx使用

proxy.$xxx

console.log(proxy.$test) // 50

2. getCurrentInstance报错,

proxy' does not exist on type 'ComponentInternalInstance | null'

可以添加ts忽略去解决

  // @ts-ignore

  // @ts-ignore
  const { proxy } = getCurrentInstance()

新建useCurrentInstance.ts(转载不知道原理 求解) 转自Vue3 getCurrentInstance与ts结合使用的问题 - Mica - 博客园 (cnblogs.com)

新建 hooks\useCurrentInstance.ts

import { ComponentInternalInstance, getCurrentInstance } from 'vue'
export default function useCurrentInstance() {
    const { appContext } = getCurrentInstance() as ComponentInternalInstance
    const globalProperties = appContext.config.globalProperties
    return {
        globalProperties
    }
}

组件中使用

// 先引入文件
import useCurrentInstance from "@/hooks/useCurrentInstance";
...
// 在setup 中使用处理
const { globalProperties } = useCurrentInstance();

3. Type 'boolean' is not assignable to type 'Ref<boolean>'.

类型boolean不可以分配给Ref<boolean>

错误代码:

setup () {
let awardIsOver = ref(true)
····
const hideMask = () => {
      awardIsOver = false
    }
    return {
    hideMask
    }
}

一个点击事件,点击以后将awardIsOver的值变成false

正确代码:

setup () {
const awardIsOver = ref(true)
····
const hideMask = () => {
      awardIsOver.value = false
    }
    return {
    hideMask
    }
}

不是ts类型的问题,是vue3的ref响应式需要加value才是真正的值,ref返回的是个对象

4. vue3 watch监听

如果要监听props父组件传给子组件的值,语法如下 script setup同样适用

watch(() => props, (newValue, oldValue) => {
console.log(newValue, oldValue)
})

5. vue3 使用子组件中的方法

 在父组件中,子组件绑定一个ref, 定义一个变量名与ref名一致

const modalRef = ref() // 子组件方法 modalRef为自定义

在父组件中,通过xxx.value.yyy() 的形式调用子组件中方法 xxx为ref定义的名字, yyy为子组件的方法名

  modalRef.value.showModal()

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
的前后端分离项目的架构设计思路和技术选型。 作为一个 C知道 AI,我可以为您提供一些关于基于springboot,tsVue3的前后端分离项目的架构设计思路和技术选型的建议。 首先,对于前端部分,Vue3是一个非常流行的JavaScript框架,它具有易于学习、灵活、高效等特点,因此我们可以选择Vue3作为前端框架。同时,由于我们需要使用TypeScript来增强JavaScript的类型检查和代码可读性,因此我们可以使用Vue3 + TypeScript的组合来开发前端部分。 对于后端部分,Spring Boot是一个非常流行的Java框架,它具有易于使用、高效、可扩展等特点,因此我们可以选择Spring Boot作为后端框架。同时,由于我们需要使用TypeScript来增强Java的类型检查和代码可读性,因此我们可以使用Spring Boot + TypeScript的组合来开发后端部分。 在架构设计方面,我们可以采用前后端分离的架构,将前端和后端分别部署在不同的服务器上,通过RESTful API进行通信。这种架构可以提高系统的可扩展性和灵活性,同时也可以提高系统的安全性。 在技术选型方面,我们可以选择以下技术: 前端部分: - Vue3:JavaScript框架 - TypeScript:JavaScript的超集,增强类型检查和代码可读性 - Vuex:Vue3的状态管理库 - Vue Router:Vue3的路由管理库 - Axios:用于发送HTTP请求的JavaScript库 后端部分: - Spring Boot:Java框架 - TypeScript:Java的超集,增强类型检查和代码可读性 - Spring Data JPA:用于访问数据库的Java库 - Spring Security:用于实现系统安全的Java库 - Swagger:用于生成API文档的Java库 以上是我为您提供的关于基于springboot,tsVue3的前后端分离项目的架构设计思路和技术选型的建议,希望能对您有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值