利用vue-router实现二级菜单内容转换


Posted in Javascript onNovember 30, 2016

二级菜单导航是一种很普遍的功能,一般网页都会有这个功能。如果是平常的做法就是改变url,跳到相应的页面;还有一种就是frame。
如果用vue的话,可以用vue-router改变<router-view>里面的组件,这样就能做到不刷新页面都能跳到相应“页面”。其实url地址还是变了,但是他没有刷新页面其他位置的内容,只是改变了<router-view>里面的组件,渲染了新的组件。
在线demo:http://runjs.cn/code/9th3cgxo

html

使用 Vue.js 时,我们就已经把组件组合成一个应用了,当你要把 vue-router 加进来,只需要配置组件和路由映射,然后告诉 vue-router 在哪里渲染它们。

<div id="app">
 <div class="leftBox">
 <!-- 使用 router-link 组件来导航. -->
 <!-- 通过传入 `to` 属性指定链接. -->
 <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
 <ul>
 <li><router-link to="/" actived>首页</router-link></li>
 <li><router-link to="/article">文章</router-link></li>
 <li><router-link to="/picture">图片</router-link></li>
 <li><router-link to="/music">音乐</router-link></li>
 </ul>
 </div>
 <div class="rightBox">
 <!-- 路由出口 -->
 <!-- 路由匹配到的组件将渲染在这里 -->
 <router-view></router-view>
 </div>
</div>

js

定义路由。每个路由应该映射一个组件。 其中”component” 可以是组件等。 创建和挂载根实例。记得要通过 router 配置参数注入路由,从而让整个应用都有路由功能

var Home = {template: '<div>home</div>'}

var router = new VueRouter({
 routes: [
 {path: '/', component: Home},
 {path: '/picture', component: Picture},
 {path: '/music', component: Music},
 {path: '/article', component: Artlist},
 {path: '/article/:id', component: Article}
 ]
})
new Vue({
 el: "#app",
 router: router
})

切换到了文章部分时,我又弄了个文章列表,点击文章标题才进入文章内容。

  • 这里我写死了数据,实际可以通过ajax拿到数据赋值。
  • 我模拟了loading…,根据数据驱动的思维,通过v-if="loading"来判断这个loading是否出现。
  • 动画切换记得要指定不同的key,不然是没有效果的。
  • 创建和改变路由的时候,都要通过传递url的参数去一个方法拿到数据,这里就要createdwatch '$route'
  • 拿url参数是通过$route.params或$route.query等,具体看教程
  • 返回上一级是用router.go(-1),相当于按退回按钮
var Article = {
 template: '<div class="post">\
 <div class="loading" v-if="loading">loading.....</div>\
 <transition name="slide">\
 <div v-if="post" class="content" :key="post.id">\
 <button @click="back">返回</button>\
 <p>{{post.title}}</p>\
 <P>{{post.body}}</P>\
 </div>\
 </transition>\
 </div>',
 data: function() {
 return {
 loading: false,
 error: null,
 post: null
 }
 },
 created:function() {
 this.fetchData();
 },
 watch: {
 '$route': 'fetchData'
 },
 methods: {
 fetchData:function () {
 this.error = this.post = null;
 this.loading = true;
 getPost(this.$route.params.id,(err,post) => {
 this.loading = false;
 if(err) {
 this.error = err.toString();
 }else {
 this.post = post
 }
 })
 },
 back: function() {
 router.go(-1);
 }
 }
}

本文已被整理到了《Vue.js前端组件学习教程》,欢迎大家学习阅读。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 极速 隐藏/显示万行表格列只需 60毫秒
Mar 28 Javascript
JavaScript 浮点数运算 精度问题
Oct 06 Javascript
Prototype源码浅析 String部分(四)之补充
Jan 16 Javascript
javascript针对DOM的应用分析(三)
Apr 15 Javascript
setTimeout()与setInterval()方法区别介绍
Dec 24 Javascript
javascript常用的正则表达式实例
May 15 Javascript
一个jquery实现的不错的多行文字图片滚动效果
Sep 28 Javascript
JavaScript 程序错误Cannot use 'in' operator to search的解决方法
Jul 10 Javascript
vue axios用法教程详解
Jul 23 Javascript
详解基于Wepy开发小程序插件(推荐)
Aug 01 Javascript
vue中监听返回键问题
Aug 28 Javascript
微信小程序APP页面的之间的相互传递参数以及自定义组件
Apr 19 Javascript
JavaScript如何实现图片懒加载(lazyload) 提高用户体验(增强版)
Nov 30 #Javascript
微信小程序 欢迎界面开发的实例详解
Nov 30 #Javascript
微信小程序 简单DEMO布局,逻辑,样式的练习
Nov 30 #Javascript
微信小程序之小豆瓣图书实例
Nov 30 #Javascript
微信小程序之ES6与事项助手的功能实现
Nov 30 #Javascript
关于Vue.js 2.0的Vuex 2.0 你需要更新的知识库
Nov 30 #Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
Nov 30 #Javascript
You might like
PHP 一个随机字符串生成代码
2010/05/26 PHP
让你成为更出色的PHP开发者的10个技巧
2011/02/25 PHP
PHP实现的简单mock json脚本分享
2015/02/10 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
2015/07/15 PHP
php实现curl模拟ftp上传的方法
2015/07/29 PHP
js 处理URL实用技巧
2010/11/23 Javascript
js怎么覆盖原有方法实现重写
2014/09/04 Javascript
jquery+javascript编写国籍控件
2015/02/12 Javascript
JavaScript的Backbone.js框架的一些使用建议整理
2016/02/14 Javascript
JS全局变量和局部变量最新解析
2016/06/24 Javascript
jQuery表单事件实例代码分享
2016/08/18 Javascript
Javascript6中字符串的四个新用法分享
2016/09/11 Javascript
javascript阻止事件冒泡和浏览器的默认行为
2017/01/21 Javascript
关于foreach循环中遇到的问题小结
2017/05/08 Javascript
js浏览器滚动条卷去的高度scrolltop(实例讲解)
2017/07/07 Javascript
js+canvas绘制图形验证码
2020/09/21 Javascript
python 排列组合之itertools
2013/03/20 Python
Python 高级专用类方法的实例详解
2017/09/11 Python
基于Python和Scikit-Learn的机器学习探索
2017/10/16 Python
VSCode下好用的Python插件及配置
2018/04/06 Python
python实现梯度下降法
2020/03/24 Python
python中remove函数的踩坑记录
2021/01/04 Python
番木瓜健康和保健产品第一大制造商:Herbal Papaya
2017/04/25 全球购物
澳大利亚家具和家居用品购物网站:Zanui
2018/12/29 全球购物
茱莉蔻美国官网:Jurlique美国
2020/11/24 全球购物
铭万公司.net面试题笔试题
2014/07/20 面试题
学生打架检讨书1000字
2014/01/16 职场文书
研究生毕业鉴定
2014/01/29 职场文书
社区平安建设方案
2014/05/25 职场文书
出国签证在职证明
2014/09/20 职场文书
简单的个人租房协议书范本
2014/11/26 职场文书
给女朋友道歉的话大全
2015/01/20 职场文书
在校证明模板
2015/06/17 职场文书
校园开放日新闻稿
2015/07/17 职场文书
法院执行局工作总结
2015/08/11 职场文书
《有余数的除法》教学反思
2016/02/22 职场文书