利用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的设计模式
Nov 22 Javascript
jQuery select的操作实现代码
May 06 Javascript
JavaScript 拾碎[三] 使用className属性
Oct 16 Javascript
javascript陷阱 一不小心你就中招了(字符运算)
Nov 10 Javascript
jQuery事件之键盘事件(ctrl+Enter回车键提交表单等)
May 11 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
May 23 Javascript
jQuery幻灯片带缩略图轮播效果代码分享
Aug 17 Javascript
jQuery+css实现炫目的动态块漂移效果
Jan 28 Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
Apr 13 Javascript
JavaScript深入V8引擎以及编写优化代码的5个技巧
Jun 24 Javascript
vue element ui validate 主动触发错误提示操作
Sep 21 Javascript
React如何使用axios请求数据并把数据渲染到组件
Aug 05 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
正义联盟的终局之战《天启星战争》将成为DC动画宇宙的最后一部
2020/04/09 欧美动漫
php之对抗Web扫描器的脚本技巧
2008/10/01 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
2014/06/23 PHP
apache中为php 设置虚拟目录
2014/12/17 PHP
PHP向socket服务器收发数据的方法
2015/01/24 PHP
深入浅析php json 格式控制
2015/12/24 PHP
PHP验证码类ValidateCode解析
2017/01/07 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
2017/09/22 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
2018/03/12 PHP
Avengerls vs KG BO3 第三场2.18
2021/03/10 DOTA
HTML5附件拖拽上传drop &amp; google.gears实现代码
2011/04/28 Javascript
JavaScript之编码规范 推荐
2012/05/23 Javascript
json格式的时间显示为正常年月日的方法
2013/09/08 Javascript
script标签属性用type还是language
2015/01/21 Javascript
网页从弹窗页面单选框传值至父页面代码分享
2015/09/29 Javascript
weUI应用之JS常用信息提示弹层的封装
2016/11/21 Javascript
微信小程序 五星评分(包括半颗星评分)实例代码
2016/12/14 Javascript
js实现hashtable的赋值、取值、遍历操作实例详解
2016/12/25 Javascript
node文件批量重命名的方法示例
2017/10/23 Javascript
vue 多入口文件搭建 vue多页面搭建的实例讲解
2018/03/12 Javascript
ES6之Proxy的get方法详解
2019/10/11 Javascript
TensorFlow如何实现反向传播
2018/02/06 Python
python多线程并发实例及其优化
2019/06/27 Python
python框架flask表单实现详解
2019/11/04 Python
在OpenCV里实现条码区域识别的方法示例
2019/12/04 Python
Python基于Tensor FLow的图像处理操作详解
2020/01/15 Python
Python中用pyinstaller打包时的图标问题及解决方法
2020/02/17 Python
英国时尚家具、家居饰品及礼品商店:Graham & Green
2016/09/15 全球购物
美国儿童珠宝在线零售商:Loveivy
2019/05/22 全球购物
利用异或运算实现两个无符号数的加法运算
2013/12/20 面试题
校园文化建设方案
2014/02/03 职场文书
工伤事故赔偿协议书(标准)
2014/09/29 职场文书
晚自修旷课检讨书怎么写
2014/11/17 职场文书
校本培训个人总结
2015/02/28 职场文书
uniapp开发小程序的经验总结
2021/04/08 Javascript
VS2019连接MySQL数据库的过程及常见问题总结
2021/11/27 MySQL