Я новичок в nativescript vue, и у меня есть вопрос о простом «переключателе», который я хочу сделать. Когда я нажимаю кнопку, она должна изменить цвет фона. Я пытался сделать это с помощью v-bind. Я знаю, что это не самый красивый код ... ;-)
<template>
<Page class = "page">
<ActionBar title = "Einstellungen">
</ActionBar>
<StackLayout orientation = "vertical" class = "page-content">
<StackLayout orientation = "horizontal" class = "nix">
<StackLayout :class = "{ active: isMaleActive }" ref='layoutMale' class = "btn-img" orientation = "vertical" padding = "10" @tap = "onTappedGender('male')" >
<Image src = "~/assets/images/male.png" />
<Label text = "Männlich" verticalAlignment = "center"></Label>
</StackLayout>
<StackLayout :class = "{ active: isFemaleActive }" ref='layoutFemale' class = "btn-img" orientation = "vertical" padding = "10" @tap = "onTappedGender('female')" >
<Image src = "~/assets/images/female.png" />
<Label text = "Männlich" verticalAlignment = "center"></Label>
</StackLayout>
</StackLayout>
</StackLayout>
</Page>
</template>
<script>
export default {
data: {
isMaleActive: false,
isFemaleActive: false,
},
name: 'settings-view',
methods: {
onTappedGender(gender){
//console.info(gender);
if (gender == "male") {
this.isMaleActive = true;
this.isFemaleActive = false;
} else {
this.isMaleActive = false;
this.isFemaleActive = true;
}
console.info(this.isMaleActive);
}
},
}
</script>
<style scoped>
ActionBar {
background-color: #53ba82;
color: #ffffff;
}
.btn-img{
border-radius: 5;
border-width: 1;
color: white;
margin: 10;
font-size: 22;
border-color: #2b3c6a;
height: 80;
width: 80;
}
.active{
background-color: blue;
}
</style>Итак, что не так с кодом? Большое Вам спасибо.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы не можете написать это, потому что вы привязываете атрибут класса и устанавливаете его как статический.
<StackLayout :class = "{ active: isMaleActive }" ... class = "btn-img" >
Что вам нужно сделать:
<StackLayout :class = "[{ active: isMaleActive }, 'btn-img']" >
На самом деле, вы можете иметь вместе атрибут класса и v-bind для класса. Проблема заключалась в функции данных.
Не знал, мой эслинт всегда на это жалуется. Но на самом деле данные не были функцией ...
В компоненте Vue data должен быть функцией, возвращающей объект.
спасибо за подсказку, но цвет фона все еще не изменился.