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实现table单双行不同显示并能单行选中
Jul 25 Javascript
js chrome浏览器判断代码
Mar 28 Javascript
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
Mar 29 Javascript
JavaScript高级程序设计(第3版)学习笔记13 ECMAScript5新特性
Oct 11 Javascript
Javascript中call的两种用法实例
Dec 13 Javascript
JS打开新窗口防止被浏览器阻止的方法
Jan 03 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
Sep 01 Javascript
跟我学习javascript的this关键字
May 28 Javascript
javascript replace()第二个参数为函数时的参数用法
Dec 26 Javascript
js中获取URL参数的共用方法getRequest()方法实例详解
Oct 24 Javascript
vue使用better-scroll实现下拉刷新、上拉加载
Nov 23 Javascript
使用Angular Cli如何创建Angular私有库详解
Jan 30 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接收shell返回的结果中文乱码问题
2014/01/23 PHP
PHP单元测试框架PHPUnit用法详解
2019/01/23 PHP
超级退弹代码
2008/07/07 Javascript
Javascript操作select方法大全[新增、修改、删除、选中、清空、判断存在等]
2008/09/26 Javascript
jquery 学习之二 属性(html()与html(val))
2010/11/25 Javascript
jQuery学习笔记之jQuery的动画
2010/12/22 Javascript
javascript中2个感叹号的用法实例详解
2014/09/04 Javascript
jQuery toggle 代替方法
2016/03/22 Javascript
js数组与字符串常用方法总结
2017/01/13 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
2017/01/20 Javascript
javascript变量提升和闭包理解
2018/03/12 Javascript
浅谈Python中重载isinstance继承关系的问题
2018/05/04 Python
python 两个一样的字符串用==结果为false问题的解决
2020/03/12 Python
Python延迟绑定问题原理及解决方案
2020/08/04 Python
支持IE8的纯css3开发的响应式设计动画菜单教程
2014/11/05 HTML / CSS
Viking Direct荷兰:购买办公用品
2019/06/20 全球购物
PHP如何防止SQL注入
2014/05/03 面试题
好的演讲稿开场白
2013/12/30 职场文书
百度吧主申请感言
2014/01/12 职场文书
销售经理工作职责
2014/02/03 职场文书
激情洋溢的毕业生就业求职信
2014/03/15 职场文书
文明村创建实施方案
2014/03/27 职场文书
《水上飞机》教学反思
2014/04/10 职场文书
服务标语大全
2014/06/18 职场文书
实验室的标语
2014/06/20 职场文书
水电维修专业推荐信
2014/09/06 职场文书
银行贷款委托书范本
2014/10/11 职场文书
违章停车检讨书
2014/10/21 职场文书
党的群众路线调研报告
2014/11/03 职场文书
2014年安全员工作总结
2014/11/13 职场文书
简单的离婚协议书范本
2014/11/16 职场文书
公司介绍信范文
2015/01/31 职场文书
置业顾问岗位职责
2015/02/09 职场文书
房地产公司工程部经理岗位职责
2015/04/09 职场文书
因个人工作失误检讨书
2019/06/21 职场文书
python神经网络学习 使用Keras进行简单分类
2022/05/04 Python