Я пытаюсь использовать компонент, который меняет многолетний опыт работы с языком программирования. Чтобы сделать это, я использую пару кнопок для добавления и вычитания лет, а также «tech» для передачи языка. то есть: PHP, JS и т.д.vue.js 2 Повторное использование компонента с двумя разными родительскими переменными
<script type="text/template" id="years_template">
<div>
<p>How mane years of experience with {{ tech }} do you have?</p>
<p>
Answer: <strong>{{ years }}</strong>
<button type="button"
class="btn"
@click="add">+</button>
<button type="button"
:disabled="years == 0"
class="btn"
@click="sub">-</button>
</p>
</div>
</script>
Мои глобальные переменные years_p и years_JS, и им пытается повторно использовать компонент «года-EXP», так что каждый человек меняет каждый глобальные переменный. Я могу сделать один из них, следуя руководству this. Однако, когда я хотел повторно использовать компонент years-exp только с одним событием emit и listen, он всегда менял переменную years_php, поэтому мне пришлось использовать «test» prop и проверить его значение для разных случаев, вот мои годы-exp компонент:
Vue.component('years-exp', {
template: '#years_template',
data(){
return {
years : 0
}
},
watch:{
'years': function(years, oldYears){
console.log('years changed from %s to %s', oldYears, years)
switch (this.test) {
case "years_php":
bus.$emit('PHPyears-changed', years);
break;
case "years_js":
bus.$emit('JSyears-changed', years);
break;
}
},
},
methods: {
add: function() {
this.years++;
},
sub: function() {
this.years--;
},
},
props: ['test','tech']
});
И добавьте следующий код в моем Vue например:
created: function() {
// store this to use with Vue.set
var temp = this;
bus.$on('PHPyears-changed', function (years) {
Vue.set(temp, 'years_php', years);
//Vue.set(temp, 'years_js', years)
});
bus.$on('JSyears-changed', function (years) {
Vue.set(temp, 'years_js', years);
//Vue.set(temp, 'years_js', years)
})
},
И здесь я вставить их в HTML:
<years-exp test="years_php" tech="PHP"></years-exp>
<years-exp test="years_js" tech="JS"></years-exp>
есть еще один способ сделать это в V ue.JS 2+?
Спасибо за ваш ответ! Внутри handleYearsChanged(), как бы я дифференцировать годы, связанные с years_php и те, которые связаны с years_js, если у меня есть только одно событие emit для обоих из них? Или вы предлагаете использовать разные методы для каждого компонента, например: handlePHPYearsChanged(), handleJSYearsChanged() и т. Д. –
@AlexanderOyarzabal Да, вы не различаете их в дочернем элементе, просто привязывайте разные обработчики к 'years-changed' в родительском , как вы заявили. –