строка не добавляется на экран

#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() и попробуйте, работает ли это.