zoukankan      html  css  js  c++  java
  • Vue中的路由

    访问不同的路径,就可以返回不同的结果(不同的组件) 
    前端自己处理页面跳转都是两种方式:

    • hash模式:开发时使用hash,不会导致404错误,但是不支持SEO
    • h5中的history.pushState:上线采用h5的跳转

    VUE中的路由: 
    [安装]

    • 1、在要使用路由的项目中打开CMD命令 输入npm install vue-router,安装vue的路由模块
    • 2、在页面中先引入vue.js,再引入vue-router.js,因为vue-router是基于vue的

    [使用]

    • 1、声明创建路由表,在路由表中将路径和对应的组件关联起来
    • 2、初始化路由并传入路由表
    • 3、在vue的实例中注册路由

    router-view(全局组件:用来将路由渲染到页面上)

      • 4、在页面中使用router-view这个全局组件来将路由渲染到页面上
     let home={template:'<div>首页</div>'};
     let list={template:'<div>列表页</div>'};
    //1、创建路由表:routes为路由的映射表 配置路径和组件的关系(名字最好用routes)
     let routes=[
            //路径前必须加 ‘/’
            {path:'',component:home},//默认展示的路由(默认展示的不需要加/)
            {path:'/home',component:home},//一个路径对应一个组件
            {path:'/list',component:list},
            {path:'*',redirect:'/home'}//用户随便输入路径时,重定向到home组件,防止出现404
     ];
    //2、初始化路由(名字最好用router)
     let router=new VueRouter({//初始化路由:传入路由表
            routes:routes//路由中提供的路由表属性名就是routes所以可以简写如下
            routes
     });
    //3、在vue实例中注册路由,之后就可以在页面中使用了
     let vm=new Vue({
            el:'#app',
            router//注册路由(此处为简写方式,理由同上边路由表的简写方式)
     })
     //4、页面中使用router-view这个全局组件来将路由渲染到页面上
     <div id="app">
        <router-view></router-view>
     </div>

    router-link(全局组件,用来实现点击跳转,相当于按钮)

      • 5、使用router-link全局组件,来实现点击跳转 
        router-link存在两个属性:
      • to:跳转到哪个(必须加,值为要跳转的路径)
      • tag:要把router-link变为哪个标签(不改默认是a标签)
    //修改上面的HTML如下
      <div id="app">
          <router-link to="/home" tag="button">首页</router-link>
          <router-link to="/list" tag="button">列表页</router-link>
          <router-view></router-view>
      </div>

    页面返回与跳转的方法

    当在vue的实例中注册过路由之后,每个组件上都会有一个名叫$router的对象,还有一个叫做$route的对象;

    $router:存储了跳转的方法

    • 组件.$router.push():强制跳转到某个路径,参数为路径
    • 组件.$router.replace():路由替换,将当前路径替换为新的路径(很少用到)
    • 组件.$router.go():返回某一级,参数为返回多少级(-1为上一级,1为下一级)

    $route:存储了很多需要的参数

    只要路径改变了,$route值就会改变,可以通过watch方法监听$route属性,根据路径的不同来发送ajax请求获取到不同的数据

    • 组件.$route.params:值是一个对象,存储了路径匹配之后的值 
    //由于路径有很多,而我们不能把路径写死,所以要写成类似正则的形式来匹配路径
     /article/2/d //一个路径
     /article/:c/:a //表示路径匹配,和上面的匹配后产生一个对象,存在$route.params当中:{c:2,a:d}

    路由的嵌套

    可在路由表中嵌套二级路由,嵌套二级路由的一级路由的template也要做对应的修改;

    <div id="app">
          <router-link to="/home">首页</router-link>
          <router-link to="/detail">详情页</router-link>
          <router-view></router-view><!--一级路由显示区域-->
      </div>
      <template id="detail">
          <div>
              <router-link to="/detail/info">个人中心</router-link>
              <router-link to="/detail/about">关于我</router-link>
              <router-view></router-view><!--二级路由显示区域-->
          </div>
      </template>
     //组件
        let home={template:'<div>home</div>'};
        let detail={template:'#detail'};
        let info={template:'<div>info</div>'};
        let about={template:'<div>about</div>'};
        //创建路由表
        let routes=[
            {path:'/home',component:home},
            {
                path:'/detail',
                component:detail,
                //二级路由写在childern属性当中
                children:[
           //二级以及二级以上路由的路径永远不带‘/’,如果带‘/’代表是一级路由
                    {path:'info',component:info},
                    {path:'about',component:about}
                ]
            },
        ];
        //初始化路由并传入路由表
        let router=new VueRouter({routes});
        let vm=new Vue({
            el:'#app',
            //注册路由
            router
        })
  • 相关阅读:
    [NOIP2010]关押罪犯
    图的联通入门题
    【luogu4777】扩展中国剩余定理(EXCRT)[数论 扩展中国剩余定理]
    【luogu3868】【TJOI2009】猜数字[模板] [数论 中国剩余定理]
    【luogu1082】【noip2012】同余方程 [数论 扩展欧几里德]
    【luogu1962】斐波那契数列 [矩阵乘法]
    【uva1644】 素数间隔 Prime Gap [数学 质数筛]
    【uva307】小木棍 Sticks [dfs搜索]
    【luogu4011】孤岛营救问题(拯救大兵瑞恩) [最短路][分层思想]
    【noip2015】
  • 原文地址:https://www.cnblogs.com/webspace/p/8625332.html
Copyright © 2011-2022 走看看