javascript - 渲染错误:“TypeError:无法读取未定义的属性‘长度’”
问题描述
如果我的搜索输入包含任何文本,我试图只显示一个覆盖。
这是我的模板,我的输入字段是:
Input.vue
:
<template>
<div>
<input v-model="query" class="input" placeholder="Global search..."></input>
</div>
</template>
<script>
export default {
data() {
return {
query: '',
};
}
};
</script>
当我签入控制台时,query
会更新我在输入字段中写入的任何文本。
然后我尝试将此变量传递给另一个组件,该组件包含我的覆盖 div:
Overlay.vue
:
<template>
<div v-if="this.$root.query.length > 0">
<div class="search-overlay is-active"></div>
</div>
</template>
但是,这给了我以下错误:
[Vue 警告]:渲染错误:“TypeError:无法读取未定义的属性‘长度’”
我在这里做错了什么?
解决方案
$root
是树中最顶层的组件(您用 实例化的组件new Vue()
),我不相信它是Input.vue
.
无论如何,如果Input.vue
是根组件,那么访问组件的状态是很麻烦的。如果你想跨组件共享数据,你应该通过 props(从父级到子级的数据流)来实现,或者对于更复杂的情况,你可能需要一个共享数据存储(例如Vuex)。
推荐阅读
- python - 即使结果在表中,也没有在 mysql DB 和 python 中找到匹配项
- python - 检查两个系列是否等于一个条件
- flutter - Flutter 在 BottomNavigationBar Widget 中间放置一个按钮
- spring-kafka - 回复并不总是传递到所需的回复侦听器容器
- linux - 正在寻找可用于测试套接字应用程序的简单套接字服务器应用程序?
- node.js - Nodejs mongodb驱动部分更新
- javascript - 如何通过javascript动态更改按钮悬停颜色?
- django - Django:我希望在 div 中加载另一个网页
- linux - 如何使用 sed 删除文本?
- javascript - 使用JS将html编辑按钮添加到表格的每一行