[英]Property '$el' does not exist on type 'never'
我正在處理一個vue.js 3
項目,我需要通過最初聲明null
引用來引用/獲取腳本中的div
元素,就像這樣const refRouterView = ref(null)
並且我不確定如何讓 TypeScript 知道DomElement
。
<template lang="pug">
.flex
router-view(ref='refRouterView')
...
</template>
<script lang="ts" setup>
import { ref, onMounted } from 'vue';
const refRouterView = ref(null);
const routerViewHeight = ref(500);
const getRouterViewHeight = () => {
setTimeout(() => {
routerViewHeight.value = refRouterView.value?.$el.offsetHeight;
}, 250);
};
onMounted(() => getRouterViewHeight());
</script>
我得到這個錯誤Object is possibly 'null'
before adding ?
到refRouterView.value?
這看起來像黑客,我不喜歡它。 而且,添加后?
我開始看到此錯誤Property '$el' does not exist on type 'never'.
我嘗試將HTMLElement
添加到const refRouterView: HTMLElement = ref(null);
但這會引入此錯誤Property 'value' does not exist on type 'HTMLElement'.
添加后還沒有解決?
到refRouterView.value?
請幫忙!
最初我的問題是使用div(ref='refRouterView')
並且@Thomas 的回答解決了它,但我使用的是router-view
。 只是為了讓我的問題更容易理解,我提到了div
而不是router-view
,這讓我們感到困惑,因此答案沒有解決我的問題。
<template lang="pug">
.flex
div(ref='refRouterView')
...
</template>
如果你ref
一個 DOM 節點,你沒有$el
屬性,引用直接指向 DOM 節點:
https://v3.vuejs.org/guide/composition-api-template-refs.html
對於 typescript 部分,您必須像這樣定義類型,因為refRouterView
是某種類型的Proxy
:
const refRouterView = ref<HTMLDivElement>();
然后可以直接訪問屬性:
refRouterView.value.offsetHeight
(this.$refs.refRouterView as Vue & { $el: () => any }).$el.offsetHeight
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.