您好,欢迎访问一九零五行业门户网

Vue.js中路由管理器 Vue Router的详细介绍(附代码)

本篇文章给大家带来的内容是关于vue.js中路由管理器 vue router的详细介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
准备
html
<script src="https://unpkg.com/vue/dist/vue.js"></script><script src="https://unpkg.com/vue-router/dist/vue-router.js"></script><div id="app">  <h1>hello app!</h1>  <p>    <!-- 使用 router-link 组件来导航. -->    <!-- 通过传入 `to` 属性指定链接. -->    <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->    <router-link to="/foo">go to foo</router-link>    <router-link to="/bar">go to bar</router-link>  </p>  <!-- 路由出口 -->  <!-- 路由匹配到的组件将渲染在这里 n内置组件-->  <router-view></router-view></div>
javascript
// 0. 如果使用模块化机制编程,导入vue和vuerouter,要调用 vue.use(vuerouter)// 1. 定义 (路由) 组件。// 可以从其他文件 import 进来const foo = { template: '<p>foo</p>' }const bar = { template: '<p>bar</p>' }// 2. 定义路由// 每个路由应该映射一个组件。 其中component 可以是// 通过 vue.extend() 创建的组件构造器,// 或者,只是一个组件配置对象。// 我们晚点再讨论嵌套路由。const routes = [  { path: '/foo', component: foo },  { path: '/bar', component: bar }]// 3. 创建 router 实例,然后传 `routes` 配置// 你还可以传别的配置参数, 不过先这么简单着吧。const router = new vuerouter({  routes // (缩写) 相当于 routes: routes})// 4. 创建和挂载根实例。// 记得要通过 router 配置参数注入路由,// 从而让整个应用都有路由功能const app = new vue({  router}).$mount('#app')// 现在,应用已经启动了!
通过注入路由器,我们可以在任何组件内通过 this.$router 访问路由器,也可以通过 this.$route 访问当前路由:
export default {  computed: {    username () {      // 我们很快就会看到 `params` 是什么      return this.$route.params.username    }  },  methods: {    goback () {      window.history.length > 1        ? this.$router.go(-1)        : this.$router.push('/')    }  }}
routes 选项 (array)
redirect(重定向 )
//此时访问/a会跳转到/bconst router = new vuerouter({  routes: [    { path: '/a', redirect: '/b' }  ]})//重定向的目标也可以是一个命名的路由:const router = new vuerouter({  routes: [    { path: '/a', redirect: { name: 'foo' }}  ]})//甚至是一个方法,动态返回重定向目标:const router = new vuerouter({  routes: [    { path: '/a', redirect: to => {      // 方法接收 目标路由 作为参数      // return 重定向的 字符串路径/路径对象    }}  ]})
命名路由
export default [    {        path:'/',        redirect:'/app' //默认跳转路由    },    {        path: '/app',        //路由命名,可用于跳转        name: 'app',    }]//可用于跳转<router-link :to="{name:'app'}">app</router-link>
路由元信息
定义路由的时候可以配置 meta 字段:
export default [    {        path:'/',        redirect:'/app' //默认跳转路由    },    {        path: '/app',        //**相当于html的meta标签**        meta: {            title: 'this is app',            description: 'asdasd'        },    }]
嵌套路由
export default [    {        path:'/',        redirect:'/app' //默认跳转路由    },    {        path: '/app',        //子路由 匹配 /app/test         children: [           {             path: 'test',             component: login           }         ]    }]
路由组件传参
export default [    {        path:'/',        redirect:'/app' //默认跳转路由    },    {        path: '/app/:id', // /app/xxx ,组件内部可以通过$route.params.id拿到这个值        // 会把:后面的参数通过props传递给组件todozhong 中        //布尔模式        props: true,        //对象模式        props:{id:456}        //函数模式        props: (route) => ({ id: route.query.b }),        component: todo,    }]
mode选项(string)
vue-router 默认 hash 模式 —— 使用 url 的 hash 来模拟一个完整的 url,于是当 url 改变时,页面不会重新加载。
如果不想要很丑的 hash,我们可以用路由的 history 模式,这种模式充分利用 history.pushstate api 来完成 url 跳转而无须重新加载页面。
const router = new vuerouter({  mode: 'history',  routes: [...]})
这种模式要玩好,还需要后台配置支持。
base(string)
应用的基路径。例如,如果整个单页应用服务在 /app/ 下,然后 base 就应该设为 /app/
return new router({    routes,    mode: 'history',//默认使用hash#    base: '/base/', //在path前面都会加上/base/,基路径  })
linkactiveclass(string)
默认值: router-link-active
全局配置 <router-link> 的默认“激活 class 类名”。
return new router({    routes,    mode: 'history',//默认使用hash#    base: '/base/', //在path前面都会加上/base/,基路径    // 点击calss名字    linkactiveclass: 'active-link', //匹配到其中一个子集    linkexactactiveclass: 'exact-active-link',//完全匹配  })
linkexactactiveclass(string)
默认值: router-link-exact-active
全局配置 <router-link> 精确激活的默认的 class。
scrollbehavior(function)
路由跳转后是否滚动
export default () => {  return new router({    routes,    mode: 'history',//默认使用hash#    base: '/base/', //在path前面都会加上/base/,基路径    //页面跳转是否需要滚动    /*        to:去向路由,完整路由对象        from:来源路由        savedposition:保存的滚动位置    */    scrollbehavior (to, from, savedposition) {      if (savedposition) {        return savedposition      } else {        return { x: 0, y: 0 }      }    },  })}
parsequery / stringifyquery (function)
/每次import都会创建一个router,避免每次都是同一个routerexport default () => {  return new router({    routes,    mode: 'history',//默认使用hash#    base: '/base/', //在path前面都会加上/base/,基路径    // 路由后面的参数?a=2&b=3,string->object     parsequery (query) {     },      //object->string    stringifyquery (obj) {     }  })}
fallback(boolean)
当浏览器不支持 history.pushstate 控制路由是否应该回退到 hash 模式。默认值为 true。
如果设置为false,则跳转后刷新页面,相当于多页应用
<router-link>
过渡动效
<router-view> 是基本的动态组件,所以我们可以用 <transition> 组件给它添加一些过渡效果:
<transition>  <router-view></router-view></transition>
高级用法
命名视图
<router-view class="view one"></router-view><router-view class="view two" name="a"></router-view><router-view class="view three" name="b"></router-view>const router = new vuerouter({  routes: [    {      path: '/',      components: {      //默认组件        default: foo,        //命名组件        a: bar,        b: baz      }    }  ]})
导航守卫
全局守卫
import vue from 'vue'import vuerouter from 'vue-router'import app from './app.vue'import './assets/styles/global.styl'// const root = document.createelement('p')// document.body.appendchild(root)import createrouter from './config/router'vue.use(vuerouter)const router = createrouter()// 全局导航守卫(钩子)// 验证一些用户是否登录router.beforeeach((to, from, next) => {    console.log('before each invoked')    next()//   if (to.fullpath === '/app') {//     next({ path: '/login' })//     console.log('to.fullpath :'+to.fullpath )//   } else {//     next()//   }})router.beforeresolve((to, from, next) => {    console.log('before resolve invoked')    next()})// 每次跳转后触发router.aftereach((to, from) => {    console.log('after each invoked')})new vue({    router,    render: (h) => h(app)}).$mount(#root)
路由独享的守卫
可以在路由配置上直接定义 beforeenter 守卫:
export default [    {        path:'/',        redirect:'/app' //默认跳转路由    },    {          path: '/app',        // 路由独享的守卫钩子        beforeenter(to, from, next) {            console.log('app route before enter')            next()        }        component: todo,    }]
组件内的守卫
export default {  //进来之前  beforerouteenter(to, from, next) {    // 不!能!获取组件实例 `this`    // 因为当守卫执行前,组件实例还没被创建    console.log(todo before enter, this); //todo before enter undefined    //可以通过传一个回调给 next来访问组件实例。在导航被确认的时候执行回调,并且把组件实例作为回调方法的参数。    next(vm => {        // 通过 `vm` 访问组件实例      console.log(after enter vm.id is , vm.id);    });  },  //更新的时候  beforerouteupdate(to, from, next) {    console.log(todo update enter);    next();  },  // 路由离开  beforerouteleave(to, from, next) {    console.log(todo leave enter);    const answer = window.confirm('do you really want to leave? you have unsaved changes!')      if (answer) {        next()      } else {        //以通过 next(false) 来取消。        next(false)      }  },  props:['id'],  components: {    item,    tabs  },  mounted() {    console.log(this.id)  },};
相关推荐:
vue中响应式数据的简单介绍(图文)
vue.js组件中全局注册和局部注册的简单介绍以及实例分析
以上就是vue.js中路由管理器 vue router的详细介绍(附代码)的详细内容。
其它类似信息

推荐信息