Vue v-model绑定到父组件输入元素不起作用

Posted

技术标签:

【中文标题】Vue v-model绑定到父组件输入元素不起作用【英文标题】:Vue v-model bind to Parent component input element doesn't work 【发布时间】:2021-07-01 04:32:47 【问题描述】:

我正在使用 Vue、Nuxt、Vue Good Table 实时搜索表格。我创建了一个名为child.vue 的子组件,并将其导入到父页面parent.vue。我使用v-modelsearchTerm 绑定到父组件中的input 元素上。当我运行它时,实时搜索不起作用。我从控制台收到警告。 Property or method "searchTerm" is not defined on the instance but referenced during render.你能帮帮我吗?我是 Vue.js 的新手。谢谢

对于child.vue

<template>
<vue-good-table
    :columns="columns"
    :rows="rows"
    :search-options="
      enabled: true,
      externalQuery: searchTerm
    "
    :sort-options="
      enabled: false,
    "
    :group-options="
      enabled: true, 
    "
  />
</template>
<script>
export default 
    name: 'my-component',
    data() 
        return 
            searchTerm: '',
            columns: [xxxx]
        
    

</script>

对于parent.vue

<template>
  <div>
    <input type="text" placeholder="Live Search" v-model="searchTerm" />
  </div>
  <div>
    <child />
  </div>
</template>

【问题讨论】:

【参考方案1】:

将prop从parent传给child,并在parentsdata中定义searchTerm

<template>
...
  <input type="text" placeholder="Live Search" v-model="searchTerm" />
  <child :searchTerm="searchTerm" />
...
</template>
<script>
  data()
    return 
      searchTerm: ''
    
  
...
</script>

在child中定义prop,在childs中删除searchTermdata

<script>
export default 
  ...
  props: ['searchTerm'],
  ...
  data()
    return 
      //searchTerm: '' <- remove this from child
    
  
   ...

</script>

您现在可以访问子代&lt;template&gt; 中的searchTerm 或子代&lt;script&gt; 中的this.$props.searchTerm

【讨论】:

以上是关于Vue v-model绑定到父组件输入元素不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Vue .sync 仅适用于 v-model,但会出现突变错误

Vue表单控件绑定

Vue组件的操作-自定义组件,动态组件,递归组件

vue使用填坑之:model和v-model的区别

如何在 vue 中绑定“v-model”属性?

Vue js数据绑定不起作用