Vue-Router基础学习笔记(小结)


Posted in Javascript onOctober 15, 2018

vue-router是一个插件包,要先用npm进行安装

1、安装vue-router

npm install vue-router
yarn add vue-router

2、引入注册vue-router

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

3、链接跳转

<router-link to='/home'></router-link>  //你可以在template中使用它实现一个可点击跳转到home.vue的 a 标签
this.$router.push('/about');  //在methods方法中跳转到about页面
this.$router.go('-1');  //在js中返回上一个页面

4、经常用到

this.$route.params.name  //在js中获取路由的参数
.router-link-active  //当前选中路由的匹配样式
$route.query  //获取查询参数
$route.hash  //哈希

5、路由配置

export default new Router({
  routes:[
    {        //第一层是顶层路由,顶层路由中的router-view中显示被router-link选中的子路由
      path:'/',
      name:'Home',
      component:'Home'
    },{
      path:'/user/:id',  //www.xxx.com/user/cai
      name:'user',  //:id是动态路径参数
      component:'user',
      children:[
        {
          path:'userInfo',  //www.xxx.com/user/cai/userInfo
          component:'userInfo'  //子路由将渲染到父组件的router-view中
        },{
          path:'posts',
          component:'posts'
        }
      ]
    }
  ]
})
Vue.use(Router);

6、路由参数方式变化时,重新发出请求并更新数据

//比如:用户一切换到用户二, 路由参数改变了,但组件是同一个,会被复用
// 从 /user/cai 切到 /user/wan

在User组件中:

//方法1:
  watch:{
    '$route'(to,from){
      //做点什么,比如:更新数据
    }
  }
//方法二:
  beforeRouteUpdate(to,from,next){
    //同上
  }

7、编程式导航

router.push({name:'user',params:{userId:'123'}})  //命名路由导航到user组件
<router-link :to='{name:'user',params:{userId:'123'}}'>用户</router-link>

router.push({path:'register',query:{plan:'cai'}})  //query查询参数
router.push({path:`/user/${userId}`})  //query

router.push(location,onComplete,onAbort)
router.replace()  //替换
router.go(-1)

8、命名视图

//当前组件中只有一个 router-view 时,子组件默认渲染到这里

<router-view class='default'></router-view>
<router-view class='a' name='left'></router-view>
<router-view class='b' name='main'></router-view>

routes:[
  {
    path:'/',
    components:{
      default:header,
      left:nav,
      main:content  //content组件会渲染在name为main的router-view中
    }
  }
]
//嵌套命名视图就是:子路由+命名视图

9、重定向与别名

const router = new VueRouter({
  routes: [
    { path: '/a', redirect: '/b' },
    { path: '/b', redirect: { name: 'foo' }},  //命名路由方式
    { path: '/c', redirect: to => {  //动态返回重定向目标
     // 方法接收 目标路由 作为参数
     // return 重定向的 字符串路径/路径对象
    }}
  ]
})

const router = new VueRouter({
  routes: [
    { path: '/a', component: A, alias: '/b' }  //别名:当访问 /b 时也会使用A组件
  ]
})

10、路由组件传参

const User={
  props:['id'],
  template:`<div>{{id}}</div>`
}
const router = new VueRouter({
  routes: [
    { path: '/user/:id', component: User, props: true },
  
    // 对于包含命名视图的路由,你必须分别为每个命名视图添加 `props` 选项:
    {
      path: '/user/:id',
      components: { default: User, sidebar: Sidebar },
      props: { default: true, sidebar: false }
    }
  ]
})

11、HTML5的History模式下服务端配置

const router = new VueRouter({
  mode: 'history',
  routes: [
    { path: '*', component: 404}
  ]
})

后端配置:

//Nginx
  location / {
   try_files $uri $uri/ /index.html;
  }
  
//Apache
  <IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteBase /
   RewriteRule ^index\.html$ - [L]
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule . /index.html [L]
  </IfModule>
//Node.js
  const http = require('http')
  const fs = require('fs')
  const httpPort = 80
  http.createServer((req, res) => {
   fs.readFile('index.htm', 'utf-8', (err, content) => {
    if (err) {
     console.log('无法打开index.htm页面.')
    }
    res.writeHead(200, {
     'Content-Type': 'text/html; charset=utf-8'
    })
    res.end(content)
   })
  }).listen(httpPort, () => {
   console.log('打开: http://localhost:%s', httpPort)
  })
  
