vue基础学习记录(三)
一、生命周期(钩子函数)
实例生命周期钩子
new Vue ({beforeCreate:function(){alert("组件实例化之前执行的函数");},created:function(){alert("组件实例化完毕,但页面还未显示");},beforeMount:function(){alert("组件挂载前,页面仍未显示,但虚拟Dom已经配置");},mounted:function(){alert("组件挂载后,此方法执行后,页面显示");},beforeUpdate:function(){alert("组件更新前,页面仍未更新,但虚拟Dom已经配置");},updated:function(){alert("组件更新后,此方法执行后,页面显示");},beforeDestory:function(){alert("组件销毁前")},destoryed:function(){alert("组件销毁")} });
生命周期图示
二、路由和Http
实现简单的路由和Http
安装路由模块
$npm install vue-router --save-dev
安装vue-resource模块
$npm install vue-resource--save-dev
例子在线数据 来源于jsonplaceholder
案例源码 提取码:wesw
三、 搭建脚手架
新建更简洁的项目
$ vue init webpack-simple pizza-app
运行项目
$ cd pizza-app // 进入项目目录$ npm install // 安装依赖$ npm run dev // 运行
四、路由小细节
1、router-link加tag属性,改变渲染类型
当tag
等于div
,渲染结果是 li
标签里面包裹着div
<li><router-link tag="div" to="/" class="nav-link">主页</router-link></li>
2、如果没有匹配任何路由,进入到主页
输入路径错误的时候,跳转到主页,起引导作用
{path:'*',redirect:'/'}
3、给路由绑定动态地址
这样写的好处是可以通过逻辑动态更改路由地址
<li><router-link :to="homeLink" class="nav-link">主页</router-link></li><script>export default {data() {return {homeLink:'/'}},}</script>
4、路由name属性及跳转方法
给路由取名字
<template><header><ul class="navbar-nav"><li><router-link :to="{name:'homeLink'}" class="nav-link">主页</router-link></li><li><router-link :to="{name:'menuLink'}" class="nav-link">菜单</router-link></li><li><router-link :to="{name:'adminLink'}" class="nav-link">管理</router-link></li><li><router-link :to="{name:'aboutLink'}" class="nav-link">关于我们</router-link></li></ul><ul class="navbar-nav ml-auto"><li><router-link :to="{name:'loginLink'}" class="nav-link">登录</router-link></li><li><router-link :to="{name:'registerLink'}" class="nav-link">注册</router-link></li></ul></nav> </header></template>
路径上加上name属性和值
const routes = [{path:'/',name:'homeLink',component:Home},{path:'/menu',name:'menuLink',component:Menu},{path:'/admin',name:'adminLink',component:Admin},{path:'/about',name:'aboutLink',component:About},{path:'/login',name:'loginLink',component:Login},{path:'/register',name:'registerLink',component:Register},]
路由跳转的几种方式
跳转到Menu页面
goToMenu(){// 跳转到上一次浏览的页面this.$router.go(-1)// 指定跳转地址this.$router.replace('/menu')// 指定跳转路由的名字下this.$router.replace({name:'menuLink'})// 通过push进行跳转(常用)this.$router.push('/menu')this.$router.push({name:'menuLink'})}
五、二级路由和三极路由
about.vue
<template><div><div class="row mb-5"><div class="col-4"><!-- 导航 --><div class="list-group mb-5"><router-link tag="li" class="nav-link" :to="{name:'historyLink'}"><a class="list-group-item list-group-item-action">历史订单</a></router-link><router-link tag="li" class="nav-link" :to="{name:'contactLink'}"><a class="list-group-item list-group-item-action">联系我们</a></router-link><router-link tag="li" class="nav-link" :to="{name:'orderingGuideLink'}"><a class="list-group-item list-group-item-action">点餐文档</a></router-link><router-link tag="li" class="nav-link" :to="{name:'deliveryLink'}"><a class="list-group-item list-group-item-action">快递信息</a></router-link></div></div><div class="col-8"><!-- 导航所对应的内容 --><router-view></router-view></div></div></div></template>
main.js
import Vue from 'vue'import VueRouter from 'vue-router'import App from './App.vue'import Home from './components/Home'import Menu from './components/Menu'import Admin from './components/Admin'import About from './components/About/About'import Login from './components/Login'import Register from './components/Register'// 二级路由import Contact from './components/about/Contact'import Delivery from './components/about/Delivery'import History from './components/about/History'import OrderingGuide from './components/about/OrderingGuide'// 三级路由import Phone from './components/about/contact/Phone'import PersonName from './components/about/contact/PersonName'Vue.use(VueRouter)const routes = [{path:'/',name:'homeLink',component:Home},{path:'/menu',name:'menuLink',component:Menu},{path:'/admin',name:'adminLink',component:Admin},{path:'/about',name:'aboutLink',redirect:'/about/contact',component:About,children:[ // 给对应的路径加上 children就可以配置二级路由,多级路由原理相同{path:'/about/contact',name:"contactLink",redirect:'/personname',component:Contact,children:[{path:'/phone',name:"phoneNumber",component:Phone},{path:'/personname',name:"personName",component:PersonName}]},{path:'/history',name:"historyLink",component:History},{path:'/delivery',name:"deliveryLink",component:Delivery},{path:'/orderingGuide',name:"orderingGuideLink",component:OrderingGuide},]},{path:'/login',name:'loginLink',component:Login},{path:'/register',name:'registerLink',component:Register},{path:'*',redirect:'/'}]const router = new VueRouter({routes,mode: 'history',})new Vue({el: '#app',router,render: h => h(App)}
给对应的路径加上
children
就可以配置二级路由,多级路由原理相同;给路径加上redirect
可以指定默认显示内容
六、导航守卫(全局守卫)
// 全局守卫router.beforeEach((to,form,next) => {// alert("还没有登录请先登陆!");// next();console.log(to)// 判断 store.gettes.isLogin === falseif(to.path == '/login' || to.path == '/register'){next();}else{alert("还没有登录,请先登陆!");next('/login');}})
功能:登录和注册页面可以正常点击,点击其他页面将跳转到登录页面
效果截图
七、导航守卫(路由独享-组件内守卫)
后置钩子
// 后置钩子router.afterEach((to,from) =>{alert("after each");})
路由独享守卫
直接在路由后面加上beforeEnter
,只会对当前路由有效
{path:'/admin',name:'adminLink',component:Admin,beforeEnter: (to, from, next) => {// 路由独享守卫alert("非登录状态,不能访问此页面!");next(false);// 判断 store.gettes.isLogin === falseif(to.path == '/login' || to.path == '/register'){next();}else{alert("还没有登录,请先登陆!");next('/login');}}},
组件内的守卫
beforeRouteEnter
守卫 不能 访问this
,因为守卫在导航确认前被调用,因此即将登场的新组件还没被创建。
进入路由
data() {return {name: "Henry"};},beforeRouteEnter (to, from, next) {// alert.log("Hello " + this.name); // 这样会报错// next();next(vm =>{alert("Hello " + vm.name) // 通过回调可以拿到name的值})}
退出路由
beforeRouteLeave(to, from, next) {if(confirm("确定离开吗?") == true){next() }else{next(false)}}
八、复用router-view
1、由代码抽离
新建一个文件routes.js
,把所有的路由引入文件代码,和配置都复制过来,在const
前面加上export
routes.js
import Home from './components/Home'import Menu from './components/Menu'import Admin from './components/Admin'import About from './components/About/About'import Login from './components/Login'import Register from './components/Register'// 二级路由import Contact from './components/about/Contact'import Delivery from './components/about/Delivery'import History from './components/about/History'import OrderingGuide from './components/about/OrderingGuide'// 三级路由import Phone from './components/about/contact/Phone'import PersonName from './components/about/contact/PersonName'export const routes = [{path:'/',name:'homeLink',component:Home},{path:'/menu',name:'menuLink',component:Menu},{path:'/admin',name:'adminLink',component:Admin},{path:'/about',name:'aboutLink',redirect:'/about/contact',component:About,children:[{path:'/about/contact',name:"contactLink",redirect:'/personname',component:Contact,children:[{path:'/phone',name:"phoneNumber",component:Phone},{path:'/personname',name:"personName",component:PersonName}]},{path:'/history',name:"historyLink",component:History},{path:'/delivery',name:"deliveryLink",component:Delivery},{path:'/orderingGuide',name:"orderingGuideLink",component:OrderingGuide},]},{path:'/login',name:'loginLink',component:Login},{path:'/register',name:'registerLink',component:Register},{path:'*',redirect:'/'}]
在main.js文件加入这行代码就引入成功了
main.js
import { routes } from './routes'
2、router-view复用
给
router-view
加上name
值就可以实现复用
App.vue
<div class="container"><div class="row"><div class="col-sm-12 col-md-4"><router-view name="orderingGuide"></router-view></div><div class="col-sm-12 col-md-4"><router-view name="delivery"></router-view></div><div class="col-sm-12 col-md-4"><router-view name="history"></router-view></div></div></div>
在主页复用 关于我们 的三个路由
routes.js
{path:'/',name:'homeLink',components:{default:Home,'orderingGuide':OrderingGuide,'delivery':Delivery,'history':History}}
效果截图
九、控制滚动行为
使用前端路由,当切换到新路由时,想要页面滚到顶部,或者是保持原先的滚动位置,就像重新加载页面那样。
vue-router
能做到,而且更好,它让你可以自定义路由切换时页面如何滚动。
scrollBehavior
方法接收 to
和 from
路由对象。第三个参数 savedPosition
当且仅当 popstate
导航 (通过浏览器的 前进/后退 按钮触发) 时才可用。
scrollBehavior (to, from, savedPosition) {return { x: 0, y: 0 } // return 期望滚动到哪个的位置}
对于所有路由导航,简单地让页面滚动到顶部。
返回 savedPosition,在按下 后退/前进 按钮时,就会像浏览器的原生表现那样:
scrollBehavior (to, from, savedPosition) {if (savedPosition) {return savedPosition} else {return { x: 0, y: 0 }}}
页面跳转到新页面后,点击浏览器返回按钮,回到原页面的原位置。
vue基础学习记录(三)相关推荐
- vue基础学习记录(一)
根据B站黑马程序员 VUE教程基础学习 为了毕业设计做准备 Vue基础 工具准备 Vue的基本使用步骤 vue模板语法 `v-cloak`指令用法 数据绑定指令 数据响应式 双向数据绑定 MVVM设计 ...
- HTML基础学习记录
HTML基础学习记录 一.HTML的学习 1.网页的组成 2.HTML是什么 2.HTML特点 3.HTML基本结构 4.HTML标签语法 (1)< html >标签 (2)< he ...
- 【VUE】学习记录一
[VUE]学习记录 学习视频为:尚硅谷Vue2.0+Vue3.0全套教程丨vuejs从入门到精通 1.查询vue知识点: https://v2.cn.vuejs.org/ 2. 下载和引入 2.1 下 ...
- 无线通信零基础学习记录(2)——GSM空中接口物理层的设计
无线通信零基础学习记录(2)--GSM空中接口物理层的设计 本章解释清楚了之前未搞懂的名词,如时隙等,以及各种信道类型,在此一并总结. TDMA空中接口技术 时分多址(TDMA,Time Divisi ...
- 主线剧情01-ARM-IMX6ULL基础学习记录
ARM & i.MX6ULL 基础学习记录 编辑整理 by Staok 本文大部分内容摘自"100ask imx6ull"开发板的配套资料(如<IMX6ULL裸机开发 ...
- Python基础学习笔记三
Python基础学习笔记三 print和import print可以用,分割变量来输出 import copy import copy as co from copy import deepcopy ...
- MySQL学习记录 (三) ----- SQL数据定义语句(DDL)
相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...
- VUE项目学习(三):win10版nginx部署vue项目
VUE项目学习(三):win10版nginx部署vue项目 niginx的安装和启停操作参照博客:https://blog.csdn.net/qq_26666947/article/details/1 ...
- java入门基础学习(三)
文章目录 (一)有返回值的方法 (二)方法重载 习题 (一)有返回值的方法 格式:public static 返回值数据类型 方法名(参数){方法体return 数据;} 注意:1.返回值数据类型非v ...
最新文章
- Linux下安装rabbitmq3.7.8
- python学习笔记:easygui的简单示例
- 【英语天天读】The Two Roads
- 【整理】RPA选择器针对SAP系统的设置
- 以两台Linux主机在docker中实现mysql主主备份以用nginx实现mysql高可用
- 20155226 2016-2017-2 《Java程序设计》第一周学习总结
- 《Orange’s 一个操作系统的实现》3.保护模式3----DOS加载.EXE过程
- 三层交换机工作原理介绍
- QtCreator与catkin命令两种方式开发ROS程序(图示加代码)
- answer的汉语_大概是几乎能满足你们所有要求的两所学校(汉语言文字学、语言学及应用语言学择校攻略)...
- 【CMAKE系列】cmake中CMakeLists.txt脚本的常用语法
- Linux系统管理(5)——使用yum快速搭建LAMP环境【方便快捷版】
- 14.json文件读取
- 检查键是否存在于JavaScript对象中?
- NameError: name “ ” is not defined
- 使用TortoiseSVN将文件回退到某个版本
- Java教程:Java分割字符串(spilt())
- 读书百客:《感遇·江南有丹橘》赏析
- 结婚吉日怎样挑选?好好把握幸福启程
- 【机器学习】LifeLong Learning(终身学习)介绍
热门文章
- 关于 CSS 的英文单词换行 (word-break 和 word-wrap 的区别)
- Excel——快速批量统一边框和字体格式
- 单身女青年请注意,最可能泡到程序员的平台上线了
- java opencv surf_在OpenCV3.1.0中使用SIFT,SURF算法
- 《三体》中罗辑所说的定位行星的位置,是怎样实现的?
- java 画爱心壮那首歌最,抖音貂蝉大招画爱心怎么画 抖音貂蝉大招画爱心的背景音乐是什么...
- 计算FPS的六种方式
- linux进程为什么sleep,求高手,linux系统几乎所有进程处于sleep状态是否正常
- 微信置顶文案怎么制作?
- Axure RP 8的中继器