Метод Onload при загрузке страницы VUE

#javascript #vue.js #vuejs2

#javascript #vue.js #vuejs2

Вопрос:

Я хочу вызвать метод при загрузке страницы. Пока что я вызываю метод при нажатии, но когда я пытаюсь использовать mounted для автоматического вызова метода, он продолжает давать сбой, у вас есть какие-нибудь предложения?

Ниже приведен код:

 <template>
  <div>
    <AppHeader></AppHeader>
    <div style="display: flex">
      <ul>
        <li
          style="cursor: pointer"
          v-for="exchange of profileExchanges"
          :key="exchange.id"
          @click="getImagesByExchange(exchange.id)"
        >
          <div style="padding: 20px; border: solid 2px red">
            <h3>Brand: {{exchange.brand}}</h3>
            <p>Description: {{exchange.description}}</p>
            <p>Category: {{exchange.category}}</p>
          </div>
        </li>
      </ul>
      <div>
        <span style="margin: 10px" v-for="url of exchangeImageUrls" :key="url">
          <img width="250px" :src="url" />
        </span>
      </div>
    </div>

    <br />
  </div>
</template>

<script>

import AppHeader from '@/components/Header5'
export default {
  components: {
    AppHeader
  },
  created() {
    this.$store.dispatch('exchange/getExchangesByProfile', this.$store.state.auth.user.profile.user)
  },
  data() {
    return {
      selectedExchangeId: '',
      exchanges: []
    }
  },
  computed: {
    user() {
      return this.$store.state.auth.user
    },
    profile() {
      return this.user.profile || {}
    },
    profileExchanges() {
      return this.$store.getters['exchange/profileExchanges']
    },
    exchangeImageUrls() {
      return this.$store.getters['exchange/imageUrls']
    }
  },
  methods: {
    getImagesByExchange(exchangeId) {
      this.$store.dispatch('exchange/getImagesByExchange', exchangeId)
    },
    getListings() {

    },
    updateProfile(profile, closeModal) {
      this.$store.dispatch('auth/updateProfile', profile)
        .then(_ => {
          closeModal()
        })
    }
  }   
}

</script>
  

Я пытаюсь установить mounted следующим образом

 mounted: function() {
    this.getImagesByExchange() // Calls the method before page loads
},
  

Но он продолжает давать сбой. Я предполагаю, что проблема в том, как получить доступ к ключу, но не уверен.

Комментарии:

1. this.getImagesByExchange() ожидает аргумент exchangeId .

2. Вам нужно убедиться, что вы вызываете, getExchangesByProfile прежде getImagesByExchange чем вызывать и получать exchangeId

3. привет, спасибо за ответ, не могли бы вы привести пример или код этого? Вы имеете в виду это смонтированное: function() { this.getExchangesByProfile() this.getImagesByExchange(exchange.id ) // Вызывает метод перед загрузкой страницы },

4. Я пытаюсь использовать это this.$vnode. ключ в качестве параметра, но все еще не работает

5. Привет, Тони, я вставляю exchangeId, но это не определено.getImagesByExchange(exchangeId)

Ответ №1:

Если selectedExchangeId значение уже не задано, вы могли бы получить первый элемент profileExchanges массива и передать id в getImagesByExchange функцию:

 mounted() {
    this.getImagesByExchange(this.profileExchanges[0].id) // Calls the method before page loads
},
  

Редактировать

Еще раз взглянув на ваш код, можно предположить, что на данный момент у компонента mounted profileExchanges свойство , возможно, еще не установлено. Один из способов справиться с этим — вызвать их оба внутри created следующим образом:

 async created() {
    await this.$store.dispatch(
       'exchange/getExchangesByProfile',
        this.$store.state.auth.user.profile.user
    );
    
    if (this.profileExchanges amp;amp; this.profileExchanges.length) {
        this.getImagesByExchange(this.profileExchanges[0].id);
    }
}
  

Комментарии:

1. привет, ненавистный, спасибо за информацию, хммм, я пробую ваше предложение, и оно по-прежнему не может вызвать getImagesByExchange, пока не смонтировано() { this.getImagesByExchange(this.profileExchanges[0].id) // Вызывает метод перед загрузкой страницы}, но спасибо за ответ.

2. Хм, не могли бы вы обновить свой вопрос с последней версией вашего компонента?

3. @alfazaid пожалуйста, взгляните на правку. Надеюсь, это поможет 🙂