Кнопка переключения Vativescript Vue с v-bind - PullRequest
0 голосов
/ 19 ноября 2018

Я новичок в 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.log(gender);
                if (gender == "male") {
                    this.isMaleActive = true;
                    this.isFemaleActive = false;
                } else {
                    this.isMaleActive = false;
                    this.isFemaleActive = true;
                }
                console.log(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>

Итак, что не так с кодом?Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

В компоненте Vue data должна быть функцией, которая возвращает объект.

Пример игровой площадки

0 голосов
/ 19 ноября 2018

Вы не можете написать это, потому что вы связываете атрибут класса и устанавливаете его как статический. <StackLayout :class="{ active: isMaleActive }" ... class="btn-img" >

Что вам нужно сделать, это: <StackLayout :class="[{ active: isMaleActive }, 'btn-img']" >

...