当使用 vue-router
和 .vue
文件时,没有记录的方法将数据从一个视图/组件传递到另一个。
让我们进行以下设置…
主.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
});
帖子.vue :
<template>
<div>
Posts.vue passing the ID to EditPost.vue: {{ postId }}
</div>
</template>
<script>
export default {
data() {
return {
allPostsHere: // Whatever...
}
}
}
</script>
编辑帖子.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 从一个视图/组件传递到另一个?
原文由 Thomas Tesla 发布,翻译遵循 CC BY-SA 4.0 许可协议
路由只能通过 URL 访问,并且 URL 必须是用户可以在 URL 栏中键入的内容,因此要将变量从一个视图组件传递到另一个视图组件,您必须使用 路由参数。
我假设您在
Posts
组件中有一个帖子列表,并且想要更改页面以编辑EditPost
组件中的特定帖子。最基本的设置是在帖子列表中添加一个链接以重定向到编辑页面:
您的路线将如下所示:
props
配置选项只是通知路由器将路由参数转换为组件道具。有关详细信息,请参阅将 道具传递给路由组件。然后在
EditPost
你会接受 id 并从服务器获取帖子。请求完成后,
EditPost
有自己的副本,可以进一步处理。请注意,在每次编辑帖子和每次进入帖子列表时,您都会向服务器发出请求,在某些情况下这可能是不必要的,因为所有需要的信息都已经在帖子列表中并且不会在请求之间更改.如果你想在这种情况下提高性能,我建议将 Vuex 集成到你的应用程序中。如果您决定这样做,组件将看起来非常相似,只是您不是通过 HTTP 请求获取要编辑的帖子,而是从 Vuex 存储中检索它。有关详细信息,请参阅 Vuex 文档。