【问题标题】:Set v-model value within a slot in Vuejs在 Vuejs 的插槽内设置 v-model 值
【发布时间】:2018-12-11 09:46:04
【问题描述】:

我有两个组件

child-component.vue

<template>
    <div class="container">
        <slot>
    </div>
</template>

父组件.vue

<template>
    <my-component>
        <input type="text" v-model="myinput1">
        <input type="text" v-model="myinput2">
        <input type="text" v-model="myinput3">
    </my-component>
</template>
<script>
    export default {
        data() {
            return {
                myinput1: '',
                myinput2: '',
                myinput3: '',
            }
        }   
     }
</script>

我需要直接从子组件设置槽内每个输入字段的值(输入字段的数量可能会改变)。

有没有办法在不触发子组件事件的情况下实现它?

谢谢

【问题讨论】:

  • 你看过Scoped Slots吗?
  • @Beau 是的,但是在我的情况下如何使用它们?

标签: vue.js vuejs2 vue-component


【解决方案1】:

编辑 - 修改代码以处理可变数量的输入

在子组件中

<template>
    <div class="container">
        <slot :data="slotData" />
    </div>
</template>
<script>
  export default
  {
    data()
    {
      return {
        slotData: ['1', '2', '3']
      };
    }
  }
</script>

在父组件中

<template>
    <my-component>
      <template slot-scope="props">
        <input v-for="item in props.data" type="text" v-model="item">
      </template>
    </my-component>
</template>

【讨论】:

  • 感谢您的回答,但就我而言,我没有固定数量的输入字段。无论如何,我赞成你的回答,因为你给了我一个很好的起点。
  • 父组件定义子组件有多少输入字段。我想要的是循环遍历所有插槽并设置值。
  • 不要忘记 Vue 有一个严格的 MVVM 行为——数据从父节点传递到子节点,事件从子节点传递到父节点。最好的办法是将输入的数量(以及最终的类型)传递给孩子,让孩子自己创建(和管理)它们。
  • 再次感谢。这是我的第一次尝试,但我更喜欢使用插槽,因为我必须将大量道具传递给子组件来创建我的输入。
  • 如果您发现自己处于传递太多道具的情况 - 那么是时候重新考虑和/或重新考虑您的应用程序架构了。您可能需要使用像 Vuex 这样的全局状态管理器,或者在父级内部实现子级的行为并且根本不使用子级。或者,也许您需要大量专门的孩子,他们已经知道他们需要产生什么样的输入。无论如何 - 我们无法看到你所看到的整个画面。
猜你喜欢
  • 2020-07-15
  • 2019-08-08
  • 1970-01-01
  • 2018-06-13
  • 2021-04-25
  • 2021-08-19
  • 2021-11-19
  • 2021-07-27
  • 1970-01-01
相关资源
最近更新 更多