Я использую массив в качестве параметра и получаю наблюдателя - PullRequest
0 голосов
/ 17 мая 2018

Мне нужен этот массив в качестве параметра, но когда я пытаюсь его использовать, я получаю только наблюдателя. Как использовать информацию массива вместо наблюдателя? Когда я console.log в функции, которая извлекает информацию из БД, он показывает данные, как и должно. Я не знаю, что еще делать, я уже пробовал другие способы решить эту проблему, но мне это не удалось.

           <script>
            import { ClientTable } from 'vue-tables-2';
            import Vue from 'vue';
            import Multiselect from 'vue-multiselect';
            import options from './../../../commons/helpers/grid.config';
            import edit from './edit';

            Vue.use(ClientTable, options, false, 'bootstrap4', 'default');
            Vue.component('multiselect', Multiselect);

            export default {
              name: 'Reporting',
              removable: false,
              components: {
                edit,
              },
              showLoading: true,
              data() {
                return {
                  selected: null,
                  columns: ['period', 'costCenter', 'hours', 'actions'],
                  reportingsList: [],
                  periods: [],
                  totalHours: 0,
                  options: {
                    sortable: [],
                    columnsClasses: {
                      actions: 'action-column text-center',
                      period: 'period-column',
                      costCenter: 'costCenter-Column',
                      hours: 'hours-column',
                    },
                  },
                };
              },
              mounted() {
                this.getAll();
              },
              methods: {
                getTotalHours(reportings) {
                  let result = 0;
                  for (let i = 0, length = reportings.length; i < length; i += 1) {
                    result += reportings[i].hours;
                  }
                  console.log(result); //eslint-disable-line
                  console.log(this.reportingsList); //eslint-disable-line
                  this.totalHours = result;
                },
                getAll() {
                  const url = 'reportings/getAll';

                  this.$http().get(url).then((response) => {
                    this.reportingsList = response.data;
                    console.log(this.reportingsList.length);//eslint-disable-line
                  });
                  this.getTotalHours(this.reportingsList);
                }
            </script>

1 Ответ

0 голосов
/ 17 мая 2018

Это асинхронный код, this.getTotalHours будет выполнен до окончания this.$http.get.

Вам нужно связать .then

 this.$http().get(url).then((response) => {
    this.reportingsList = response.data;
    console.log(this.reportingsList.length);//eslint-disable-line
    return response.data
  }).then(() => {
    this.getTotalHours(this.reportingsList);
  });
...