#javascript #vue.js
Вопрос:
я хочу, чтобы я мог вызывать переменную и манипулировать ею в методе следующим образом,
<template>
<div>
<a @click=change(hair,'red')>Red</a>
<a @click=change(hair,'blue')>Blue</a>
<a @click=change(eyes,'yellow')>Yellow</a>
</div>
</template>
data() {
return {
eyes: '',
hair: ''
}
}
methods: {
change(model, type){
model = type
... someother actions
}
}
когда я вызываю функцию изменения, она получает модель и текст, а затем я могу управлять ею в области методы
Комментарии:
1. Вы имеете в виду, что хотите манипулировать состоянием (объектом данных)? И если это так, вам нужно сделать это[модель] = тип.
Ответ №1:
Вы должны указать значение @click=
в кавычках, чтобы это сработало.
<a @click="change(hair,'red')">Red</a>
Кроме того, вы передаете значение this.eyes
и this.hair
в качестве аргументов функции при нажатии на ссылку. Это означает, что при запуске change
функции model
аргумент устанавливается в пустую строку.
Что вам нужно, так это идентификатор, чтобы вы знали, какое свойство обновлять. Просто введите строку для ключа данных, который вы хотите обновить:
<a @click="change('hair','red')">Red</a>
и ваш метод изменения становится:
methods: {
change(modelKey, type){
console.log(modelKey)
this[modelKey] = type
console.log('hair: ', this.hair)
console.log('eyes: ', this.eyes)
}
}
Комментарии:
1. Спасибо! вот почему он возвращает пустую строку, в которой должны быть кавычки
Ответ №2:
<template>
<div>
<a @click=change(hair,'red')>Red</a>
<a @click=change(hair,'blue')>Blue</a>
<a @click=change(eyes,'yellow')>Yellow</a>
</div>
</template>
data() {
return {
eyes: '',
hair: ''
}
}
methods: {
change(model, type){
// This line will update the state
this[model] = type
}
}