当前位置: 首页 > 知识库问答 >
问题:

使用vue路由器的多组件导航前提取

琴刚豪
2023-03-14

在导航到我拥有的某些路由之前,尝试找出获取某些数据的最佳方法。

我的路线是:

let routes = [
    {
        path: '/',
        component: require('./views/Home.vue')
    },
    {
        path: '/messages',
        component: require('./views/Messages.vue'),
    },
    {
        path: '/posts',
        component: require('./views/Post.vue'),
    },
    {
        path: '/login',
        component: require('./views/Login.vue')
    },
    {
        path: '/dashboard',
        component: require('./views/Dashboard.vue'),
    }
];

/messages, /posts /dashboard我想获取一些数据,同时显示一个旋转器。

Vue路由器文档建议在路由器之前使用,在导航之前获取

beforeRouteEnter (to, from, next) {
    getPost(to.params.id, (err, post) => {
        next(vm => vm.setData(err, post))
    })
}

但我的问题是,我必须在所有三个视图组件中实现这个获取逻辑吗?由于提取的是相同的数据,我不想在每个组件中重复逻辑。

在我的根组件中没有调用beForeRouteEnter,在那里我有这个

我是vue的新手,这对我来说是个难题。


共有1个答案

支劲
2023-03-14

您是否知道vuex?因为您需要在三个不同的页面上共享相同的数据,这听起来像是vuexstore的工作。基本上,您可以将存储导入路由器,并在存储中而不是在组件上设置数据,然后您可以通过检查存储中数据的状态有条件地获取数据,如果数据已经存在,则不获取。如下所示:

import store from './store'

beforeRouteEnter (to, from, next) {
  if (store.state.post === null) {
    getPost(to.params.id, (err, post) => {
        store.dispatch('setPost', post)
        next()
    })
  }
}

假设您的存储具有名为post的状态和名为setPost的操作。

const store = new Vuex.Store({
  state: { post: null },
  actions: {
    setPost ({ commit }, post) {
      // set the post state here
    }
  }
})
 类似资料:
  • 好吧,我现在讨论的这个问题有点复杂,但我会尽量弄清楚这里发生了什么。首先,我在我的webpack应用程序中使用了最新的Vue和Vue路由器。 这是一个名为 CP.vue 这就是cp.js的开始 cp.js ^这里的模块加载了延迟加载。当我第一次导航到CP.vue的路径时,模板会显示出来,JS文件可以正常加载。您可以在控制台中看到“cp已创建”。然而,当我移动到vue路由器中另一个组件的路径,然后返

  • 我有一个关于Vuejs和Vue路由器的项目。当用户登录系统时,服务器返回一个带有令牌、用户名和名字的Json文件,该文件存储在localstorage中,以便在以下请求中使用。第一个名称在布局中用于在导航栏中显示欢迎消息。注销后,localstorage被清除,问题就在这里,当其他用户在消息welcome not reload中使用新的名字付费时。

  • 我正在使用Vue router指向src文件中名为components的文件夹中的不同组件,这很奇怪,但所有组件中的模板都是相同的,我导入了文件并以完全相同的方式定义了路由,当然除了我的主文件中的确切组件文件名之外。js文件 这是我的main.js档案 奇怪的是,它们都展示了两个组成部分,家。vue和聚会。vue,其余的根本不显示。有人能帮忙吗?同样,组件模板本身是相同的,以防您漫游,提前感谢)

  • 我正在结合Vuex和vue路由器构建Vuetify应用程序。一些视图使用默认的导航抽屉,但其他视图的导航抽屉中有不同的项。这篇文档说我可以通过道具来查看组件。所以我这样实现它: 但显然, 但是<代码>

  • 路由管理 路由管理主要是为了实现页面切换。Flutter中,页面称为路由Router,由导航器Navigator控制,导航器维护一个路由栈,路由入栈(push)则打开新页面,路由出栈(pop)则关闭页面。Flutter中的页面切换就是导航器指挥路由入栈出栈的过程,即:Navigator来push/pop页面Route的过程。写写常用场景的demo。 页面跳转 核心方法:Navigator.push