【发布时间】:2021-07-16 01:53:37
【问题描述】:
我想调用一个以HTMLElement 作为参数的函数。有问题的元素被呈现为我的页面模板的一部分,所以我需要等待它实际位于 DOM 中。我认为有两种可能的方法可以等待此元素可见:
- 看
ref
<template><div ref="el"></div></template>
<script>
import {ref, watch} from "vue";
import {exampleFunction} from "example";
export default {
setup() {
const el = ref();
watch(el, (newEl, oldEl) => {
if (typeof oldEl === "undefined") // Only call function once
exampleFunction(newEl);
});
return {el}
}
}
</script>
- 使用
onMounted
<template><div id="el" ref="el1"></div></template>
<script>
import {onMounted, ref} from "vue";
import {exampleFunction} from "example";
export default {
setup() {
const el1 = ref();
onMounted(() => {
let el2 = document.querySelector("#el");
exampleFunction(el2);
// OR exampleFunction(el1.value);
});
return {el1}
}
}
</script>
据我所知,一旦元素实际存在于 DOM 中,它们都会提供对元素的引用。有没有理由为什么其中一个比另一个更受欢迎?我是否错过了这两种情况中的任何一种如何运作的信息?最后,有什么理由认为完全不同的解决方案更合适?
【问题讨论】:
-
较少使用
watch可能会提高性能?如果只使用一次,还有什么理由继续观看?有一块只做一件事的手表可能会很昂贵。 -
这点很好,没有考虑资源影响
-
为什么不在mounted中使用
this.$refs.el。不用看。 -
@MichaelMano 我的意思是,当然,您可以在 onMounted 调用中使用 ref,但是,我认为这与
document.querySelector并没有太大的不同。也就是说,手表与已安装基本上是我的全部问题! -
是的,我理解你的问题,更多的是我自己的问题。是的,看 el 有点毫无意义,因为你只需要它一次。安装。
$refs也有更好的性能。
标签: javascript vue.js ecmascript-6 vuejs3 vue-composition-api