Vue 2.7 getCurrentInstance()尝试获取$vuetify等属性



由于composition api的原因,我试图从vuetify 2.6迁移到2.7,但在尝试获取Vue实例的属性时遇到了很多错误,例如,我将Vue与vuetify一起使用,并且我有一个separed"助手";尝试获取$vuetify实例,但每次我获取undefined时,即使我试图从应用程序中的setup((获取属性。由于我没有定义,当尝试从具有getCurrentInstance()的实例获取vue-router的$route属性时,也发生了同样的事情,当时我对路由器的唯一解决方案是使用vue-router/composables的内部可组合来获取路由。

另一件同样发生的事情是getCurrentInstance()有时返回null。

我的main.js看起来像:

import Vue from 'vue'
...
import App from './App.vue'
import router from './router'
import store from './store'
import vuetify from './plugins/vuetify'
...
Vue.config.productionTip = false
new Vue({
router,
store,
vuetify,
render: h => h(App),
}).$mount('#app')

/插件/vuetify.js

import Vue from 'vue'
import Vuetify from 'vuetify/lib/framework'
Vue.use(Vuetify)
export default new Vuetify({
preset
...
})

App.vue

<template>...</template>
<script>
import { getCurrentInstance } from 'vue'
export default{
setup(){
console.log( getCurrentInstance().proxy, getCurrentInstance().proxy.$vuetify )
// returns: {}, undefined
// sometimes returns null, undefined
}
}
</script>

版本:

"vue": "^2.7.11"
"@vue/cli-service": "~5.0.8"
"vuetify": "^2.6.11"

有人知道可能是什么吗?,谢谢

已编辑:无法在vue v2.7.12中复制。我试过vue v2.7.11,可以重现您的问题。v2.7.11中存在严重的回归,请升级您的vue。

这里是v2.7.12的一个最小示例。

https://stackblitz.com/edit/vitejs-vite-fjpdck

getCurrentInstance().proxy返回VueComponentgetCurrentInstance().proxy.$vuetify成功获取vuetify实例。

顺便说一下,在setup中获得$route实例的推荐方法是

import { useRoute } from 'vue-router/composables'  // need vue-router v3.6
export default{
setup(){
const route = useRoute()
}
}

最新更新