Задать вопрос
@nezdhanov

Vue.JS + axios метод mounted не позволяет изменить данные в data, почему?

Есть компонет:
<template>
    <table class="table table-bordered table-striped">
        <thead>
        <tr>
            <th>#</th>
            <th>Truck</th>
            <th>action</th>
        </tr>
        </thead>
        <tbody>
        <tr v-for="truck in myinfo" class="trucks">
            <td>{{ truck.id }}</td>
            <td>{{ truck.name }}</td>
            <td>
                <router-link :to="{name: 'showTruck', params: {id: truck.id}}" class="btn btn-xs btn-default">
                    show
                </router-link>
            </td>
        </tr>
        </tbody>
    </table>
</template>

И есть логика этого скрипта:
import axios from 'axios'

    export default {
        data: function () {
            return {
                myinfo: [],
            }
        },
        mounted() {
            var app = this;
             axios.get('/api/get-trucks')
                 .then(function (resp) {
                     app.myinfo = resp.data;
                 })
                 .catch(function (resp) {
                     console.log(resp);
                     alert("Не удалось загрузить компании");
                 })
                 .finally(() => (console.debug(app.myinfo)));
        },
    }


Собственно ситуация следующая, данные с сервера приходят, а вот связанная данные не обновляюся.
Делал по заветам гугла и мануалов, может конечно что упустил, но вроде перепроверил все не раз...
Где я здесь ошибся? Почему данные не обновляются?
  • Вопрос задан
  • 1278 просмотров
Подписаться 1 Средний 5 комментариев
Пригласить эксперта
Ответы на вопрос 3
@Kostik_1993
Web Developer
Все зависит от того как с сервера возвращаются данные. Возможно поменять app.myinfo = resp.data; на app.myinfo = resp.data.data; и все заработает
Ответ написан
@2perca
вместо хука mounted() используйте created(),
так же избавьтесь от var app = this;, используйте просто this, например this.myinfo = resp.data; и перепишите блоки then и catch на стрелочные функции.
Ответ написан
Комментировать
nezdhanov почитайте как работаетthis в асинхронных функциях. Внутриthen у вас будет работать this, единственное что вам надо было писать this.myinfo вместо app.myinfo.
А чтобы вообще по красоте сделать, используй стрелочные функции и тогда не нужен будет костыль типа var app = this;
Вот пример стрелочной функции если что
.then((response) => {
                    console.log(this.users);
                    this.users = response.data;
                })
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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