javascript - Vue.js 导出默认对象范围
问题描述
谁能解释一下export default
vue文件的范围?谢谢你。
例子:
HelloWorld.vue
<template>
<div id="app">
<HelloWorld />
</div>
</template>
<script>
import HelloWorld from "./components/HelloWorld";
export default {
name: "App",
components: {
HelloWorld
}
}
console.log(HelloWorld) // ReferenceError: HelloWorld is not defined
</script>
App.vue
<template>
<div id="app">
<HelloWorld />
</div>
</template>
<script>
import HelloWorld from "./components/HelloWorld";
export default {
name: "App",
components: {
HelloWorld
}
}
console.log(HelloWorld) // HelloWorld is defined
</script>
解决方案
如果您想在其内部使用一个组件,那么您正在寻找一个递归组件https://vuejs.org/v2/guide/components-edge-cases.html#Recursive-Components。您可以通过将 HelloWorld.vue 中的 name 选项值更改为唯一值来实现这一点。(注意 HelloWorld.vue 和 App.vue 具有相同的名称)
注意:递归使用组件可能会导致无限循环,因此请确保使用会在某个时间点导致错误值的条件执行此操作。
最后,您有 ReferenceError 的原因不是因为 export default 的范围。这是因为您在定义之前使用了组件。为了解决这个问题,您可以使用 webpack 的异步导入(记得将组件名称值更改为唯一)。要进行异步导入,请删除脚本部分顶部的导入语句,然后像这样导入组件:
components: {
HelloWorld: () => import('./components/HelloWorld.vue')
}
注意:我假设你在这里使用的是 webpack 构建系统。
推荐阅读
- cypress - 单击赛普拉斯中的链接时,如何在呈现页面之前等待数据加载?
- git - Visual Studio、TFS 和 Git LFS:如何设置远程存储?
- javascript - BabelJS 错误“不知道如何把这个值变成一个节点”
- tensorflow - Bag of words 中使用的单词以及 keras tokenizer 中的频率
- msdeploy - 带有 runcommand 的 msdeploy.exe:执行命令时出现问题
- c++ - 在声明中指定向量的大小与使用保留
- python - 如何在编辑后验证 pydantic 对象
- java - 我的 JFrame 有一个错误“无法实例化 JFrame 类型”,并且没有针对产品进行研究
- python - Group by 模糊字符串匹配与fuzzywuzzy 和groupby
- c# - 错误,SMTP 服务器需要安全连接或客户端未通过身份验证。服务器响应为:5.7.57 SMTP;