• vue-router初涉


    概念:

    vue-router: vue官方路由插件。

    路由: 指单页面应用的路径管理系统。在vue中都是单页应用,相当于只有一个index.html页面,所以无法使用<a>标签,我们使用路由来管理插件路径。

    安装:

    npm install vue-router --save-dev   //--save-dev命令直接将依赖包信息写入packege.json文件中  --save写在dependencies  -dev写在devDependencies对象下

    先看一个vue-cli生成模板中router的实现:

    在main.js入口文件中,导入路由文件 router文件夹下的 index.js 和主组件 App.vue;   在index.js中定义路由配置;   在App.vue中渲染配置的组件,因为渲染节点 #app 在main.js中已经绑定

              

              

    1、定义路由

    //导入组件并命名组件名称
    import Hello from '../components/Hello.vue'
    
    //定义路由
    const mroutes=[
      {path:'/Hello', //链接路径
    name:'Hello', //路由名称
    component:Hello}, //对应的组件名称 ]
    //在Router下注册组件 export default new Router({ routes:mroutes }) //挂载到根实例 const app=new Vue({ el:'#app' router })

    //切换路由 通过to指定要去的路由
    <router-link to='/Hello'>跳转到哈喽</router-link>

    2、子路由配置

    
    
    import all from '../components/all.vue'
    import h1 from '../components/h1.vue'
    import h2 from '../components/h2.vue'


    const router1={ path:
    '/all', name: 'all', component: all, children:[ //配置子路由字段 { path:'h1', //子路由1 component:h1 },{ path:'h2', //子路由2 component:h2 } ] }

    在all.vue中添加<router-view>标签,让子路由有地方渲染

    <template>
      <div>
        <h2>all 组件</h2>
        <router-view></router-view>
      </div>
    </template>
    
    
    //添加通往子路由的入口
    <router-link to='/h1'>子路由一</router-link>
    <router-link to='/h2'>子路由二</router-link>

    3、vue-router参数传递

    3.1、直接在url中传参:

    //定义路由
        {
          path: '/hello',
          name: 'hello',
          component: hello
        }, {
          path: '/person/:userName/:userPwd',
          name: 'person',
          component: person
        }
    
    //传递参数
    <template>
      <div>
        <h2>url 传参</h2>
        <router-link to="/hello/静静是小花/123456">用户信息</router-link>
      </div>
    </template>
    
    
    //使用参数
    <template>
      <div>
        <h2>接收 url 参数</h2>
        <p>用户名:{{$route.params.userName}}</p>
        <p>用户名:{{$route.params.userPwd}}</p>
      </div>
    </template>

    3.2、通过name传参,也就是路由中定义的name标签

    //使用name
    <p> {{$.router.name}} </p>

    3.3、使用to传参

    //name是路由中定义的name  params是要传的参数
    <router-link :to="{name:'person',params:{userName:'静静是小花',userPwd:'123456'}">进入个人信息页</router-link>
    
    //还有一种写法
    <router-link :to="{name:'person',query:{userName:'静静是小花',userPwd:'123456'}">进入个人信息页</router-link>
    
    //使用
    {{$route.params.userName}}
    {{$route.query.userPwd}}

    4、单页面多路由配置

    //配置路由
    import person from '@/components/personal.vue'
    import son1 from '@/components/son1.vue'
    import son2 from '@/components/son2.vue'
    
       {
          path: '/person/:userName/:userPwd',
          name: 'person',
          component:{
            default:person,
            left:son1,
            right:son2
          }
    
    //在页面中再添加两个标签
    <router-link>个人信息总路由</router-link>
    <router-view name='son1'>路由一</router-view>
    <router-view name='son2'>路由二</router-view>
    
    //配置router-link
    <router-link to='/person'></router-link>

    5、路由重定向

     //重定向路由
    {
          path: '/',
          component: Hello
        },{
          path:'/goback',   //重定向标签
          redirect:'/'  //重定向标签 重定向到了hello组件
        }
    
    //使用重定向
    <router-link to='/goback'>重定向到首页</router-link>

    带参重定向

    {
          path: '/person/:name/:pwd',
          component: Hello
        },{
          path:'/goback/:name/:pwd',
          redirect:'/person/:name/:pwd'   //额 完全复制了上面的path...
        }

    6、别名使用

    { path: '/a',
     component: A,
     alias: '/b' //别名
    }
    
    //使用路由别名
    <router-link to='/b'></router-link>

    7、路由中的钩子函数

    //路由中配置钩子
    {
          path:'/params/:newsId(\d+)/:newsTitle',
          component:Params,
          beforeEnter:(to,from,next)=>{
            console.log('我进入了params模板');
            console.log(to); //to路由将要跳转的路径信息,一个对象
            console.log(from);//路径跳转前的路径信息,一个对象
            next();
    }
    
    //模板中配置钩子
    export default {
      name: 'params',
      data () {
        return {
          msg: 'params page'
        }
      },
      beforeRouteEnter:(to,from,next)=>{
        console.log("准备进入路由模板");
        next();
      },
      beforeRouteLeave: (to, from, next) => {
        console.log("准备离开路由模板");
        next();
      }
    }

    8、编程式导航(在业务逻辑中完成导航)

    //绑定函数
    <button @click='goBack'>后退</button>
    <button @click='goHead'>前进</button>
    <button @click='login'>回到首页</button>
    
    //script中编写
    <script>
    export default{
      name:'app',
      methods:{
       goBack(){
          this.$router.go(-1)  //返回前一页
        },
        goHead(){
          this.$router.go(1)  //类似于网站的前进键
        },
        login(){
          this.$router.push('/login') //跳到首页 参数是路由名称
        }
      }
    }
    </script>

      这里没有写路由设置动画、运行模式、滚动行为、懒加载等,官网上写得很详细,多看文档啊平时,文档传送门:   https://router.vuejs.org/zh-cn/installation.html

     

  • 相关阅读:
    bzoj4571: [Scoi2016]美味
    hdu2929 Bigger Is Better
    将博客搬家到博客园了
    BZOJ4567[Scoi2016]背单词
    BZOJ 4568 幸运数字
    BZOJ 4569 萌萌哒
    BZOJ4570: [Scoi2016]妖怪
    poj3468 A Simple Problem with Integers(zkw区间修改模板)
    spoj 8222
    hdu 4918
  • 原文地址:https://www.cnblogs.com/hongdiandian/p/8378542.html
Copyright © 2020-2023  润新知