gpt4 book ai didi

vue.js - 如何使用 vue-router 将数据从一个 View 传递到另一个 View

转载 作者:搜寻专家 更新时间:2023-10-30 22:34:42 25 4
gpt4 key购买 nike

使用 vue-router 时与 .vue文件,没有记录的方法将数据从一个 View /组件传递到另一个 View /组件。

让我们进行以下设置...

ma​​in.js:

import Vue from 'vue';
import VueRouter from 'vue-router';
Vue.use(VueRouter);

let routes = [
{
path: '/page1',
component: require('./views/Posts.vue')
},
{
path: '/page2',
component: require('./views/EditPost.vue')
}
];

let router = new VueRouter({
routes
});

new Vue({
el: '#main',
router
});

Posts.vue:

<template>
<div>
Posts.vue passing the ID to EditPost.vue: {{ postId }}
</div>
</template>

<script>
export default {
data() {
return {
allPostsHere: // Whatever...
}
}
}
</script>

EditPost.vue:

<template>
<div>
EditPost.vue received ID from Posts.vue: {{ receivedId }}
</div>
</template>

<script>
export default {
data() {
return {
receivedId: // This is where I need the ID from Posts.vue
}
}
}
</script>

请注意:无法直接从 EditPost.vue 接收 ID , 因为它必须从 Posts.vue 中选择.

问题:如何将 ID 从一个 View /组件传递到另一个?

最佳答案

路由只能通过 URL 访问,并且 URL 必须是用户可以在 URL 栏中键入的内容,因此要将变量从一个 View 组件传递到另一个 View 组件,您必须使用 route params。 .

我假设您在 Posts 组件中有一个帖子列表,并且想要更改页面以编辑 EditPost 组件中的特定帖子。

最基本的设置是在帖子列表中添加一个链接以重定向到编辑页面:

<div v-for="post in posts">
{{ post.title }}
<router-link :to="'/post/' + post.id + '/edit'">Edit</router-link>
</div>

你的路线看起来像这样:

[
{
path: '/posts',
component: require('./views/Posts.vue'),
},
{
path: '/post/:postId/edit',
component: require('./views/EditPost.vue'),
props: true,
},
]

props 配置选项只是通知 Router 将路由参数转换为组件 props。有关详细信息,请参阅 Passing props to route components .

然后在 EditPost 中,您将接受该 ID 并从服务器获取帖子。

export default {
props: ['postId'],

data() {
return {
post: null,
}
},

mounted() {
this.fetchPost();
},

methods: {
fetchPost() {
axios.get('/api/post/' + this.postId)
.then(response => this.post = response.data);
},
},
}

请求完成后,EditPost 有自己的副本,可以进一步处理。

请注意,在每次编辑帖子和每次进入帖子列表时,您都会向服务器发出请求,在某些情况下这可能是不必要的,因为所有需要的信息都已经在帖子列表中并且没有请求之间的变化。如果你想在这种情况下提高性能,我建议将 Vuex 集成到你的应用程序中。如果您决定这样做,组件将看起来非常相似,只是您不是通过 HTTP 请求获取要编辑的帖子,而是从 Vuex 存储中检索它。参见 Vuex documentation获取更多信息。

关于vue.js - 如何使用 vue-router 将数据从一个 View 传递到另一个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45721891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com