VueJs - 在方法之间传递变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VueJs - 在方法之间传递变量相关的知识,希望对你有一定的参考价值。

有一个v-select组件,并在变化我发射fillData(selected)选择是v-model。我需要在更改时更新datacollection.datasets.label中的标签。我怎么做 ?

<script>
  import BarChart from './BarChart.js'
  import { mapGetters, mapActions } from "vuex";

  export default {
    name : "TestLegPerformance",
    components: {
      BarChart
    },
    data: () => ({   
      datacollection : {
          labels: ['Week-1','Week-2','Week-3'],
          datasets: [
            {
                label: '',
                backgroundColor: '#C58917',
                data: [40, 50, 20]
            }
          ]
        },
      selected: []

    }),
     computed: {
        ...mapGetters({
        planNames: "planNames"
        })
    },
    mounted () {
        this.getAllPlanNamesAction();
    },
    methods: {
      ...mapActions(["getAllPlanNamesAction"]), 
      fillData(selected){
          console.log(selected)
      },
    }
  }
</script>
答案

在内部方法中,您可以使用data引用this属性。

在您的情况下,您可以使用this.datacollection.datasets.label并分配给它:

methods: {
  // ...
  fillData(selected){
     this.datacollection.datasets[0].label = selected;
  },
}

当然,这假设selected是你想要分配给label的字符串。

注意:this仅在使用methodName() {}(如您)或methodName: function (){...声明方法时才有效。所以don't use arrow functions when declaring vue methods,他们会弄乱你的this

Bind to events using @ (v-on) not : v-bind)

你的模板:

<v-select label="Select a Plan" :items="planNames" v-model="selected" single-line max-height="auto" :change="fillData(selected)" required >

要收听更改事件,请不要使用:

:change="fillData(selected)"

使用

@change="fillData"

不要发送一个参数(它会弄乱)。 v-select已经发给你一个。

注意用:替换@

第一个,:v-bind的别名。所以:change="xyz"v-bind:change="xyz"一样。

第二个,@v-on的别名。所以@change="xyz"v-on:change="xyz"一样。这就是你想要的。

See demo JSFiddle here

Updating label of vue-chartjs's BarChart automatically

即使你是

图表不会自动反映更改(标签不会更改)。

我注意到这是因为图表只对整个datacollection变化做出反应,而不是对内部属性(如label)做出反应。

所以解决方案是:

  • “克隆”datacollection
  • 更新克隆的label
  • 将克隆分配给this.datacollection

并且图表将作出反应(标签更改将被反映)。

因此,将您的fillData方法更改为以下内容:

fillData(selected){
    let collectionClone = Object.assign({}, this.datacollection);
    collectionClone.datasets[0].label = selected;
    this.datacollection = collectionClone;
},

检查here a working DEMO CODESANDBOX of this solution(参见changeLabelAndReassign()BarChart.vue方法)。

以上是关于VueJs - 在方法之间传递变量的主要内容,如果未能解决你的问题,请参考以下文章

Android:将片段和弹出窗口的点击事件中生成的变量传递给活动的方法

在一些片段之间填充对象变量的最佳方法

如何使用Android片段管理器传递变量[重复]

初始化后,在javafx中的控制器之间传递变量[duplicate]

如何在底部导航片段(或导航抽屉)之间传递数据?

如何在两个片段之间传递位图? (我正在使用 Android 导航组件)