【发布时间】:2020-10-06 18:39:37
【问题描述】:
我已经搜索了几个小时,阅读了无数 vue 文档和 stackoverflow 上的相关帖子,但没有运气。
我需要访问组件的内部属性,因为该组件只不过是我需要在父组件中访问的 vanilla 组件的包装器。
我正在尝试创建一个唯一且只能在父 (App) 组件内部访问的 ref,我的理解是我应该在 setup 方法中执行此操作,如下所示:const myRef = ref(null)
但是,唉,myRef.value 永远是null
??????????
codesandbox demo
入口文件:
import { createApp } from 'vue'
import App from "./App.vue";
createApp(App).mount('#app')
家长App.vue:
<template>
<Foo ref="myRef"/>
</template>
<script>
import { onMounted, ref } from 'vue'
import Foo from "./components/Foo.vue"
export default {
name: "App",
components: { Foo },
setup(props) {
const myRef = ref(null)
onMounted(()=>{
console.log(111, myRef.value)
})
return {
myRef
}
}
}
</script>
子组件Foo.vue:
<template>
<div>xxx</div>
</template>
<script>
export default {
name: "Foo",
mounted() {
this.test = 123
}
}
</script>
如果我将ref="myRef" 放在<h1> 上,它可以工作,但我需要它在我的自定义组件上工作,这样我才能访问那里的东西...
现在我不知道关于 vue 的 jack****,而且那里有大量相互矛盾的令人困惑的信息。我在我的演示中使用版本 v3 和 @ 987654335@ 组件是以这种方式创作的(从我从那里的精神错乱中我几乎无法理解),但我的组件 tagify.vue 是以v2 的方式创作的 - 供更广泛的受众使用。
更新 - 经过大量浪费时间
这是 codesandbox 控制台错误!它错误地显示为null
我太信任他们的控制台,所以不打开浏览器的控制台(由于性能原因,因为它大大降低了我在该特定网站上的计算机速度)。
【问题讨论】:
-
它应该是
this.$refs.myRef(至少在 Vue.js 2.x 中)。恕我直言,混合 Vue.js 2.x 和 3.x 并不是一个好主意。 -
@FedericoMoretti - 考虑
tags一个从npm导入的 vue2 组件。这是一个完全正常的情况。请注意,父代码中没有this这样的东西。是 vue3 的新 API
标签: javascript vue.js vuejs2 vuejs3