Есть ли способ передать реактивную переменную в вызове метода в vue?

#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
   }
}