javascript - 当我加载组件时,我可以让我的代码执行一次脚本吗?

标签 javascript vue.js vue-router

我正在 Vuejs 中制作一个 Web 应用程序,并且使用带有单文件组件的 vue-router。

当用户输入路线时,组件上的created()函数将被调用。在 created() 函数中,我从另一个站点加载数据,但我希望此代码仅执行一次,因此每次访问该页面时它都不会加载。有什么方法的想法吗?

这是我现在的代码:

<template>
    <div>
        <h1>Arrangementer</h1>
        <br>
        <div class="events">
            <Event v-for="event in events" 
                :key="event.id"
                :title="event.title"
                :desc="event.desc"
                :position="event.position"
                :start_date="event.start_date"
                :end_date="event.end_date"
                :registration="event.registration"
                :img_url="event.img_url"
                :body="event.body" />
        </div>
    </div>
</template>


<script>

import Event from '../components/Event';
import axios from 'axios';
import rollbar from '../../server/logging';

export default {
    components: {
        Event
    },
    data: () => {
        return {
            events: {}
        }
    },
    created() {
        const vm = this;
        axios.get('/api/events').then((response) => {
            vm.events = response.data;
        }).catch((e) => {
            rollbar.error(e);
            vm.$notify({
                group: "varsel",
                title: "En feil oppsto",
                text: "Jeg klarte ikke å hente info :("
            });
        })
    }
}
</script>

最佳答案

有多种方法可以做到这一点。您可以尝试将 API 响应保存在 sessionStorage 中,这样它将一直存在,直到您关闭浏览器窗口。

<template>
  <div>
    <h1>Arrangementer</h1>
    <br>
    <div class="events">
      <Event
        v-for="event in events"
        :key="event.id"
        :title="event.title"
        :desc="event.desc"
        :position="event.position"
        :start_date="event.start_date"
        :end_date="event.end_date"
        :registration="event.registration"
        :img_url="event.img_url"
        :body="event.body"
      />
    </div>
  </div>
</template>


<script>
import Event from "../components/Event";
import axios from "axios";
import rollbar from "../../server/logging";

export default {
  components: {
    Event
  },
  data: () => {
    return {
      events: {}
    };
  },
  methods: {
    async getApi() {
      try {
        const events = await axios.get("/api/events");
        sessionStorage.setItem("api_events", events);
        return events;
      } catch (err) {
        rollbar.error(e);
        this.$notify({
          group: "varsel",
          title: "En feil oppsto",
          text: "Jeg klarte ikke å hente info :("
        });
      }
    }
  },
  created() {
    const events = sessionStorage.getItem("api_events");
    if (events) {
      this.events = events;
    } else {
      this.getApi();
    }
  }
};
</script>

关于javascript - 当我加载组件时,我可以让我的代码执行一次脚本吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54149713/

相关文章:

javascript - 使用 div 的两种方式数据绑定(bind)

javascript - 在 Vue 中更新父组件数组中的子组件的正确方法是什么?

typescript - 将数据传递给根 Vue 类组件

javascript - 使用 beforeEnter 传递数据以路由组件

vue.js - 如何使用 vue-router 处理错误

javascript - vue.js 从 REST API 获取数据的问题

javascript - 为什么 return 在 getJSON 中不起作用以及为什么我不能从 getJSON 写入变量?

javascript - Promises/A+ promise 的最小接口(interface)

javascript - Firebase:使用同一按钮通过 GitHub 登录/注册

javascript - 在 Vue.js 中迭代 JSON 和打印值