一篇搞定vue-router
由于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>
其他注意的:
- 使用axios的两种方式:1).在每个组件中引入axios 2).在main.js中全局引入axios并添加到Vue原型中
- 为自定义组件添加事件 .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的更多相关文章
- 一篇搞定vue请求和跨域
vue本身不支持发送AJAX请求,需要使用vue-resource.axios等插件实现 axios是一个基本Promise的HTTP请求客户端,用来发送请求,也是vue2.0官方推荐的,同时不再对v ...
- 一篇搞定RSA加密与SHA签名|与Java完全同步
基础知识 什么是RSA?答:RSA是一种非对称加密算法,常用来对传输数据进行加密,配合上数字摘要算法,也可以进行文字签名. RSA加密中padding?答:padding即填充方式,由于RSA加密算法 ...
- 2021升级版微服务教程6—Ribbon使用+原理+整合Nacos权重+实战优化 一篇搞定
2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」 教程全目录「含视频」:https://gitee.c ...
- 一篇搞定微信分享和line分享
前言 在h5的页面开发中,分享是不可或缺的一部分,对于一些传播性比较强的页面,活动页之类的,分享功能极为重要.例如,京东等电商年末时会有一系列的总结h5在微信中传播,就不得不提到微信的分享机制. 微信 ...
- 来吧!一文彻底搞定Vue组件!
作者 | Jeskson 来源 | 达达前端小酒馆 Vue组件的概述 组件是什么呢,了解组件对象的分析,Vue组件中的data属性,props传递数据的原理到底是什么. 事件通信的那些事 如何了解父子 ...
- 小白6步搞定vue脚手架创建项目
1.安装node及npm node -v (测试node是否安装成功)npm -v(测试npm是否安装成功) 2.安装cnpm npm install -g cnpm --registry=http: ...
- 3.十分钟搞定Vue搭建
Vue推荐开发环境 Node.js 6.2.0.npm 3.8.9.webpack 1.13.vue-cli 2.5.1.webstrom2016 现在开始安装环境 安装nodejs 可以在终端里下载 ...
- 一篇搞定MongoDB
MongoDB最基础的东西,我这边就不多说了,这提供罗兄三篇给大家热身 MongoDB初始 MongoDB逻辑与物理存储结构 MongoDB的基础操作 最后对上述内容和关系型数据做个对比 非关系型数据 ...
- 一篇搞定Vuex
1.简介 首先,你必须明显明白vuex到底是干啥的,主要解决开发中的哪些问题? Vuex是一个专门为Vue.js应用程序开发的状态管理模式,它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证 ...
随机推荐
- Vivado 自带IP仿真问题
可以新建一个测试工程,通过IP catalog直接生产IP核,在IP核上右键选择 Open IP Example Design 之后选择生成路径. 启动Run Simulation.
- Xilinx IP核使用(一)--FIFO
今天在将SRIO的数据存入FIFO后,然后把FIFO中的数据不断送入FFT进行运算时,对于几个控制信号总产生问题.所以单独对FIFO进行了仿真.原来感觉FIFO的几个参数端口一目了然啊,还需要什么深入 ...
- VS中几个自动完成快捷键,还算实用
1,F2更换名字,自动完成 2.try switch等按两次TAB建,自动完成格式 3.自动属性快捷键 ctrl+r,ctrl+e 有人说是加个分号 就不需要写get set了.上下 ...
- Jmeter常用操作
一,Jmeter-http 接口脚本添加cookie 实例:学生金币充值接口 该接口有权限验证,需要admin 用户才可以操作,需要添加cookie cookie 中key 为登录的用户名,valu ...
- JS高程3:BOM-window对象
全局作用域 BOM的核心就是window对象,他是浏览器的一个实例. 它既是JS访问浏览器窗口的接口,又是ECMAScript中的global对象. 在全局作用域中,global对象,this对象,w ...
- PHPEXCEL在thinkphp中封装成类使用
PHPEXCEL在thinkphp中封装成类使用 标签: phpexcel导出导入thinkphp -- : 435人阅读 评论() 收藏 举报 分类: php() 版权声明:本文为博主原创文章,未经 ...
- HTML5七巧板canvas绘图(复习)
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- [转]JS脚本抢腾讯云学生1元代金券
转自:http://blog.csdn.net/lkxlaz/article/details/54909397 今天抢代金券,在网上看到的,虽然脚本很easy,但也mark一下吧. //make th ...
- Windows 动态库创建和使用 part 2
一.Windows动态库的创建: 1.先选择 "DLL" 和 “控项目” 2.添加一个头文件,一个源文件 CppDll.h,CppDll.cpp,一个模块定义文件 CppDll. ...
- Oracle 计算两个时间的差值
有两个日期数据START_DATE,END_DATE,欲得到这两个日期的时间差(以天,小时,分钟,秒,毫秒):天:ROUND(TO_NUMBER(END_DATE - START_DATE))小时:R ...