在 Vue.js 中,如何在父级的 v-on 传递另一个参数时从子级向父级发出多个值?

新手上路,请多包涵

这是一个代码示例。

 Vue.component('button-counter', {
  template: '<button v-on:click="emit_event">button</button>',
  methods: {
    emit_event: function () {
      this.$emit('change', 'v1', 'v2', 'v3')  // Here I emit multiple value
    }
  },
})
new Vue({
  el: '#parent',
  data: {
    args: ""
  },
  methods: {
    change: function (...args) {
      this.args = args
      console.log(args)
    }
  }
})

 <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.3.3/vue.common.js"></script>
<div id="parent">
  {{ args }} <br />
  <button-counter v-on:change="change(1234, $event)"></button-counter>
</div>

从父组件中,我想通过 change() 获取参数传递(在本例中为 1234),还想获取子组件发出的每个值。我尝试使用 \(event 来捕获子发出的值,但是 \)event 仅设置为子发出的第一个值(在此示例中,’v1’)

有没有办法做到这一点?我知道我可以发出一个数组来捕获多个值。但是有些库只是发出多个值。

这是上面示例的代码笔。 https://codepen.io/anon/pen/MmLEqX?editors=1011

原文由 user2925565 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 745
2 个回答

定义一个处理程序,该处理程序接受来自事件的多个参数,并将它们传递给除了您的静态参数之外的 change 方法。

 <button-counter v-on:change="(...args)=>this.change(1234,...args)"></button-counter>

或者

<button-counter v-on:change="(...args)=>this.change([1234,...args])"></button-counter>

并将您的方法更改为

change: function (args) {
  this.args = args
  console.log(args)
}

原文由 Bert 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用解构语法

this.$emit('change', { x:'v1', y:'v2', z: 'v3' })

你可以像这样访问这些值

<button-counter @change="change"></button-counter>

methods: { change({x, y, z}) { .... } }

原文由 Kartik Bhargav 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题