利用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 相关文章推荐
三级下拉菜单的js实现代码
May 23 Javascript
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
Aug 14 Javascript
早该知道的7个JavaScript技巧
Mar 27 Javascript
JS+css 图片自动缩放自适应大小
Aug 08 Javascript
JavaScript获取一个范围内日期的方法
Apr 24 Javascript
jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
May 31 Javascript
AngularJS ng-bind-template 指令详解
Jul 30 Javascript
jQuery Ztree行政地区树状展示(点击加载)
Nov 09 Javascript
Vue2.0 实现单选互斥的方法
Apr 13 Javascript
layui 表单标签的校验方法
Sep 04 Javascript
Element Backtop回到顶部的具体使用
Jul 27 Javascript
js实现批量删除功能
Aug 27 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从csv文件读取数据并输出到网页的方法
2015/03/14 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
JavaScript中String和StringBuffer的速度之争
2010/04/01 Javascript
为JavaScript添加重载函数的辅助方法
2010/07/04 Javascript
js对象之JS入门之Array对象操作小结
2011/01/09 Javascript
IE中jquery.form中ajax提交没反应解决方法分享
2012/09/11 Javascript
如何使用jQUery获取选中radio对应的值(一句代码)
2013/06/03 Javascript
基于jquery实现一张图片点击鼠标放大再点缩小
2013/09/29 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
2015/05/28 Javascript
jquery带翻页动画的电子杂志代码分享
2015/08/21 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
2016/06/08 Javascript
CSS3 3D 技术手把手教你玩转
2016/09/02 Javascript
浅谈jQuery中Ajax事件beforesend及各参数含义
2016/12/03 Javascript
微信小程序后台解密用户数据实例详解
2017/06/28 Javascript
vue不通过路由直接获取url中参数的方法示例
2017/08/24 Javascript
配置一个vue3.0项目的完整步骤
2019/04/26 Javascript
axios实现简单文件上传功能
2019/09/25 Javascript
vue实现表格合并功能
2020/12/01 Vue.js
python获取Linux下文件版本信息、公司名和产品名的方法
2014/10/05 Python
python 实现将字典dict、列表list中的中文正常显示方法
2018/07/06 Python
python3 http提交json参数并获取返回值的方法
2018/12/19 Python
TensorFlow实现指数衰减学习率的方法
2020/02/05 Python
Python+Kepler.gl轻松制作酷炫路径动画的实现示例
2020/06/02 Python
Python 高效编程技巧分享
2020/09/10 Python
python 实现控制鼠标键盘
2020/11/27 Python
Europcar德国:全球汽车租赁领域的领导者
2018/08/15 全球购物
马来西亚演唱会订票网站:StubHub马来西亚
2018/10/18 全球购物
Ray-Ban雷朋西班牙官网:全球领先的太阳眼镜品牌
2018/11/28 全球购物
Volcom英国官方商店:美国殿堂级滑板、冲浪、滑雪服装品牌
2019/03/13 全球购物
Ariat官网:美国马靴和服装品牌
2019/12/16 全球购物
新西兰Bookabach:查找全球度假屋
2020/12/03 全球购物
财务主管自我鉴定
2014/01/17 职场文书
2014财务人员自我评价范文
2014/09/21 职场文书
校长新学期寄语2016
2015/12/04 职场文书
MySQL中IO问题的深入分析与优化
2022/04/02 MySQL
vue3.0 数字翻牌组件的使用方法详解
2022/04/20 Vue.js