#vue.js
#vue.js
Вопрос:
У меня на сайте есть кнопка, которая дает бонусы пользователю. Мне нужно выполнить несколько условий в 1 кнопке.
Если heal_used = 1
или diff < 1
, кнопка должна быть отключена. Я пытался сделать это так:
<button v-if="heal_used 1" :disabled="diff < 1" v-else class="btn btn--small btn--purple" @click="takeBonus">Take</button>
Но ничего не получалось. Кроме того, если кнопка активна и пользователь может получить бонус, после получения бонуса вам нужно сделать кнопку неактивной. Я сделал это так:
if (data.type === 'success') {
this.bonus_num = data.bonus_num;
this.heal_used = data.heal_used;
this.$forceUpdate();
}
Это правда? Не могли бы вы помочь мне, пожалуйста, сделать 2 условия?
Обновить
Я меняю код на:
<button class="btn btn--small btn--purple" :disabled="isDisabled" @click="takeBonus">Take</button>
И добавить:
computed: {
isDisabled() {
return this.heal_used = 1 || this.diff < 10;
},
},
Консоль.журнал говорит мне:
console.log(data.heal_used);
console.log(data.diff);
0
17
Но кнопка все еще отключена, что не так?
ОБНОВЛЕНИЕ takeBonus:
takeBonus() {
this.$root.axios.post('/user/takeBonus', {
value: this.user.cashback
})
.then(res => {
const data = res.data;
if (data.type === 'success') {
this.bonus_num = data.bonus_num;
this.$root.user.balance = data.newBalance;
this.heal_used = data.heal_used;
this.$forceUpdate();
}
this.$root.showNotify(data.type, this.$t(`index.${data.message}`));
})
},
Комментарии:
1. Должно быть
this.heal_used === 1
. в противном случае вы просто устанавливаете ее на 1 каждый раз2. да, теперь это работает. но другой, я добавляю к вычисляемому:
this.$forceUpdate();
, и когда я нажимаю на кнопку, она не отключается, после щелчка3. Непонятно, что
takeBonus
делает. Взаимодействует ли она с сервером? Что такоеdata.type
? Слишком много скрытого кода.4. да, это сообщается с сервером, я обновляю свой вопрос с помощью кода
5. Вам никогда не понадобится
forceUpdate
. Но помимо этого, где происходит сбой функции? Протестируйте каждую переменную в консоли.
Ответ №1:
new Vue({
el: '#example',
data: {
heal_used : 4,
diff: 3
},
methods: {
takeBonus1: function () {
this.heal_used=1;
this.diff=0;
},
takeBonus2: function () {
this.heal_used=1;
this.diff=4;
},
takeBonus3: function () {
this.heal_used=2;
this.diff=.1;
},
reset: function () {
this.heal_used=4;
this.diff=3;
}
}
})
<head>
<title>My first Vue app</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12"></script>
</head>
<body>
<div id="example">
<p>
<span>heal_used: {{ heal_used }}</span>
<span>diff: {{ diff }}</span>
</p>
<button
@click="takeBonus1()"
:disabled="heal_used===1 || diff < 1" >
Take bonus (both)
</button>
<br>
<button
@click="takeBonus2()"
:disabled="heal_used===1 || diff < 1" >
Take bonus (heal_used===1)
</button>
<br/>
<button
@click="takeBonus3()"
:disabled="heal_used===1 || diff < 1" >
Take bonus (diff < 1)
</button>
<br>
<button
@click="reset()">
Reset
</button>
</div>
</body>