Vue.js生态之vue-router

vue-router是什么?

vue-router是Vue的路由系统,定位资源的,我们可以不进行整页刷新去切换页面内容。

vue-router的安装与基本配置

vue-router.js 可以下载 也可以用cdn,基本配置信息看如下代码

// html 代码
<div id="app">
<div>
<router-link to="/">首页</router-link>
<router-link to="/about">关于我们</router-link>
</div>
<div>
<router-view></router-view>
</div> </div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
<script src="../js/router_demo.js"></script>
// js 代码
var routes = [
{
path: "/",
component: {
template: `<div><h1>首页</h1></div>`
}
},
{
path: "/about",
component: {
template: `<div><h1>关于我们</h1></div>`
}
}
] var router = new VueRouter({
routes: routes,
// 路由去掉#
// mode: 'history',
}); var app = new Vue({
el: '#app',
router: router,
});

路由的一些方法

路由传参以及获取参数~~

// html 代码
<div id="app">
<div>
<router-link to="/">首页</router-link>
<router-link to="/about">关于我们</router-link>
<router-link to="/user/琴女?age=20">琴女</router-link>
<router-link to="/user/提莫">提莫</router-link>
</div>
<div>
<router-view></router-view>
</div>
</div>
// js 代码
var routes = [
{
path: "/",
component: {
template: `<div><h1>首页</h1></div>`
}
},
{
path: "/about",
component: {
template: `<div><h1>关于我们</h1></div>`
}
},
{
path: "/user/:name",
component: {
template: `<div>
<h1>我是:{{$route.params.name}}</h1>
<h1>我年龄是:{{$route.query.age}}</h1>
</div>`,
}
}
] var router = new VueRouter({
routes: routes,
}); var app = new Vue({
el: '#app',
router: router,
});

命名路由~  注意router-link里to一定要v-bind~~

<div id="app">
<div>
<router-link to="/">首页</router-link>
<router-link :to="{name: 'about'}">关于我们</router-link>
<router-link to="/user/gaoxin?age=19">gaoxin</router-link>
</div>
<div>
<router-view></router-view>
</div>
</div>
// js代码
let routes = [
{
path: '/',
component: {
template: `<h1>这是主页</h1>`
}
},
{
path: "/about",
name: "about",
component: {
template: `<h1>关于我们</h1>`
}
},
{
path: "/user/:name",
component: {
template: `<div>
<h1>我是{{$route.params.name}}</h1>
<h2>我的年龄是{{$route.query.age}}</h2>
</div>
`
}
}
]; let router = new VueRouter({
routes: routes,
mode: "history"
}); const app = new Vue({
el: "#app",
router: router,
mounted(){
console.log(this.$route)
console.log(this.$router)
}
})

子路由

// 添加子路由变化的只有父级路由
// 基于上面的例子增加
// js 代码
{
path: "/user/:name",
component: {
template: `<div>
<h1>我是:{{$route.params.name}}</h1>
<h1>我年龄是:{{$route.query.age}}</h1>
<router-link to="more" append>更多信息</router-link>
<router-view></router-view>
</div>`,
},
children: [
{
path: "more",
component: {
template: `<div>
{{$route.params.name}}的详细信息
</div>`,
}
}
] },

手动访问路由,以及传参~~

// 基于上面例子追加
// html 代码
<div id="app">
<div>
<router-link to="/">首页</router-link>
<router-link to="/about">关于我们</router-link>
<router-link to="/user/琴女?age=20">琴女</router-link>
<router-link to="/user/提莫">提莫</router-link>
// 添加一个button按钮
<button @click="on_click">旅游</button>
</div>
<div>
<router-view></router-view>
</div>
</div>
// js 代码
// 注意路由name的使用 这是在原例子追加
var app = new Vue({
el: '#app',
router: router,
methods: {
on_click: function () {
setTimeout(function () {
this.$router.push('/about')
setTimeout(function () {
this.$router.push({name: "user", params:{name: "琴女"},query:{age: 20}})
}, 2000)
}, 2000)
}
}
});

命名路由视图 router-view

当我们只有一个<router-view></router-view>的时候~所有内容都展示在这一个面板里面~

