我使用 Vue 3 Composition api 和 Typescript 来使用 HammerJS 包实现捏合缩放。
我正在尝试遵循 CodePen 用 JavaScript 编写的工作示例:https://codepen.io/bakho/details/GBzvbB 在 Vue 中实现。
但是,当我尝试使其在我的 Vue 应用程序中运行时遇到了一些问题,我不确定如何解决它。
以下错误:
// Object is possibly 'null'. imageContainer.value.offsetWidth; // Object is possibly 'null'. imageContainer.value.appendChild(displayImage); // Object is possibly 'null'. imageContainer.value.addEventList ener...
这是完整的源代码:
Image Zoom
任何人都可以告诉我出了什么问题以及为什么会导致此 Object 可能为“null”
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
这就是该错误的原因:
const imageContainer = ref(null)-> 您将值设置为null并且 TypeScript 警告您对该对象的属性的任何访问都可能引发错误,因为初始值为null并且因为您尝试在模板中使用ref该元素可以存在,也可以不必存在。const imageContainer = document.querySelector('.imageContainer')-> 您正在查询存在或不存在的 HTML 元素,这意味着您还可以获取null作为值,并且 TypeScript 再次警告您对该对象的属性的任何访问都可能引发错误解决方案:
setup函数返回setup变量,以便 Vue 将其与模板中的ref绑定,并且可以在onMounted函数内部访问该变量,因为它是ref,这意味着它尚未安装到 DOM 中。setup在 Vue.js 组件生命周期中的created和mounted挂钩之前调用,并且您无权访问其中的任何 DOM 内容。import { ref, onMounted } from 'vue' export default { setup() { const imageContainer = ref(null) onMounted(() => { // here you access imageContainer variable }) return { imageContainer } } }