由于Vue常见于前后端分离开发场景下,所以页面跳转工作全部交给了前端,所以基于集中管理的原则,就有了vue-router插件,它给定了url和组件之间的跳转规则

Demo准备

  • vue init webpack-simple vue-router
  • cd vue-router
  • npm install
  • npm install vue-router -S

开发步骤

  • 定义组件
<template>
<div id="home">
<h3>这是主页</h3>
</div>
</template>
<template>
<div id="news">
<h3>这是新闻</h3>
</div>
</template>
  • 定义URL和组件的跳转关系  router.config.js
import Home from './components/Home.vue'
import News from './components/News.vue' export default {
routes:[
{
path:'/home',
component:Home
},
{
path:'/news',
component:News
}
]
}

  

  • 在main.js中,创建路由实例,并在Vue实例中引入
import Vue from 'vue'
import VueRouter from 'vue-router'
import App from './App.vue'
import routerConfig from './router.config.js'
import axios from 'axios' //使用VueRouter
Vue.use(VueRouter); //创建路由实例
const router=new VueRouter(routerConfig); Vue.prototype.$http=axios; new Vue({
el: '#app',
render: h => h(App),
router
})

  

  • App,vue调用
<template>
<div id="app">
<h3>
<router-link to="/home">主页</router-link>
<router-link to="/news">新闻</router-link>
</h3>
<div>
<keep-alive>
<router-view></router-view>
</keep-alive>
</div> <hr>
<button @click="send">发送AJAX请求</button>
<MyButton @click.native="send">监听组件根元素的原生事件</MyButton>
</div> </template> <script>
import MyButton from "./components/MyButton.vue";
// import axios from "axios"; export default {
name: "app",
data() {
return {};
},
mounted() {
console.log(this.$route);
},
watch: {
$route: function(newValue, oldValue) {
console.log("路由发生变化,跳转到:" + newValue.path);
}
},
components: {
MyButton
},
methods: {
send(){
// axios.get("https://api.github.com/users/tangyang8942")
this.$http.get("https://api.github.com/users/tangyang8942")
.then(resp => {
console.log(resp.data);
}).catch(err => {
console.log(err);
})
}
}
};
</script> <style>
</style>

其他注意的: 

  1. 使用axios的两种方式:1).在每个组件中引入axios   2).在main.js中全局引入axios并添加到Vue原型中
  2. 为自定义组件添加事件  .native--监听原生事件

登陆验证与页面跳转

  由于Vue是组件化思想,如果想实现类似刷新页面的效果,在根节点下App放个路由显示视图即可,组件注入则通过跳转url来实现

<template>
<div id="app">
<router-view></router-view>
</div>
</template>

  

      path: "/",
name: "index",
component: IndexComp,
children: [],
meta: {
requiresAuth: false
}

 index.vue 

<template>
<div>
<button @click="redir">主页</button>
<a href="/#/login">登陆</a>
</div>
</template> <script>
export default {
name: "",
data() {
return {};
},
methods: {
redir() {
this.$router.push({
name: "home"
// query:{}
});
}
}
};
</script>

  而跳转url是否需要登陆验证,则通过router.beforeEach方法来实现

import Vue from 'vue'
import Router from 'vue-router'
import IndexComp from './components/index.vue'
import Home from './components/home.vue'
import Login from './components/login.vue'
import Store from './store.js'; Vue.use(Router) const router = new Router({
routes: [{
path: "/",
name: "index",
component: IndexComp,
children: [],
meta: {
requiresAuth: false
}
},
{
path: '/home',
name: 'home',
component: Home,
meta: {
requiresAuth: true,
}
}, {
path: '/login',
name: 'login',
component: Login,
meta: {
requiresAuth: false,
}
}
] }) router.beforeEach((to, from, next) => {
if (to.meta.requiresAuth === false) {
next();
} else {
if (Store.state.isLogin === true) {
next();
} else {
alert('请登陆...');
next({
path: '/login',
query: {
redirect: to.fullPath
}
})
}
}
}) export default router;

  