如果是content 和 footer 就需要同时显示并且不同区域~这就需要对视图进行命名~

命名视图路由

// html 代码
<div id="app">
<div>
<router-link to="/">首页</router-link> </div>
<div>
<router-view name="content" class="content-view"></router-view>
<router-view name="footer" class="footer-view"></router-view>
</div> </div>
// js 中的主要代码
var routes = [
{
path: "/",
components: {
content: {
template: `<div><h1>首页</h1></div>`,
},
footer: {
template: `<div><h1>关于我们</h1></div>`,
}
}
},
]

错误路由的重定向

let routes = [
{
path: "**",
redirect: "/"
}
]

$route以及$router的区别~~

  -- $route为当前router调转对象,里面可以获取name, path, query, params等~

  -- $router为VueRouter实例,有$router.push方法等~~

路由的钩子

路由的生命周期就是从一个路由跳转到另一路由整个过程,下面介绍两个钩子~

router.beforeEach()   router.afterEach()  详情请看代码

路由钩子

// html 代码
<div id="app">
<router-link to="/">首页</router-link>
<router-link to="/login">登录</router-link>
<router-link to="/user">用户管理</router-link>
<div>
<router-view></router-view>
</div>
</div>
// js 代码
var routes = [
{
path: "/",
component: {
template: "<h1>首页</h1>"
}
},
{
path: "/login",
component: {
template: "<h1>登录</h1>"
}
},
{
path: "/user",
component: {
template: "<h1>用户管理</h1>"
}
}
];
var router = new VueRouter({
routes: routes
}); router.beforeEach(function (to,from,next) {
// console.log(to)
// console.log(from)
// console.log(next)
// next(false)
if(to.path=="/user"){
next("/login")
}
else {
next();
}
});
router.afterEach(function (to, from) {
console.log(to)
console.log(from)
}); var app = new Vue({
el: '#app',
router: router
});

next参数配置

next:function  一定要调用这个方法来resolve这个钩子函数。
执行效果依赖next方法的调用参数
next() 什么都不做继续执行到调转的路由
next(false) 中断当前导航 没有跳转 也没有反应
next("/") 参数是路径 调转到该路径
next(error) 如果next参数是一个Error实例 导航终止该错误
会传递给router.onError()注册过的回调中

如果/user下面还有子路由的情况下会怎么样呢~????

// 匹配子路由 改一下匹配方法就可以~
// js 改动代码
router.beforeEach(function (to,from,next) {
// console.log(to)
// console.log(from)
// console.log(next)
// next(false)
if(to.matched.some(function (item) {
return item.path == "/post"
})){
next("/login")
}
else {
next();
}
});
// 元数据配置 改动代码
// html 部分
{
path: "/user",
meta: {
required_login: true,
},
component: {
template: `
<div>
<h1>用户管理</h1>
<router-link to="vip" append>vip</router-link>
<router-view></router-view>
</div>
`
},
children: [{
path: "vip",
meta: {
required_login: true,
},
component: {
template: '<h1>VIP</h1>'
}
}]
}
// js 部分
router.beforeEach(function (to,from,next) {
// console.log(to)
// console.log(from)
// console.log(next)
// next(false)
if(to.meta.required_login){
next("/login")
}
else {
next();
}
});

