【问题标题】:Wrap a VueJs component包装一个 VueJs 组件
【发布时间】:2017-11-25 17:01:12
【问题描述】:

我正在使用第三方日期选择器组件。我为这个组件创建了一个包装器,所以我可以设置一些适合我的应用程序的默认值。但是,我在传递模型时遇到问题。如何确保模型的双向绑定?当我直接使用第三方组件时,一切正常。

my-page.vue

<my-datepicker v-model="from"></my-datepicker>

my-datepicker.vue

<template>
  <thirdparty-datepicker>
    :value="value"
  </thirdparty-datepicker>
</template>
<script>
  export default {
    props: {
      value: {
        value: String
      }
    }
  }
</script>

编辑

根据 Bert 的意见,我设法让它发挥作用。每次更改第三方组件的日期时,都会引发 input 事件。所要做的就是连接到该事件并重新发出它。

<template>
  <thirdparty-datepicker>
    :value="value"
    v-on:input="change"
  </thirdparty-datepicker>
</template>
<script>
  export default {
    props: {
      value: {
        value: String
      }
    },
    methods: {
      change (newValue) {
        this.$emit('input', newValue)
      }
    }
  }
</script>

【问题讨论】:

  • 您是否尝试为该属性指定一个不同于“值”的名称?也许这会搞砸事情。
  • 值是日期选择器的属性之一。我基本上是在为第三方日期选择器和我的包装器的属性创建一个映射。如果我理解正确,值是我做 v-model="from"? 时匹配的属性的名称

标签: javascript vue.js components vuejs2


【解决方案1】:

为了在您的自定义组件上支持v-model,您必须使用accept a value parameter and emit an input event(尽管可以自定义;有关详细信息,请参阅链接)。您的代码只是其中的一部分。如何实现这将取决于第三方组件的工作方式。

假设第三方组件发出了change 事件。如果是这样,那么当第三方组件发出 change 时,您将发出 input

<template>
  <thirdparty-datepicker :value="value" @change="onChange">    
  </thirdparty-datepicker>
</template>
<script>
  export default {
    props: {
      value: {
        value: String
      }
    },
    methods:{
      onChange(newValue){
        this.$emit('input', newValue)
      }
    }
  }
</script>

【讨论】:

  • 我在文档中读过类似的内容,但我真的可以理解它。你的解释成功了。谢谢!
猜你喜欢
  • 2018-07-26
  • 1970-01-01
  • 1970-01-01
  • 2020-01-16
  • 2020-10-29
  • 2014-01-18
  • 1970-01-01
  • 1970-01-01
  • 2017-08-26
相关资源
最近更新 更多