由于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. Java并发编程(二):JAVA内存模型与同步规则

    一.Java内存模型(JMM) 它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式.一个线程如何和何时能看到其他线程共享变量的值,以及在 ...

  2. [转]AngularJS ui-router (嵌套路由)

    本文转自:http://www.oschina.net/translate/angularjs-ui-router-nested-routes http://www.codeproject.com/A ...

  3. IT 服务管理工具 iTop

    iTop,作为全面支持ITIL流程的一款ITSM工具,具有强大的ITSM功能,开源免费.简单易用. iTop,即IT运营门户(IT Operation Portal),是一个开源web应用程序,用于I ...

  4. volatile关键字是什么意思

    我写了一段简单的对比代码并分别用vs2017以release方式编译然后用IDA观察汇编代码,如下图所示: 代码1 int a=5; printf("%d",a) 代码2 vola ...

  5. 常见sql 写法总结

    关于如何获取1对多数据中最大条数据的写法 例子: LEFT JOIN ( SELECT * FROM table AS n1 WHERE n1.ID IN ( SELECT MAX(id) FROM ...

  6. html5 webwork

    在Web开发的时候经常会遇到浏览器不响应事件进入假死状态,甚至弹出“脚本运行时间过长“的提示框,如果出现这种情况说明你的脚本已经失控了. 一个浏览器至少存在三个线程:js引擎线程(处理js).GUI渲 ...

  7. 【Raspberry pi】python ide-spyder

    sudo apt-get install spyder 简单 明了

  8. (一)Spring容器相关操作

    一.spring事件 spring的事件有如下两个成员. 1.ApplicationEvent,容器事件,由容器发布 2.ApplicationListener 监听器,可以由容器中的任何监听器Bea ...

  9. poj 1815(最小割、割集)

    题目链接:http://poj.org/problem?id=1815 思路:题目要求是剔除多少个点,可以将其转化为剔除多少条边,因此需要拆点,将点i拆成i,i+n,便容量为1,表示每个人起的传递作用 ...

  10. 关于JS中的constructor与prototype{转}

    http://www.cnblogs.com/qiantuwuliang/archive/2011/01/08/1930548.html http://www.cnblogs.com/yupeng/a ...