【问题标题】:How do I make this component to pass its value into a parent component?如何使该组件将其值传递给父组件?
【发布时间】:2018-03-05 11:34:35
【问题描述】:

我有 2 个组件 - 搜索过滤器和迭代器在同一个组件中 App.vue 就像这样:

App.vue

<v-text-field 
  :search="search"
  v-model="search"
  label="type here to filter" 
>
</v-text-field>


<v-data-iterator
  :items="sortedContents"
  :search="search"
  v-model="selected"
>
  ...
</v-data-iterator>

...

data () {
  return {
    search: '',
  {
}

但后来我将该搜索过滤器移到了一个名为 &lt;toolbar&gt; 的单独组件中,其中的搜索过滤器不再起作用:

App.vue

<!-- this component contains the <v-text-field> -->
<toolbar :search="search"></toolbar>


<v-data-iterator
  :items="sortedContents"
  :search="search"
  v-model="selected"
>
  ...
</v-data-iterator>

...

data () {
  return {
    search: '',
  {
}

Codepen: https://codepen.io/anon/pen/ddEjgp?editors=1010


问题:

我应该在新的&lt;toolbar&gt; 组件中添加什么,以便它将输入到该搜索过滤器中的数据传递给 App.vue 父组件?

【问题讨论】:

  • 你需要传递道具,你会在这里得到一些帮助:stackoverflow.com/questions/46680079/…
  • @BhojendraNepal 我刚刚更新了codepen,我添加了props: ['search'],,但它仍然不起作用,我做错了吗?

标签: vue.js vuejs2 vuetify.js


【解决方案1】:

您期望更改的 search 值将可用于父组件,这是错误的。根据 vue 文档:

One-Way Data Flow

所有的 props 形成一个 one-way-down 在 子属性和父属性:当父属性更新时, 它会流向孩子,但不会反过来

另外,每次父组件更新时,所有的props在 子组件将使用最新值刷新。这 意味着您不应该尝试改变孩子体内的道具 零件。如果你这样做了,Vue 会在控制台中警告你。

您应该在工具栏的v-text-field (@input="onInput") 中处理changeinput(更适合您的任务)事件并发出一些事件(this.$emit('filterinput', str))以将数据弹出到父组件!并且父母应该听(@filterinput="localSearchUpdate")该事件(codepen中的filterinput)并更改(方法localSearchUpdate)本地到他search从事件字符串接收的数据:

https://codepen.io/anon/pen/rJgqqv?editors=1010

【讨论】:

  • 啊,现在我明白了,非常感谢您的解释!
猜你喜欢
  • 1970-01-01
  • 2020-02-04
  • 1970-01-01
  • 2017-05-29
  • 2017-05-31
  • 2019-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多