#javascript #vue.js
Вопрос:
у меня есть калькулятор, я хочу написать код JavaScript, который позволяет пользователю написать только один оператор, и он будет заменить последний оператора со взрослыми (надо только заменить оператору и не банить пользователей) я написал что-то и это работает, но он просто работает с кнопки калькулятора не когда вы записываете с клавиатурой это приведет к удалению последнего индекса с клавиатурой мой полный код находится на моем GitHub https://github.com/rozhansh43/vue-cal/
currentinput= what user writes before operators
fullformula = the math phrase that will do the mathematics multiple numbers
result = will show the answer or result with one number
и я был бы признателен, если бы кто-нибудь мог помочь мне с кодированием vue в фрагменте кода переполнения стека
, когда вы используете компоненты
if (this.fullFormula.includes('')) {
var temp = this.fullFormula.split('')
temp[temp.length-1] = op
this.fullFormula = temp.join('')
}
это код, который меняет моего оператора только с помощью кнопок
export default {
name: 'Calculator',
data () {
return {
currentSign: '',
currentInput: ' ',
fullFormula: ' ',
result: '',
inputResult: ' '
}
},
methods: {
updateNumber (digit) {
if (digit === '.') {
if (!this.currentInput || !(this.currentInput * 1) amp;amp; this.result == "") {
this.fullFormula = '0'
}
if (!(this.currentInput.includes('.'))) {
this.fullFormula = '.'
}
} else {
(!this.currentInput || (!(this.currentInput*1) amp;amp; !(this.currentInput.includes('.')))) ? (
this.currentInput = digit,
this.fullFormula = digit
):(
this.currentInput = digit,
this.fullFormula = digit
);
}
},
changeSign () {
this.currentSign ? this.currentSign = '' : this.currentSign = '-'
},
addOperator (op) {
if(this.result) {
this.fullFormula = `${this.result} ${op}`
this.result = ''
} else {
if (this.currentInput) {
this.fullFormula = `${this.result} ${op}`
this.currentSign = ''
this.currentInput = ''
} else {
if (this.fullFormula.includes('')) {
var temp = this.fullFormula.split('')
temp[temp.length-1] = op
this.fullFormula = temp.join('')
}
}
}
},
execute () {
if(this.fullFormula) {
this.fullFormula
this.result = eval(this.fullFormula)
} else {
this.fullFormula
this.result = this.currentInput
}
this.currentSign = ''
this.currentInput = ''
this.fullFormula = this.result
},
clear () {
this.currentSign = ''
this.currentInput = ''
this.fullFormula = ''
this.result = ''
},
lastindex () {
if (this.result == '') {
this.fullFormula = this.fullFormula.slice (0,-1)
} else {
this.result = this.result.toString().slice(0, -1)
this.fullFormula = this.result
}
}
}
};
* {
box-sizing: border-box;
transition: 0.25s ease;
}
.abs-center {
position: absolute;
top: 50%;
left: 50%;
right: 0;
bottom: 0;
transform: translate(-50%, -50%);
}
.block {
display: block;
position: relative;
}
.rela-inline {
display: inline-block;
position: relative;
}
.flex-r {
display: flex;
flex-wrap: wrap;
flex-direction: row;
}
.flex-c {
display: flex;
flex-wrap: wrap;
flex-direction: column;
}
.flex {
flex: 1 1 0;
}
body {
transition: 0s;
font-family: monospace;
font-size: 18px;
}
.small {
font-size: 14px;
margin-bottom: 10px;
}
.calculator {
width: 420px;
padding: 10px;
}
.display {
margin: 10px 5px;
background-color: rgb(240, 240, 240);
font-size: 36px;
letter-spacing: 4px;
text-align: right;
padding: 15px 10px;
overflow: hidden;
border: none;
border-radius: 3px;
}
.display *::before {
content: "";
background-color: rgb(240, 240, 240);
}
.button {
margin: 5px;
text-align: center;
padding: 20px 5px;
max-width: 90px;
background-color: rgb(250, 250, 250);
box-shadow: 4px 3px 80px 3px rgb(201, 201, 201);
border-radius: 3px;
flex: 1 1 0;
}
.button:hover,
.button:active {
background-color: rgba(255, 255, 255, 0.3);
cursor: pointer;
}
.button.wide {
flex: 2 1 0;
max-width: 500px;
}
.button.wider {
flex: 3 1 0;
max-width: 500px;
}
.button.grey {
background-color: rgba(53, 55, 59, 0.5);
}
.button.grey:hover,
.button.grey:active {
background-color: #494d5a;
}
.button.hidden {
cursor: defau<
opacity: 0;
}
.button.disabled {
cursor: defau<
color: rgba(255, 255, 255, 0.2);
}
.button.disabled:hover,
.button.disabled:active {
background-color: rgba(255, 255, 255, 0.1);
}
input {
width: 100%;
height: 94px;
background-color: rgb(250, 250, 250);
box-shadow: 4px 3px 80px 3px rgb(201, 201, 201);
border: none;
padding: 0 30px;
font-size: 20px;
}
<template>
<div id="app">
<div class="abs-center calculator">
<input type="text" v-model="fullFormula" @keyup.enter="execute"/>
<div class="block button-section">
<div class="flex-r button-row">
<div class="button grey" @click="clear">
AC
</div>
<div class="button grey" @click="lastindex">
C
</div>
<div class="button" @click="changeSign">
/-
</div>
<div class="button" @click="addOperator('/')">/</div>
</div>
<div class="flex-r button-row">
<div class="button" @click="updateNumber('7')">
7
</div>
<div class="button" @click="updateNumber('8')">
8
</div>
<div class="button" @click="updateNumber('9')">
9
</div>
<div class="button" @click="addOperator('*')">
*
</div>
</div>
<div class="flex-r button-row">
<div class="button" @click="updateNumber('4')">
4
</div>
<div class="button" @click="updateNumber('5')">
5
</div>
<div class="button" @click="updateNumber('6')">
6
</div>
<div class="button" @click="addOperator('-')">
-
</div>
</div>
<div class="flex-r button-row">
<div class="button" @click="updateNumber('1')">
1
</div>
<div class="button" @click="updateNumber('2')">
2
</div>
<div class="button" @click="updateNumber('3')">
3
</div>
<div class="button" @click="addOperator(' ')">
</div>
</div>
<div class="flex-r button-row">
<div class="button wide" @click="updateNumber('0')">
0
</div>
<div class="button" @click="updateNumber('.')">
.
</div>
<div class="button grey" @click="execute">
=
</div>
</div>
</div>
</div>
</div>
</template>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
Комментарии:
1. я думаю, что мне следует написать что-то вроде этого, что если он получит два оператора без чисел между ними, он должен заменить последний на более старый, но я не знаю, как это сделать