保持道具数据在页面上刷新

时间:2019-02-08 00:15:28

标签: vuejs2

我对VueJS道具和数据共享仍然有些困惑。说我有这个简单的组件,它显示了配置文件列表。每个配置文件都有自己的页面,该页面由名称定义,并通过router-link链接到该页面。

<template>
    <div class="card">
        <div class="card-body">
            <table class="table">
                <tbody>
                    <tr>
                        <th>Profile ID</th>
                        <th>Actions</th>
                    </tr>
                <tr v-for="profile in profiles.data" :key="profile.id">
                    <td>{{profile.id}}</td>
                    <td>
                        <router-link :to="{ name: profile.name, params: {
                             profileImage: profile.image }}" 
                             tag="a" exact> View Profile
                        </router-link>
                    </td>
                </tr>
                </tbody>
            </table>
        </div>
    </div>
</template>

<script>
    export default {
        data() {
            return {
                profiles: {}
            }
        },
        methods: {
            loadProfiles() {
                axios.get("api/profile").then(({data}) => (this.profiles = data));
            },
        created() {
            this.loadProfiles();
        }
    }
</script>

因此,当您单击一个配置文件链接时,我会根据配置文件名称进入类似localhost:8000 / profile-1的页面(在这种情况下,我假设名称为profile-1)。您会注意到,我传递了一个profileImage参数,这是与此配置文件关联的图像文件位置。

所以通用配置文件组件就是这样

<template>
    <div id="capture">
        <div class="row">
            <div class="col-12` ">
                <image :file-name = this.fileName></barchart>
            </div>
        </div>
    </div>
</template>

<script>
    import Image from '../components/Image';

    export default {
        components: {
            'image': Image
        },
        data() {
            return {
                fileName: ''
            }
        },
        created() {
            this.fileName = this.$route.params.fileName;
        }
    }
</script>

非常简单,包含一个Image组件,它将显示该配置文件的图像。我不会全部展示,但是Image组件采用以下结构

<template>
    <div>
        <div id="chart">
            <div id="barchart-container">
            </div>
        </div>
    </div>
</template>

<script>
    import * as d3 from 'd3';

    export default {
        props: {
            fileName: {
                type: String,
                required: true
            }
        },
        methods: {
            generateImage () {
               ...   
            }
        },
        created() {
            this.generateImage();
        }
    };
</script>

所以我的问题是,如果我单击链接,最终将进入个人资料页面。显示图像。一切都很好。但是,如果我随后刷新页面,该图像将不再显示,并且我收到一条错误消息,指出该组件需要其道具。

那么我该怎么做才能确保道具不会丢失页面刷新。这甚至是我采用的正确方法吗?

谢谢

0 个答案:

没有答案