@beduin01

Как выполнить computed только после выполнения функции?

Проблема в том, что я получаю ошибку: Cannot read property 'april' of undefined"

Код следующий:
var app = new Vue({
  el: '#app',
  data: {
    my_dates: {},
  },
    computed: {
      myvalue: function () {
        return Number(this.my_dates['2018-04-23']['april']) + Number(this.my_dates['2018-04-23']['may'])
      }
    },

    methods: 
    {
      getTableData: function()
      {
          // GET /someUrl
      this.$http.get('http://127.0.0.1:8000/ponizovka_get_data').then(response => {
        // get body data
        this.my_dates = response.body;

      }, response => {
        // error callback
      });
      }
    },

    created: function(){
        this.getTableData()
    }

})


При этом вывод в шаблоне:
{{my_dates['2018-04-23']}} работает.
Однако к my_dates['2018-04-23']['april'] обратиться не получается. Тоесть оно выводится, но ругается (см выше).

Я хочу сделать так, чтобы у меня computed выполнялся только после того как все данные загружены? Хотя возможно проблема в том, что Vue не обрабатывает вложенный объект т.к. my_dates['2018-04-23'] он видит, а вот my_dates['2018-04-23']['april'] уже нет
  • Вопрос задан
  • 330 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
Вопрос - а как вы используете myvalue? Если где-то в шаблоне, то v-if исправит ситуацию:

<div v-if="my_dates['2018-04-23']">{{ myvalue }}</div>

В противном случае есть смысл делать проверку на существование нужного свойства в my_dates и действовать по обстоятельствам, например так:

myvalue() {
  сonst date = this.my_dates['2018-04-23'];
  return date ? Number(date.april) + Number(date.may) : null;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы