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 要点归纳(三) jQuery中的事件和动画(上:事件篇)
Mar 24 Javascript
加速IE的Javascript document输出的方法
Dec 02 Javascript
通过jquery还原含有rowspan、colspan的table的实现方法
Feb 10 Javascript
基于jquery实现的省市区级联无ajax
Sep 24 Javascript
jquery根据name属性查找的小例子
Nov 21 Javascript
javascript使用avalon绑定实现checkbox全选
May 06 Javascript
jquery事件绑定解绑机制源码解析
Sep 19 Javascript
JavaScript中日常收集常见的10种错误(推荐)
Jan 08 Javascript
react-router中的属性详解
Jun 01 Javascript
基于Node.js模板引擎教程-jade速学与实战1
Sep 17 Javascript
解决百度Echarts图表坐标轴越界的方法
Oct 17 Javascript
详解基于Vue的支持数据双向绑定的select组件
Sep 02 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
typecho插件编写教程(五):核心代码
2015/05/28 PHP
javascript 动态添加表格行
2006/06/22 Javascript
jquery中选择块并改变属性值的方法
2013/07/31 Javascript
jquery实现简单的轮换出现效果实例
2015/07/23 Javascript
JavaScript通过使用onerror设置默认图像显示代替alt
2016/03/01 Javascript
JavaScript字符集编码与解码详谈
2017/02/02 Javascript
Vue + Webpack + Vue-loader学习教程之功能介绍篇
2017/03/14 Javascript
解决VUEX刷新的时候出现数据消失
2017/07/03 Javascript
nodejs使用express获取get和post传值及session验证的方法
2017/11/09 NodeJs
Vue2.0 http请求以及loading展示实例
2018/03/06 Javascript
webpack打包非模块化js的方法
2018/10/24 Javascript
javascript实现的字符串转换成数组操作示例
2019/06/13 Javascript
js对象简介与基本用法示例
2020/03/13 Javascript
Nest.js散列与加密实例详解
2021/02/24 Javascript
Python Deque 模块使用详解
2014/07/04 Python
python对指定目录下文件进行批量重命名的方法
2015/04/18 Python
python3实现读取chrome浏览器cookie
2016/06/19 Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
2017/01/12 Python
python常见排序算法基础教程
2017/04/13 Python
Python实现的直接插入排序算法示例
2018/04/29 Python
tensorflow 获取模型所有参数总和数量的方法
2018/06/14 Python
pytorch 调整某一维度数据顺序的方法
2018/12/08 Python
python多线程并发让两个LED同时亮的方法
2019/02/18 Python
详解canvas绘制网络字体几种方法
2019/08/27 HTML / CSS
如何查看浏览器对html5的支持情况
2020/12/15 HTML / CSS
加拿大最大的五金、家居装修和园艺产品商店:RONA
2017/01/27 全球购物
澳大利亚家具和家居用品在线:BROSA
2017/11/02 全球购物
聪明的粉丝购买门票的地方:TickPick
2018/03/09 全球购物
香港莎莎官网Sasa.com:亚洲著名国际化妆品商城
2019/11/10 全球购物
公司前台辞职报告
2014/01/19 职场文书
出纳工作检讨书
2014/10/18 职场文书
2014年优秀党员材料
2014/12/18 职场文书
春节晚会开场白
2015/05/29 职场文书
宾馆卫生管理制度
2015/08/06 职场文书
oracle表分区的概念及操作
2021/04/24 Oracle
Redis 报错 error:NOAUTH Authentication required
2022/05/15 Redis