Задать вопрос
dauren101
@dauren101
Python, Django ,Vue.js

Vue.js данные не успевают подгрузиться?

methods: {
  async edit(id) {
      this.isEdit = 1;

     await axios
        .get(
          process.env.VUE_APP_API +
            "/" +
            this.api +
            "/" +
            this.module +
            "/" +
            this.submodule +
            "/retrieve/?id=" +
            id
        )
        .then((response) => {
          let data2=response.data[0];
          this.form.title = data2[2];
         
     
        
        })
        .catch((error) => {
          error;
        });
    },
},
  mounted() {
    setTimeout(() => {
       this.edit(this.$route.params.id);
    }, 1000);
  },

К сожалению приходится ставить timeout чтобы данные подгрузились в форму, а без timeout инпуты пустые. Подскажите пожалуйста, как сделать без timeout, вдруг данные прилетят через 2 сек или больше.
  • Вопрос задан
  • 444 просмотра
Подписаться 1 Средний 3 комментария
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
Установите наблюдение за свойством, которое должно содержать данные, в обработчике проверяйте, что пришедшее значение корректно, если да - выполняйте код, который сейчас у вас в mounted (конечно, уже без setTimeout'а):

watch: {
  данные: {
    immediate: true,
    handler(value) {
      if (value какой нужен) {
        делаете чего там вам надо
      }
    },
  },
},

Если данные разделены на несколько частей, которые загружаются независимо, сделайте вычисляемое свойство, где эти значения будут объединены в массив, и в наблюдателе проверяйте все его элементы:

computed: {
  данные() {
    return [ this.данные1, this.данные2, /* ... */ ];
  },
},
watch: {
  данные: {
    immediate: true,
    handler(value) {
      if (value.every(n => n какой нужен)) {
        делаете чего там вам надо
      }
    },
  },
},
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@kip_34
Хороший
Логично, что форма пустая изначально, т.к. данные приходят асинхронно. Проверяйте в шаблоне, пришли ли данные, например, через v-if
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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