VUE(四)路由Router

Vue Router

Vue Router是Vue.js的官方插件,用来快速实现单页应用

单页应用

SPA(Single Page Application)单页面应用程序,简称单页应用。网站的“所有”功能都在单个页面中进行呈现,一般是表现效果相似,页面并没有进行切换

优点:

  • 前后端分离开发,提高开发效率

  • 业务场景切换时,局部更新结构

  • 用户体验好,更好接近本地应用

缺点:

  • 不利于SEO
  • 初次首屏加载速度较慢
  • 页面复杂度较高
前端路由

URL与内容间的映射关系

Hash方式

通过hashchange事件监听hash变化,并进行网页内容的更新,可以进行函数的封装以方便复用

特点:

  • Hash方法的兼容性好
  • 地址中具有#,不太美观
  • 前进后退功能比较繁琐
 // 准备对象,用于封装hash功能
 var router = {
    // 路由的存储位置,保存url和内容函数的对应关系
    routes: {},
    // 定义路由规则
    route: function (path, callback)
    {   this.routes[path] = callback;  },
    // 初始化路由的方法
    init: function () {
        var that = this;
        window.onhashchange = function () {
        // 进行hash的操作
        var hash = location.hash.replace('#', '');
        // 如果存在执行函数,不存在则返回,使用&&短路方法
        that.routes[hash] && that.routes[hash]();
                }
            }
        }
History方式

采用H5提供的新功能实现前端路由,使用history.pushState(null,null,path)进行变更执行对应操作,第一个参数表示与当前路径相关的状态对象,保存数据,历史记录检测用状态对象判断

特点:

  • 书写简便,可存储数据量更大,能够实现前进后退
  • 兼容性能差,刷新需要后端的支持
  // 准备对象,用于封装history功能
 var router = {
    // 路由的存储位置,保存url和内容函数的对应关系
     routes: {},
    // 定义路由规则
     route: function (path, callback) 
     {  this.routes[path] = callback;  },
    // 用于触发指定的路由操作
     go(path){
     // 更改url  history.pushState(null,null,path);
     // 触发路由对应的回调函数
      this.routes[path]&&this.routes[path]();
            }
 }
 links.forEach(function(ele){
            ele.addEventListener('click',function(event){
                router.go(this.getAttribute('href'));
                // 阻止元素发生默认跳转行为
                event.preventDefault();
            })
        })
  • 前进后退功能,首先需要在更改url时保存路由标记

  • 通过popstate事件监听前进后退按钮操作,并检测state

    history.pushState({path:path},null,path);
    init(){
    var that=this;
    window.addEventListener('popstate',function(e)
     { var path=e.state?e.state.path:'/';
       that.routes[path]&&that.routes[path]();})
    }
    
Vue Router
简介

Vue.js官方的路由管理器,让构建单页面应用变得易如反掌

基本使用

引用路由的文件

<script src="lib/vue.js"></script>
<script src="lib/vue-router.js">

使用组件router-link来更改链接,router-view更改可视化文本

 <!-- 设置用于路由操作的组件 -->
<router-link to="/">首页</router-link>
<router-link to="/user">用户</router-link>
<router-link to="/category">分类</router-link>
<router-view></router-view>

定义路由的规则

 var routes = 
 [{ path: '/', component: Index },
  { path: '/user',component: User },
  { path: '/category',component: Category}, ];

创建路由的实例并添加到vue实例中

var router=new VueRouter({routes }); // 创建Vue实例
var vm=new Vue
({  el:'#app',  router })

命名视图

如果导航后,希望同时在同级展示多个视图(组件),就需要进行命名视图,至多有一个默认的

<router-view name="sidebar"></router-view>
//路由中通过components属性进行设置不同视图
{  path: '/category',
   components: {sidebar:Category,
                default:User}
},
动态路由

需要将某一类URL都映射到同一组件,需要使用动态路由

定义动态路由时,将路径中某个部分使用‘:’标记,就可以设置动态路由

// 设置路由规则
var routes=
[{ path:'/user/:id',component:User }];

侦听路由参数

要响应路由的参数变化,可以通过watch监听$route(由于组件没有重新创建,所以生命周期钩子created只能执行一次)

