如何将参数传递给 Vue 组件以启动组件实例

Posted

技术标签:

【中文标题】如何将参数传递给 Vue 组件以启动组件实例【英文标题】:How to pass parameter to a Vue component to initiate components instance 【发布时间】:2020-07-22 13:19:10 【问题描述】:

我对 Vue 很陌生。我正在尝试学习如何创建和重用 Vue 组件。传递给组件的初始数据不会在单击事件上更新。 这是我的代码(完整版在https://jsfiddle.net/gpawel/486ysvxj/33/) 我做错了什么? 谢谢。

<div id="components-demo">
  <button-counter count='3'></button-counter>
  <br><br>
  <button-counter count='4'></button-counter>
</div>

Vue.component('button-counter', 
    props: ['count'],
    methods: 
    add: function() 
        return count: count++
    
  ,
  template: '<button v-on:click="add()">You clicked me count  times.</button>'
)

new Vue( 
    el: '#components-demo'
)

【问题讨论】:

@Daviti 你还在直接修改道具this.count += 1 这能回答你的问题吗? Vue.js Changing props 【参考方案1】:

查看更新后的fiddle。您正在直接改变 count 属性,首先将其保存为数据并改变 internalCount。另外,使用: 将道具转换为数字而不是字符串。

props: ['count'],
  data() 
  return 
    internalCount: this.count
  
,
methods: 
  add: function() 
    return 
      count: this.internalCount++
    
  
,

【讨论】:

非常感谢@enriqg9【参考方案2】:

这是工作小提琴:https://jsfiddle.net/68p1u9ks/

Vue.component('button-counter', 
    props: ['initialCount'],
    data: function () 
        return 
          count: 0,
        
    ,
    methods: 
        add: function() 
            this.count++
        ,
    ,
    created() 
          this.count = this.initialCount
    ,
    template: '<button v-on:click="add()">You clicked me count  times.</button>'
)

我认为您需要在 button-counter 组件内维护状态。还将count 属性重命名为initial-count

<div id="components-demo">
  <button-counter :initial-count='3'></button-counter>
  <br><br>
  <button-counter :initial-count='4'></button-counter>
</div>

【讨论】:

【参考方案3】:

您不能更改子组件中的道具。 您应该使用$emit 来更改道具:

父组件:

<template>
<div>
  <child :count="count" @add="add" />
</div>
</template>
<script>
export default 
  data: () => (
    count: 1
  ),
  methods: 
   add() 
     this.count = this.count + 1;
     
  

</script>

和子组件:

<template>
  <button v-on:click="add()">You clicked me inComponentCount  times.</button>
</template>
<script>
export default 
  props: [count],
  computed: 
    inComponentCount() 
      return this.count;
    
  ,
  methods: 
   add() 
     this.$emit('add')
     
  

</script>

【讨论】:

以上是关于如何将参数传递给 Vue 组件以启动组件实例的主要内容,如果未能解决你的问题,请参考以下文章

如何将参数传递给Vue组件并在组件模板中重新使用其值

将特定的 $attrs 参数传递给 Vue 组件

将 Laravel 集合中的 id 参数传递给 Vue 组件

如何将参数传递给 JSP 组件?

将路由参数传递给组件

Laravel 6 如何将参数传递给 Vue Js @click 方法