Vue.js之路由系统的更多相关文章

  1. vue.js之路由

    Vue.js本身只提供数据与视图绑定及组件化等功能,如果想用它来开发一个完整的SPA(单页面应用),我们就还需要使用一些Vue.js的插件.今天我学习一种叫做Vue-router的插件,用来提供路由管 ...

  2. Vue.js之组件系统

    vue.js既然是框架,那就不能只是简单的完成数据模板引擎的任务,它还提供了页面布局的功能.本文详细介绍使用vue.js进行页面布局的强大工具,vue.js组件系统. Vue.js组件系统 每一个新技 ...

  3. Vue.js:路由

    ylbtech-Vue.js:路由 1.返回顶部 1. Vue.js 路由 本章节我们将为大家介绍 Vue.js 路由. Vue.js 路由允许我们通过不同的 URL 访问不同的内容. 通过 Vue. ...

  4. vue.js嵌套路由-------由浅入深

    嵌套路由就是路由里面嵌套他的子路由 子路由关键属性children 每一个子路由里面可以嵌套多个组件 子组件又有路由导航和路由容器 <router-link to="/父路由的地址名字 ...

  5. Vue.js的路由之——vue-router快速入门

    直接先上效果图 这个单页面应用有两个路径:/home和/about,与这两个路径对应的是两个组件Home和About. 整个实现过程 JavaScript 创建组件:创建单页面应用需要渲染的组件 创建 ...

  6. vue学习之六路由系统

    一.vueRouter实现原理 VueRouter的实现原理是根据监控锚点值的改变,从而不断修改组件内容来实现的,我们来试试不使用VueRouter,自己实现路由控制,如下代码: <!DOCTY ...

  7. vue.js 二 路由懒加载

    当项目小的时候,我没考虑要去找这个得解决方案,也幸好现在几乎能迁移的项目都整合在了一个vue的项目里面 才发现编译后的vendor.js变得异常的大,而且几乎在项目每一个页面都需要加载这一个js,项目 ...

  8. SpringBoot+Activiti+bpmn.js+Vue.js+Elementui(OA系统审批流)

    引言:OA系统用到请假.加班.调休.离职,需要使用工作流进行流程审批 一:activiti流程设计器的选择(通过学习activiti工作流过程中,发现一款好的流程设计器将会更好的方便的设计好流程(主要 ...

  9. vue.js关于路由的跳转

    1.路由demo示例 <div id="app"> <h1>Hello App!</h1> <p> <!-- 使用 route ...

随机推荐

  1. WebRTC开发基础(WebRTC入门系列1:getUserMedia)

    什么是WebRTC WebRTC由IETF(Internet Engineering Task Force——互联网工程任务组)和W3C(World Wide Web Consortium——万维网联 ...

  2. Python上下文管理协议:__enter__和__exit__

    上下文管理器(context manager)是Python2.5开始支持的一种语法,用于规定某个对象的使用范围.一旦进入或者离开该使用范围,会有特殊操作被调用 (比如为对象分配或者释放内存).它的语 ...

  3. 弹出AlertDialog的时候报You need to use a Theme.AppCompat theme (or descendant) with this activity错误

    今天遇到一个bug,用百度地图的时候,我对上面的标注设置了点击监听,设置的相应的反应是弹出一个AlertDialog 记录一解决bug的历程 但是Dialog却没有弹出来,一看AS下面,报了这错,起初 ...

  4. ajaxsubmit 上传文件 在IE中返回的内容 提示下载文件

    在ajaxSubmit提交表单的时候,如果表单内有文件上传的话,会判断参数是否配置的iframe为false参数,如果没有,会用创建隐藏iframe方式提交表单,如果设定了iframe为false,则 ...

  5. (转)percona的安装、启动、停止

    原文:https://blog.csdn.net/tanliqing2010/article/details/78758878 socket=/percona/3307/data/mysql.sock ...

  6. 【JAVA】抽象类,抽象方法

    抽象类不能被实例化,有两个特点: 必须继承才有它的用途: 不能描述对象: 抽象方法: 具体实现由子类决定,最终子类必须实现: 没有方法体: 说明: 抽象类不一定包含抽象方法,抽象方法一定是抽象类.

  7. C#基础篇十小练习

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace P03练 ...

  8. spring boot 与 thymeleaf (3): 设置属性、条件、遍历、局部变量、优先级、内联语法

    前面记录了 thymeleaf 基本表达式, 这里继续看一下其他功能. 一. 设置属性值 这里的controller, html框架 还是沿用上一篇的部分. html: <div class=& ...

  9. @Async的使用

    从Spring3.x 开始,加入@Async这个注解,用户异步线程处理,使用起来很方便. 使用配置如下:spring-task.xml <task:executor id="execu ...

  10. MySQL中临时表的基本创建与使用教程(create temporary table )

    当工作在非常大的表上时,你可能偶尔需要运行很多查询获得一个大量数据的小的子集,不是对整个表运行这些查询,而是让MySQL每次找出所需的少数记录,将记录选择到一个临时表可能更快些,然后在这些表运行查询. ...