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 相关文章推荐
window.addeventjs事件驱动函数集合addEvent等
Feb 19 Javascript
高性能WEB开发 flush让页面分块,逐步呈现 flush让页面分块,逐步呈现
Jun 19 Javascript
Uglifyjs(JS代码优化工具)入门 安装使用
Apr 13 Javascript
javascript创建createXmlHttpRequest对象示例代码
Feb 10 Javascript
jquery结婚电子请柬特效源码分享
Aug 21 Javascript
jQuery的内容过滤选择器学习教程
Apr 18 Javascript
BootStrap Table 后台数据绑定、特殊列处理、排序功能
May 27 Javascript
基于vue.js无缝滚动效果
Jan 25 Javascript
JS实现的合并多个数组去重算法示例
Apr 11 Javascript
vue 查看dist文件里的结构(多种方式)
Jan 17 Javascript
JavaScript字符和ASCII实现互相转换
Jun 03 Javascript
js异步接口并发数量控制的方法示例
Nov 22 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对象类型判断
2008/08/27 PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
2015/12/19 PHP
win10 apache配置虚拟主机后localhost无法使用的解决方法
2018/01/27 PHP
基于php双引号中访问数组元素报错的解决方法
2018/02/01 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
20个最新的jQuery插件
2012/01/13 Javascript
javascript判断网页是关闭还是刷新
2015/09/12 Javascript
使用jquery如何获取时间
2016/10/13 Javascript
JS实现快速的导航下拉菜单动画效果附源码下载
2016/11/01 Javascript
React组件内事件传参实现tab切换的示例代码
2018/07/04 Javascript
JavaScript实现图片懒加载的方法分析
2018/07/05 Javascript
微信小程序 MinUI组件库系列之badge徽章组件示例
2018/08/20 Javascript
详解Angular Forms中自定义ngModel绑定值的方式
2018/12/10 Javascript
vue实现购物车结算功能
2020/06/18 Javascript
修改NPM全局模式的默认安装路径的方法
2020/12/15 Javascript
Python实现爬虫爬取NBA数据功能示例
2018/05/28 Python
浅谈Python中的全局锁(GIL)问题
2019/01/11 Python
Python代码实现删除一个list里面重复元素的方法
2019/04/02 Python
python 对字典按照value进行排序的方法
2019/05/09 Python
利用keras使用神经网络预测销量操作
2020/07/07 Python
零基础学python应该从哪里入手
2020/08/11 Python
python如何爬取动态网站
2020/09/09 Python
使用CSS3实现一个3D相册效果实例
2016/12/03 HTML / CSS
写自荐信的七个技巧
2013/10/15 职场文书
电子技术专业中专生的自我评价
2013/12/17 职场文书
幼儿园教师教学反思
2014/02/06 职场文书
《狼和小羊》教学反思
2014/04/20 职场文书
信访工作经验交流材料
2014/05/23 职场文书
2014年幼儿园园长工作总结
2014/12/17 职场文书
2015年行政助理工作总结
2015/04/30 职场文书
2015年电教工作总结
2015/05/26 职场文书
演讲比赛主持词
2015/06/29 职场文书
党风廉政建设心得体会
2019/05/21 职场文书
手写实现JS中的new
2021/11/07 Javascript
苹果可能正在打击不进行更新的 App
2022/04/24 数码科技