Как ждать загруженных данных из Vuex?

У меня есть хранилище Vuex, где я храню "пользователя" (объект загружен с сервера)

В основном App.vue в созданном разделе я всегда заполняю «пользователь»

Это асинхронный метод. Мои компоненты не ждут. Когда я использую в шаблоне {{user.logo}}, я получаю ошибку в консоли 404

http://example.net/images/undefined

Но в следующую секунду, когда пользователь загрузил, ошибка исчезла.

Как заставить приложение ждать загруженной асинхронной даты в Vuex?


Обновлено. Я понимаю, почему это происходит. Компонент установлен, асинхронные данные не готовы. Я делаю состояние «готовым» в Vuex, оно становится истинным после успешной загрузки. Проверяю "готово" в вычисляемой секции. если не готов, возвращает no_logo.png

Но в моем компоненте в созданном разделе, когда я получаю другие данные с сервера с помощью user.id из магазина Vuex (но пользователь еще не готов), я получил ошибку. Как проверить готовность в созданном разделе перед загрузкой?

//html
<div id='app'>

  <ul>
    <li v-for='role in roles'>
      <p>{{role}}</p>
    </li>
  </ul>


</div>

//script Vue
var app = new Vue({
  el: '#app',
  data: {
    roles: []
  },

  created: {
    this.fetchingItems() //GOT ERROR need check Ready!!!
  },

  methods: {
    fetchingItems() {
      axios.get('api/getRoles/${this.$store.user.id}')
        .then((res) => this.roles = res.data.roles)
    }
  }
})


// This is store!!!.
const store = new Vuex.Store({
  state: {
    ready: false,
    user: {}
  },
  mutations: {
    USER_SET(state, user) {
        state.user = user
      },
      READY_SET(state) {
        state.ready = true
      }

  },
  action: {
    loadUser() {

  axios.get('api/getUser/${parseInt(localStorage.getItem('user_id'))}')
      commit('USER_SET', res.data.user)
      commit('READY_SET')

    }
  }
})

person Ilya Vo    schedule 01.07.2017    source источник
comment
Вы отправляете действие loadUser в метод ready()?   -  person Lucas Katayama    schedule 01.07.2017
comment
готов это не метод. его состояние в vuex   -  person Ilya Vo    schedule 01.07.2017
comment
ready (), описанный в vue2.   -  person Ilya Vo    schedule 01.07.2017


Ответы (2)


Это произойдет, потому что информация о пользователе отсутствует при монтировании компонента, но в конечном итоге она будет там.

На этом изображении вы выполняете отправку и действие, запрашивая данные у Backend API, а затем фиксируете их в магазине.

введите здесь описание изображения

До фиксации все в компоненте не будет заполнено фактическими данными.

Что вам нужно сделать, так это использовать v-if, чтобы показать компонент или нет.

Другой способ - показать наложение, пока все данные не загрузятся следующим образом:

введите здесь описание изображения

person Lucas Katayama    schedule 01.07.2017
comment
Я понимаю, почему это происходит. Компонент установлен, асинхронные данные не готовы. Я делаю состояние «готовым» в Vuex, оно становится истинным после успешной загрузки. Проверяю «готово» в вычисляемой секции. если не готов, он возвращает no_logo.png Но в моем компоненте в созданном разделе, когда я получаю данные с сервера по user.id из хранилища Vuex (но пользователь еще не готов), я получил ошибку. Как проверить готовность в созданном разделе перед загрузкой? - person Ilya Vo; 01.07.2017

я чиню это!

используйте часы.

watch: {
        ready: function () {
            this.fetchingItems()
        }
    },
person Ilya Vo    schedule 01.07.2017