一篇搞定vue-router的更多相关文章

  1. 一篇搞定vue请求和跨域

    vue本身不支持发送AJAX请求,需要使用vue-resource.axios等插件实现 axios是一个基本Promise的HTTP请求客户端,用来发送请求,也是vue2.0官方推荐的,同时不再对v ...

  2. 一篇搞定RSA加密与SHA签名|与Java完全同步

    基础知识 什么是RSA?答:RSA是一种非对称加密算法,常用来对传输数据进行加密,配合上数字摘要算法,也可以进行文字签名. RSA加密中padding?答:padding即填充方式,由于RSA加密算法 ...

  3. 2021升级版微服务教程6—Ribbon使用+原理+整合Nacos权重+实战优化 一篇搞定

    2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」 教程全目录「含视频」:https://gitee.c ...

  4. 一篇搞定微信分享和line分享

    前言 在h5的页面开发中,分享是不可或缺的一部分,对于一些传播性比较强的页面,活动页之类的,分享功能极为重要.例如,京东等电商年末时会有一系列的总结h5在微信中传播,就不得不提到微信的分享机制. 微信 ...

  5. 来吧!一文彻底搞定Vue组件!

    作者 | Jeskson 来源 | 达达前端小酒馆 Vue组件的概述 组件是什么呢,了解组件对象的分析,Vue组件中的data属性,props传递数据的原理到底是什么. 事件通信的那些事 如何了解父子 ...

  6. 小白6步搞定vue脚手架创建项目

    1.安装node及npm node -v (测试node是否安装成功)npm -v(测试npm是否安装成功) 2.安装cnpm npm install -g cnpm --registry=http: ...

  7. 3.十分钟搞定Vue搭建

    Vue推荐开发环境 Node.js 6.2.0.npm 3.8.9.webpack 1.13.vue-cli 2.5.1.webstrom2016 现在开始安装环境 安装nodejs 可以在终端里下载 ...

  8. 一篇搞定MongoDB

    MongoDB最基础的东西,我这边就不多说了,这提供罗兄三篇给大家热身 MongoDB初始 MongoDB逻辑与物理存储结构 MongoDB的基础操作 最后对上述内容和关系型数据做个对比 非关系型数据 ...

  9. 一篇搞定Vuex

    1.简介 首先,你必须明显明白vuex到底是干啥的,主要解决开发中的哪些问题? Vuex是一个专门为Vue.js应用程序开发的状态管理模式,它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证 ...

随机推荐

  1. ubuntu下ssh设置firefox用的反向代理

    mark一下: ssh -D 127.0.0.1:8080 -l root MyIp

  2. Java内存分析工具jmap

    1. jmap 1.1 概述 JVM Memory Map命令用于生成heap dump文件,如果不使用这个命令,还可以使用-XX:+HeapDumpOnOutOfMemoryError参数来让虚拟机 ...

  3. 0057 Spring MVC如何获取HTTP请求头信息--URL中的动态参数--@RequestHeader--@CookieValue--@PathVariable

    获取HTTP请求头信息 一个HTTP请求除了有参数和实体内容外还有HTTP请求头信息,Spring MVC也可以获取这部分信息 @RequestHeader解可以将请求头信息映射到处理方法的形参上 @ ...

  4. 在linux下编译运行C++程序

    头一回...把windows下的程序挪到linux下,代码见这篇随笔 1.编译ZTHREAD,使用./configure失败,直接编译的,方法还是上面提到的那篇随笔 2.编译源码,最开始用的cc,后来 ...

  5. IPC之共享内存

    man 7 shm_overview shm_overview - Overview of POSIX shared memory. 同样,SystemV实现的共享内存是旧的机制,但应用广泛:Posi ...

  6. Temporal Ensembling for Semi-Supervised Learning

    Laine, Samuli, and Timo Aila. "Temporal Ensembling for Semi-Supervised Learning." arXiv pr ...

  7. Matlab之合并音频

    程序功能: 1.读入wav下的所有音频 2.每个音频截取前0.6秒 3.合并每个音频 clear all; cd = 'wav'; waveFiles = dir(fullfile(cd,'*.wav ...

  8. 简要描述如何结合struts、hibernate、spring开发Web应用?

    简要描述如何结合struts.hibernate.spring开发Web应用? 解答:Struts可以将jsp页面的表单关联起来,就是把JSP页面的表单数据封装成javaBean,这样的话,在acti ...

  9. 向量类Vector

    Java.util.Vector提供了向量(Vector)类以实现类似动态数组的功能.在Java语言中.正如在一开始就提到过,是没有指针概念的,但如果能正确灵活地使用指针又确实可以大大提高程序的质量, ...

  10. Stanford CoreNLP 3.6.0 中文指代消解模块调用失败的解决方案

    当前中文指代消解领域比较活跃的研究者是Chen和Vincent Ng,这两个人近两年在AAAI2014, 2015发了一些相关的文章,研究领域跨越零指代.代词指代.名词指代等,方法也不是很复杂,集中于 ...