//使用了Node.js的Express
  [使用中间件][1]

解耦合

routes: [
  { path: '/user/:id', component: User, props: true },
 
 
  // 对于包含命名视图的路由,你必须分别为每个命名视图添加 `props` 选项:
  {
   path: '/user/:id',
   components: { default: User, sidebar: Sidebar },
   props: { default: true, sidebar: false }
  }
 
 ]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery 加上最后自己的验证
Nov 04 Javascript
用jquery实现自定义风格的滑动条实现代码
Apr 26 Javascript
运算符&amp;&amp;的三个不同层次
Apr 07 Javascript
jquery+css实现绚丽的横向二级下拉菜单-附源码下载
Aug 23 Javascript
RequireJS入门一之实现第一个例子
Sep 30 Javascript
举例讲解JavaScript中将数组元素转换为字符串的方法
Oct 25 Javascript
JavaScript资源预加载组件和滑屏组件的使用推荐
Mar 10 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
May 04 Javascript
JS产生随机数的几个用法详解
Jun 22 Javascript
webpack配置sass模块的加载的方法
Jul 30 Javascript
浅谈vue项目用到的mock数据接口的两种方式
Oct 09 Javascript
VueQuillEditor富文本上传图片(非base64)
Jun 03 Javascript
vue安装和使用scss及sass与scss的区别详解
Oct 15 #Javascript
ndm:NPM的桌面GUI应用程序
Oct 15 #Javascript
vue基于element-ui的三级CheckBox复选框功能的实现代码
Oct 15 #Javascript
vue+axios+promise实际开发用法详解
Oct 15 #Javascript
javascript中关于类型判断的一些疑惑小结
Oct 14 #Javascript
JS面试题大坑之隐式类型转换实例代码
Oct 14 #Javascript
JS中appendChild追加子节点无效的解决方法
Oct 14 #Javascript
You might like
关于PHP递归算法和应用方法介绍
2013/04/15 PHP
php过滤XSS攻击的函数
2013/11/12 PHP
php支持中文字符串分割的函数
2015/05/28 PHP
PHP魔术方法的使用示例
2015/06/23 PHP
laravel框架与其他框架的详细对比
2019/10/23 PHP
封装了一个js图片轮换效果的函数
2011/09/28 Javascript
JS修改css样式style浅谈
2013/05/06 Javascript
xmlhttp缓存清除的2种解决方法
2013/12/13 Javascript
JS实现网页Div层Clone拖拽效果
2015/09/26 Javascript
实例解析jQuery中如何取消后续执行内容
2016/12/01 Javascript
详解JavaScript中数组的reduce方法
2016/12/02 Javascript
AngularJS封装指令方法详解
2016/12/12 Javascript
Vue.js系列之vue-router(上)(3)
2017/01/03 Javascript
jQuery ajax动态生成table功能示例
2017/06/14 jQuery
AngularJS使用ocLazyLoad实现js延迟加载
2017/07/05 Javascript
关于vue-resource报错450的解决方案
2017/07/24 Javascript
AngularJs 禁止模板缓存的方法
2017/11/28 Javascript
关于Angularjs中跨域设置白名单问题
2018/04/17 Javascript
JavaScript实现图片上传并预览并提交ajax
2019/09/30 Javascript
Node Mongoose用法详解【Mongoose使用、Schema、对象、model文档等】
2020/05/13 Javascript
[56:01]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 Effect vs EG
2018/03/31 DOTA
Python中字典的基础知识归纳小结
2015/08/19 Python
python3 线性回归验证方法
2019/07/09 Python
TensorFlow设置日志级别的几种方式小结
2020/02/04 Python
python从PDF中提取数据的示例
2020/10/30 Python
亚洲最大的眼镜批发商和零售商之一:Glasseslit
2018/10/08 全球购物
美国价格实惠的在线眼镜网站:Zeelool
2020/12/25 全球购物
实习老师个人总结的自我评价
2013/09/28 职场文书
广告词串烧
2014/03/19 职场文书
应届生求职信
2014/05/31 职场文书
2015驻村干部工作总结
2015/04/07 职场文书
2016高考感言
2015/08/01 职场文书
小学音乐课歌曲《堆雪人》教学反思
2016/02/18 职场文书
2016年综治和平安建设宣传月活动总结
2016/04/01 职场文书
2017年寒假少先队活动总结
2016/04/06 职场文书
Android基础入门之dataBinding的简单使用教程
2022/06/21 Java/Android