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"
一样。这就是你想要的。
Updating label
of vue-chartjs
's BarChart
automatically
即使你是
- using the
reactiveProp
mixin;和 - 改变标签
图表不会自动反映更改(标签不会更改)。
我注意到这是因为图表只对整个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:将片段和弹出窗口的点击事件中生成的变量传递给活动的方法