vue router children 路由变了 组件没变_vue路由

前端路由和后端路由:

  • 后端路由:对于普通的网站,所有的超链接都是url地址,所有url都对应服务器上对应的资源

  • 前端路由:对于单页面应用程序来说,主要通过url的hash(#)来实现不同页面的切换,同时hash还有一个特点HTTP请求中不会包含hash相关的内容,所以单页面程序中的页面跳转主要用hash实现
    在单页面应用程序中这种通过hash来改变页面的方式称作前端路由区别于后端路由

路由的使用

  1. 创建一个路由对象,当导入vue-router包之后,在window全局对象中就有一个路由的构造函数VueRouter

  2. 在new路由对象的时候可以传递一个配置对象,这个配置对象的route表示路由器的匹配规则

  3. 每个路由规则都是一个对象,这个规则对象身上必须有两个属性

  • 属性1 path表示监听哪个路由链接地址

  • 属性2 component,表示如果路由是前面匹配到的path,则展示component属性对应的组件,component属性值必须是一个组件模板对象,不能是组件的引用名称

var login={            template:'

登录

' } var register={template:'

注册

' } var routerObj=new VueRouter({routes:[ {path:'/login',component:login},                {path:'/register',component:register} ] })

4. router:routerObj将路由规则对象注册到VM实例上,用来监听URL地址的变化,然后展示对应的组件

var vm=new Vue({  el:'#div1',  data:{},  methods:{},  router:routerObj    })

5. 在控制的div中使用

 

6. 在搜索栏输入对应的匹配规则,login

735dcba75a002968c195f733c9d32a62.png

66746ecf0e8f3b7f17c25928f4a998b5.png

7. 使用vue官方提供的router-link元素使用,它默认渲染为一个a标签

<router-link to="/login">登录router-link><router-link to="/register">注册router-link>

路由重定向

  1. 设置一个默认展示组件,不推荐

{path:'/',component:login},
  1. 路由redirect重定向,设置默认组件

{path:'/',redirect:'login'},

路由传参

  • 如果使用查询字符串 给路由传递参数则不需要修改路由规则的path属性

 <router-link to="/login?id=10">登录router-link>
  • 使用query传递参数

var login={  template:'

登录----{{$route.query.id}}

'}

76bafd5caa776e9fb85a58d2869eb9da.png

  • 通过params方式传递路由参数,login后面会被解析为id的值

<router-link to="/login/12">登录router-link>
{path:'/login/:id',component:login},
var login={  template:'

登录----{{$route.params.id}}

'}

路由的嵌套

  • 使用children属性实现路由嵌套,子路由path前不要加/,否则永远以根路径开始请求

"div1""/account">account
<template id="tmp1">

account 组件

"/account/login">登录"/account/register">注册
template>
var router=new VueRouter({                routes:[                    {path:'/account',component:account,                    children:[                        {path:'login',component:login},                        {path:'register',component:register}                    ]}                ]            })

命名视图

  • 命名视图在components(这时会多个s)后加属性再在使用的时候用name引入,可以使一个页面中存在多个路由

<router-view>router-view><router-view name="left">router-view><router-view name="main">router-view>
var router=new VueRouter({  routes:[    {path:'/',components:{      default:header,      left:leftBox,      main:mainBox   }},                ]})