#javascript #vue.js #vue-component
#javascript #vue.js #vue-компонент
Вопрос:
Я пытался создать калькулятор. Я использовал vue.js чтобы заставить его работать. второе строковое значение не добавляется на экран калькулятора при следующем нажатии кнопки калькулятора. проблема возникла после того, как я написал некоторую логику для арифметических операций в разделе метода. простите за мой плохой английский.
вот мой код ‘calculator.vue’ в компонентах
<template>
<div class="calculator">
<div class="display">{{current || '0'}}</div>
<div class="btn" @click="clear">AC</div>
<div class="btn" @click="sign"> /-</div>
<div class="btn" @click="percent">%</div>
<div class="btn operator" @click="divide">/</div>
<div class="btn" @click="append('7')">7</div>
<div class="btn" @click="append('8')">8</div>
<div class="btn" @click="append('9')">9</div>
<div class="btn operator" @click="times">x</div>
<div class="btn" @click="append('4')">4</div>
<div class="btn" @click="append('5')">5</div>
<div class="btn" @click="append('6')">6</div>
<div class="btn operator" @click="minus">-</div>
<div class="btn" @click="append('1')">1</div>
<div class="btn" @click="append('2')">2</div>
<div class="btn" @click="append('3')">3</div>
<div class="btn operator" @click="plus"> </div>
<div class="btn zero" @click="append('0')">0</div>
<div class="btn" @click="dot">.</div>
<div class="btn operator" @click="equal">=</div>
</div>
</template>
<script>
export default {
data() {
return {
current: "",
previous: null,
operator: null,
operatorClicked: false,
};
},
methods: {
clear() {
this.current = "";
},
sign() {
this.current =
this.current.charAt(0) === "-"
? this.current.slice(1)
: `-${this.current}`;
},
percent() {
this.current = `${parseFloat(this.current) / 100}`;
},
append(number) {
this.current = `${this.current}${number}`;
},
dot() {
if (this.current.indexOf(".") === -1) {
this.append(".");
}
},
setPrevious() {
this.previous = this.current;
this.operatorClicked = false;
},
divide() {
this.operator = (a, b) => a / b;
this.setPrevious();
},
times() {
this.operator = (a, b) => a * b;
this.setPrevious();
},
minus() {
this.operator = (a, b) => a - b;
this.setPrevious();
},
add() {
this.operator = (a, b) => a b;
this.setPrevious();
},
},
};
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.calculator {
font-size: 30px;
width: 300px;
margin: 0 auto;
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-auto-rows: minmax(50px, auto);
}
.display {
grid-column: 1/5;
background-color: #333;
color: white;
}
.zero {
grid-column: 1/3;
}
.btn {
background-color: #f2f2f2;
border: 1px solid #999;
cursor: pointer;
}
.operator {
color: white;
background-color: orange;
}
</style>
Комментарии:
1. В вашей функции добавления, что, если вы сделаете это
${this.current}{number}
вместо этого${this.current}${number}
2. о, неважно….. Я прочитал это неправильно
3. Я не совсем уверен, о какой проблеме вы спрашиваете. Проверьте свою консоль на наличие ошибок. У вас есть несоответствие имен для
add
иplus
. У вас нет вызываемого методаequal
. Я предполагаю, чтоsetPrevious
также следует очиститьcurrent
. jsfiddle.net/skirtle/9x2mf7yg/1
Ответ №1:
Я поместил ваш код в codepen, и он отлично работает. Единственными недостающими элементами были два отсутствующих неопределенных метода, которые вы используете в шаблоне. Когда я добавил их, все работает так, как задумано.
URL-АДРЕС Codepen —https://codepen.io/butttons/pen/rNeyypV
Добавьте методы plus()
и equal()
и попробуйте, работает ли это.