javascript - 渲染错误 : "TypeError: Cannot read property ' length' of undefined"

标签 javascript vue.js vuejs2

如果我的搜索输入包含任何文本,我将尝试仅显示叠加层。

这是我的模板,我的输入字段是:

Input.vue:

<template>
    <div>
        <input v-model="query" class="input" placeholder="Global search..."></input>

    </div>
</template>
<script>
    export default {
        data() {
            return {
                query: '',
            };
        }
    };
</script>

当我 checkin 控制台时,query 更新我在输入字段中写入的任何文本。

然后我尝试将此变量传递给另一个组件,该组件包含我的覆盖 div:

Overlay.vue:

<template>
    <div v-if="this.$root.query.length > 0">
        <div class="search-overlay is-active"></div>
    </div>
</template>

但是,这给了我以下错误:

[Vue warn]: Error in render: "TypeError: Cannot read property 'length' of undefined"

我在这里做错了什么?

最佳答案

$root 是树中最顶层的组件(您使用 new Vue() 实例化的组件),我不认为它是 Input。 vue.

在任何情况下,如果 Input.vue 根组件,那么访问组件的状态是很麻烦的。如果您想跨组件共享数据,您应该通过 Prop (数据从父级流向子级)来实现,或者对于更复杂的情况,您可能需要共享数据存储(例如 Vuex )。

关于javascript - 渲染错误 : "TypeError: Cannot read property ' length' of undefined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52314817/

相关文章:

javascript - vuejs中的Array.prototype.splice和arr.splice有什么区别?

javascript - 在调用每个函数后执行代码

vue.js - ApexCharts 圆环图图例标题未反射(reflect)提供的数据标签(卡住为 'series-1' 等)

javascript - 使用 VueJS 中的插槽访问其他组件中的组件数据

node.js - vue-cli 加载程序不使用 webpack-simple 的默认初始化

javascript - 滚动到模态 div 中的元素

javascript - 请求 header 中 "no javascript"的常用表达方式是什么?

javascript - 实例化对象真的只是在 javascript 中以某种方式继承吗?

javascript - 一个接一个地加载元素——简单的jQuery

javascript - 如何使用作为函数参数传递的对象?