Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当我加载一个组件时,我能让我的代码执行一次脚本吗?_Javascript_Vue.js_Vue Router - Fatal编程技术网

Javascript 当我加载一个组件时,我能让我的代码执行一次脚本吗?

Javascript 当我加载一个组件时,我能让我的代码执行一次脚本吗?,javascript,vue.js,vue-router,Javascript,Vue.js,Vue Router,我正在用Vuejs制作一个web应用程序,我正在使用带有单文件组件的vue路由器 当用户输入路由时,将调用组件上创建的函数。在创建的函数中,我从另一个站点加载数据,但我希望此代码只执行一次,因此它不会在每次访问页面时加载。有什么办法吗 这是我现在的代码: <template> <div> <h1>Arrangementer</h1> <br> <div class="even

我正在用Vuejs制作一个web应用程序,我正在使用带有单文件组件的vue路由器

当用户输入路由时,将调用组件上创建的函数。在创建的函数中,我从另一个站点加载数据,但我希望此代码只执行一次,因此它不会在每次访问页面时加载。有什么办法吗

这是我现在的代码:

<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>

可以在父组件处加载数据,然后将其传递给组件。我不知道如何启动组件,但可以先加载数据,然后通过传递加载的数据来启动子组件。您还可以在父组件和子组件之间创建中间件组件,以便永久保存数据。您可以在创建父级或使用延迟加载时创建它。另一种解决方案(实际上不推荐)是不删除组件,而只是隐藏它,这对应用程序的性能非常不利。您还需要记住,所有这些解决方案都会导致将加载的数据始终保留在内存中,因此,除非您添加某种垃圾收集器从内存中删除这些数据(例如,在n次之后),否则内存效率不高。

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

安排人 从../components/Event导入事件; 从axios导入axios; 从.././服务器/日志导入滚动条; 导出默认值{ 组成部分:{ 事件 }, 数据:=>{ 返回{ 事件:{} }; }, 方法:{ 异步getApi{ 试一试{ const events=await axios.get/api/events; sessionStorage.setItemapi_事件,事件; 返回事件; }犯错误{ rollbar.errore; 这是$notify{ 小组:瓦塞尔, 标题:En feil oppsto, 文本:Jeg klarte ikkeåhente信息: }; } } }, 创造{ const events=sessionStorage.getItemapi_events; 如果事件{ 这个事件=事件; }否则{ 这是getApi; } } };
非常感谢。这比我想的更有效!:太好了!很高兴听到这个!