【问题标题】:Reusable component for vue-tags-inputvue-tags-input 的可重用组件
【发布时间】:2019-06-19 12:31:51
【问题描述】:

我目前正在使用来自 http://www.vue-tags-input.com 的这个 UI 组件

我打算为 vue-tags-input 创建一个可重用的组件,这是我当前的代码:

components/UI/BaseInputTag.vue

<template>
  <b-form-group :label="label">
    <no-ssr>
      <vue-tags-input
        :value="tags"
        @tags-changed="updateValue"/>
    </no-ssr>
  </b-form-group>
</template>

<script>
  export default {
    name: 'BaseInputTag',
    props:   {
      label: { type: String, required: true },
      value: { type: [String, Number, Array] },
      tags: { type: [Array] }
    }, 
    methods: {
      updateValue(newTags) {
        this.$emit('input', newTags);
      }
    }
  }
</script>

在我的父 vue 页面中。我用这段代码调用上面的组件:

pages/users/new.vue

<BaseInputTag v-model="tag" :tags="interests" label="Interests"/>

<script>
  export default {
    name: 'InsiderForm',
    data() {
      return {
        tag: '', 
        interests: []
      };
    }
  }
</script>

如何将子组件的 newTags 发送回父组件的数据 interests

【问题讨论】:

标签: javascript vue.js nuxt.js


【解决方案1】:

我设法让它工作,这是我的代码:

子组件

<template>
  <b-form-group :label="label">
    <no-ssr>
      <vue-tags-input
        :value="value"
        v-model="tag"
        placeholder="Add Tag"
        :tags="tags"
        @tags-changed="updateValue"/>
    </no-ssr>
  </b-form-group>
</template>

<script>
  export default {
    name: 'BaseInputTag',
    props:   {
      label: { type: String, required: true },
      value: { type: [String, Number, Array] },
      tags: { type: [Array, String] },
      validations: { type: Object, required: true }
    }, 
    data() {
      return {
        tag: ''
      }
    },
    methods: {
      updateValue(newTags) {
        this.$emit('updateTags', newTags);
      }
    }
  }
</script>

并接收对父组件的更改:

<BaseInputTag :tags="interests" @updateTags="interests = $event" label="Interests"/>


<script>
  export default {
    name: 'InsiderForm',
    data() {
      return {
        tag: '', 
        interests: []
      };
    }
  }
</script>

【讨论】:

  • 是的,没关系,我刚刚使用了你给我的东西。将答案标记为已接受,干杯!
【解决方案2】:

你快到了!

父组件:

<BaseInputTag v-model="tag" :tags="interests" @input="doStuffWithChildValue" label="Interests"/>

<script>
  export default {
    name: 'InsiderForm',
    data() {
      return {
        tag: '', 
        interests: []
      };
    },
    methods: {
      doStuffWithChildValue (value) {
        console.log('Got value from child', value)
      }
    }
  }
</script>

【讨论】:

  • 嗨 Karolis,我还需要子组件中的 @tags-changed 来发出父组件吗?
  • 是的,您的子组件侦听@tags-changed 事件,然后将其数据发送给父组件。 Parent 使用 @input 事件监听它并执行一个方法来 console.log 值。
  • 谢谢卡罗利斯。我设法根据您的建议使其工作,但我 .做了一些小调整。我会发布我的代码
猜你喜欢
  • 2020-11-04
  • 2019-11-16
  • 1970-01-01
  • 1970-01-01
  • 2020-03-30
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多