我剛剛開始使用Vue.js,對於將數據從組件傳遞到父視圖模型/零件。將數據從組件傳遞到Vue.js 2.x中的父視圖模型
我的用例,如下:
我有一個自定義rangeslider組件(https://www.npmjs.com/package/vue-range-slider)。我使用的這3個在包裝組件Typetest.vue
:
<template>
<div class="typetest">
<div :class="'slider1-val-' + slider1RoundedValue">
<range-slider
class="slider"
min="1"
max="3"
step="0.01"
v-model="sliderValue1">
</range-slider>
</div>
<div :class="'slider2-val-' + slider2RoundedValue">
<range-slider
class="slider"
min="1"
max="3"
step="0.01"
v-model="sliderValue2">
</range-slider>
</div>
<div :class="'slider3-val-' + slider3RoundedValue">
<range-slider
class="slider"
min="1"
max="3"
step="0.01"
v-model="sliderValue3">
</range-slider>
<p>{{ slider3Texts[slider3RoundedValue] }}</p>
</div>
<p>Your Choice: {{ sliderSum }}</p>
<!-- this value needs to be passed to the parent viewmodel whenever it changes -->
</div>
</template>
<script>
import RangeSlider from 'vue-range-slider'
import 'vue-range-slider/dist/vue-range-slider.css'
export default {
name: 'typetest',
data() {
return {
sliderValue1: 2,
sliderValue2: 2,
sliderValue3: 2,
}
},
computed: {
slider1RoundedValue: function() {
return this.calcSliderValue(this.sliderValue1).toString();
},
slider2RoundedValue: function() {
return (this.calcSliderValue(this.sliderValue2)*10).toString();
},
slider3RoundedValue: function() {
return (this.calcSliderValue(this.sliderValue3)*100).toString();
},
sliderSum: function() {
return this.slider1RoundedValue*1 + this.slider2RoundedValue*1 + this.slider3RoundedValue*1
},
},
methods: {
hello: function() { console.log(this.sliderSum); },
calcSliderValue: function(val) {
switch (true) {
case val < 1.67:
return 1
break
case val < 2.34:
return 2
break
default:
return 3
}
}
},
components: {
RangeSlider
}
}
</script>
現在,每當計算財產sliderSum
變異,我需要將結果傳遞給父視圖模型。其他幾個組件則需要根據父視圖模型的sliderSum
屬性進行更新,該屬性始終需要與組件的計算屬性保持同步。它將三個範圍滑塊的狀態反映在一個值中。根據這個總和,我可以在父母中決定顯示哪些文本和圖像。
我該怎麼做到這一點?