本文共 4150 字,大约阅读时间需要 13 分钟。
方式一:
直接下载 / CDN Unpkg.com 提供了基于 NPM 的 CDN 链接。上面的链接会一直指向在 NPM 发布的最新版本。你也可以像这样指定 版本号 或者 Tag。 在 Vue 后面加载 vue-router,它会自动安装的:方式二:
使用npm安装npm install vue-router
import Vue from "vue";//1. 导入vue-router包import VueRouter from "vue-router";import BusinessGrouping from "../components/umeapi/BusinessGrouping"import ProjectsOfBusinessGrouping from "../components/umeapi/ProjectsOfBusinessGrouping"import DetailsOfAPI from "../components/umeapi/DetailsOfAPI"//2. 手动安装VueRouterVue.use(VueRouter);const routes = [ { path: '/', redirect: '/groups', component: BusinessGrouping }, { path: "/groups", component: BusinessGrouping }, { path: "/groups/:groupName", // route level code-splitting // this generates a separate chunk (about.[hash].js) for this route // which is lazy-loaded when the route is visited. component: ProjectsOfBusinessGrouping, // children代表嵌套路由 children: [ { path: 'projects/:projectName', component: DetailsOfAPI }, ] }];const router = new VueRouter({//选择路由的模式,默认是hash模式 mode: 'history', routes});export default router;
'
例子:<router-link to="/foo">Go to Foo</router-link>
使用场景举例
我们有一个 User 组件,对于所有 ID 各不相同的用户,都要使用这个组件来渲染 注:在路径配置的index.js文件中,所需使用的组件要提前导入进来(import)routes: [ // 动态路径参数 以冒号开头 { path: '/user/:id', component: User } ]
使用场景举例
父组件中包含子组件,在子组件中又包含一个子子组件。。。以下是自己项目中涉及路由嵌套的部分,结合前面的index.js文件,即可理解路由嵌套的使用场景和使用规则;核心是在配置中增加children属性
父组件:BusinessGrouping.vue分组页 { {item}}
子组件:ProjectsOfBusinessGrouping.vue
分组页 { {$route.params.groupName}} { {item}}
子子组件:DetailsOfAPI.vue
{ {route.breadcrumbName}} { {route.breadcrumbName}}
使用场景
个人理解是当路由发生变化时需要使用导航守卫的方法(简单粗暴~~)根据作用范围不同可分为:
this
因为当守卫执行前,组件实例还没被创建 (3)使用该守卫时需要注意它的放置位置,当你有父组件和子组件时,且在父组件中点击链接打算跳转到子组件中,此时的beforeRouteEnter方法应该放在子组件中。 (4)使用next()可实现真正跳转到该组件前需要做的事情this
(3)与watch作用类似,但是beforeRouteUpdate可以在next()里执行一些操作this
使用场景
复用组件时,想对路由参数的变化作出响应的话,你可以简单地 watch (监测变化) $route 对象注:当路由参数变化情况如从/use/123导航到/user/456时,原来的组件实例会被复用(即渲染了同一个组件)。这种情况下,意味着组件的生命周期钩子不会被再次调用
方法一:
export default { data () { return { loading: false, post: null, error: null } }, created () { // 组件创建完后获取数据, // 此时 data 已经被 observed 了 this.fetchData() }, watch: { // 如果路由有变化,会再次执行该方法 '$route': 'fetchData' }, methods: { fetchData () { this.error = this.post = null this.loading = true } }}
方法二:
watch: { // 如果路由有变化,会再次执行该方法 '$route' (to, from){ console.log("projects from, to", from, to) if(from.params.projectName && !Object.prototype.hasOwnProperty.call(to.params, 'projectName')){ console.log("从详情页回来点击面包屑回来的") this.getAllProjectsOfGroup(to.params.groupName); } } },
转载地址:http://cqtii.baihongyu.com/