watch:{
  $route(route) 
  { console.log(route.params.id) }
      }

路由传参

通过路由的props设置数据,并通过组件props接收

var Category={
props:['id'],
template:`<div>这是类{{id}}功能</div>`}
// 设置路由规则
var routes=
[{    path:'/Category/:id',
      component:Category,
      props:true }]

当包含多个命名视图时,需要将路由的props设置为对象

props:{default:true,sidebar:false}

如果我们希望传入的是静态数据,就是将booleam值修改为对象的格式

props:{sidebar:{a:'状态1',b:'状态2'}}
嵌套路由

实际应用中,路由通常由多层嵌套组件组合而成,就需要使用嵌套路由配置

var routes=
[{  path:'/user',
    component:User,
    children:[
    {  path:'hobby',
       component:UserHobby},
    {  path:'info',
       component:UserInfo,
       children:
    [{path:'name',component:Username}]
                }]
 }]
编程式导航

通过vm的方法设置导航

  • router.push()用来导航到一个新的URL

  • router-link 的to属性使用绑定方式时也可属性对象结构

    <router-link :to="/user/300">首页</router-link>
    vm.$router.push('/user/100');
    vm.$router.push({path:'/user/20'});
    

命名路由

通过push方法编程序导航方法,也可以传入别的未定义的参数

//vm.$router.push需要在控制台进行输出
vm.$router.push({name:'school',params:{id:3}})
// 路由规则
var routes=[{
       path:'/user/:id/info/school'            name:'school',
       component:School }];

自己书写router-link :to=""属性来命名规则

<router-link :to={name:'school',params:  {id:10}}>学校10</router-link>

重定向:访问URL1的地址,跳转到URL2的位置

{path:'/category',redirect:'/'}

别名:通过简介的来访问长的URL地址

var routes=[{  path:'/user/:id/info/school/ins/:date' name:'school',
alias:'/:id/:date' }];

导航守卫:阻止一些不允许的直接访问

router.beforeEach(function(to,from,next){ next(false)//阻止所有导航的操作
   if(to.path==='/user')  
      {next('/categroy')}
   else{next()//访问其他的正常执行}
})

History模式

通过Vue Router实例的mode选项来设置,这样的URL会更加美观

var router = new VueRouter({
   mode:'history',
   routes = 
   [{  path: '/user/:id/info/school',
       component: School}]
 });

Vue CLI

简介

Vue CLI是一个基于Vue.js进行快速开发的完整系统,称为脚手架工具。

作用

统一项目架构风格

初始化配置项目依赖

提供单文件组件

安装
  • npm install -g @vue/cli
  • vue --version查看版本
项目搭建
创建项目
  • vue create project-demo
执行项目
  • cd 项目目录下
  • npm run serve
第三个预设

根据自己的需要在预设中进行更改,了解每个预设的具体含义

目录与文件

在这里插入图片描述

单文件组件

可以将组件的功能统一保存在以.vue为扩展名的文件中

  • 模板结构,通过template直接设置html结构
  • CSS样式也设置在组件之内,可维护性更高
  • 传统组件没有构建,less需要单独操作书写
new Vue({
  render: h => h(App),
}).$mount('#app')
//文件组件分离的方式
打包与部署

无法直接被浏览器访问,需要处理成传统的HTML、CSS文件

  • npm run build进行打包操作生成dist目录
  • 如果需要修改,在vue项目中修改后再重新进行打包

部署指将Vue项目dist目录部署到服务器上,以备用户查看

  • 安装静态文件服务器npm install -g serve
    组件的功能统一保存在以.vue为扩展名的文件中

  • 模板结构,通过template直接设置html结构

  • CSS样式也设置在组件之内,可维护性更高

  • 传统组件没有构建,less需要单独操作书写

new Vue({
  render: h => h(App),
}).$mount('#app')
//文件组件分离的方式
打包与部署

无法直接被浏览器访问,需要处理成传统的HTML、CSS文件

  • npm run build进行打包操作生成dist目录
  • 如果需要修改,在vue项目中修改后再重新进行打包

部署指将Vue项目dist目录部署到服务器上,以备用户查看

  • 安装静态文件服务器npm install -g serve
  • 进入到dist目录下通过serve进行命令部署
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值