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 相关文章推荐
总结一些js自定义的函数
Aug 05 Javascript
jq实现酷炫的鼠标经过图片翻滚效果
Mar 12 Javascript
JS实现控制表格行内容垂直对齐的方法
Mar 30 Javascript
jQuery实现鼠标双击Table单元格变成文本框及输入内容后更新到数据库的方法
Nov 25 Javascript
jQuery实现圣诞节礼物动画案例解析
Dec 25 Javascript
详解如何将angular-ui的图片轮播组件封装成一个指令
May 09 Javascript
jquery dataTable 后台加载数据并分页实例代码
Jun 07 jQuery
微信小程序防止多次点击跳转(函数节流)
Sep 19 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
Mar 31 Javascript
javaScript实现一个队列的方法
Jul 14 Javascript
vue全局使用axios的操作
Sep 08 Javascript
Vue封装全局过滤器Filters的步骤
Sep 16 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 生成的XML以FLASH获取为乱码终极解决
2009/08/07 PHP
php中神奇的fastcgi_finish_request
2011/05/02 PHP
探讨各种PHP字符串函数的总结分析
2013/06/05 PHP
PHP调用MySQL存储过程并返回值的方法
2014/12/26 PHP
PHP mysql事务问题实例分析
2016/01/18 PHP
php获取数据库结果集方法(推荐)
2017/06/01 PHP
YII2框架使用控制台命令的方法分析
2020/03/18 PHP
js中的值类型和引用类型小结 文字说明与实例
2010/12/12 Javascript
JS对select控件option选项的增删改查示例代码
2013/10/21 Javascript
tangram框架响应式加载图片方法
2013/11/21 Javascript
js获得页面的高度和宽度的方法
2014/02/23 Javascript
JavaScript字符串对象split方法入门实例(用于把字符串分割成数组)
2014/10/16 Javascript
ECMA5数组的新增方法有哪些及forEach()模仿实现
2015/11/03 Javascript
vue如何实现observer和watcher源码解析
2017/03/09 Javascript
AngularJS之自定义服务详解(factory、service、provider)
2017/04/14 Javascript
javascript ES6 新增了let命令使用介绍
2017/07/07 Javascript
js链表操作(实例讲解)
2017/08/29 Javascript
玩转Koa之koa-router原理解析
2018/12/29 Javascript
小程序调用微信支付的方法
2019/09/26 Javascript
原生js+canvas实现下雪效果
2020/08/02 Javascript
CentOS7安装Python3的教程详解
2019/04/10 Python
在python中用url_for构造URL的方法
2019/07/25 Python
python 使用while循环输出*组成的菱形实例
2020/04/12 Python
python中watchdog文件监控与检测上传功能
2020/10/30 Python
CSS3 文字动画效果
2020/11/12 HTML / CSS
Html5 localStorage入门教程
2018/04/26 HTML / CSS
前端水印的简单实现代码示例
2020/12/02 HTML / CSS
C语言如何决定使用那种整数类型
2016/11/26 面试题
简历上的自我评价
2014/02/03 职场文书
后勤服务中心总经理工作职责
2014/03/03 职场文书
公司周年庆典策划方案
2014/05/17 职场文书
2015年元旦促销方案书
2014/12/09 职场文书
省级三好学生主要事迹材料
2015/11/03 职场文书
唱歌比赛拉拉队口号
2015/12/25 职场文书
《给予树》教学反思
2016/03/03 职场文书
python使用torch随机初始化参数
2022/03/22 Python