前端整理——Vue部分
(1)Vue的生命周期
1)创建vue实例,初始化生命周期钩子函数
2)数据检测及方法和计算属性代理。在数据检测和初始化数据之前调用beforeCreated(),这时还获取不到props或者data中的数据;数据、属性、方法初始化之后,调用created(),可以访问之前访问不到的数据,但是组件还没有挂载,$el属性还没有显示,所以看不到组件。
3)判断是否有el属性,如果没有就判断是否调用了$mount方法,如果也没有则停止解析。如果调用了二者之一,就继续解析。
4)获取视图模板。判断是否有template属性,如果没有则将el的视图节点的outerhtml作为模板;如果有则将template视图作为模板。
5)编译模板。生成虚拟DOM,解析指令、组件。
6)将虚拟DOM挂载到真实DOM上。挂载前调用beforemount方法,挂在后调用mounted方法。
7)数据更新导致视图更新。更新前调用beforeUpdate,更新后调用updated。
8)销毁vue实例。销毁前调用beforedestroy,销毁后调用destroyed。
(2)keep-alive的生命周期
如果你需要在组件切换的时候,保存一些组件的状态防止多次渲染,就可以使用 keep-alive 组件包裹需要保存的组件。
对于 keep-alive 组件来说,它拥有两个独有的生命周期钩子函数,分别为 activated 和 deactivated 。用 keep-alive 包裹的组件在切换时不会进行销毁,而是缓存到内存中并执行 deactivated 钩子函数,命中缓存渲染后会执行 actived 钩子函数。
(3)Vue组件通信
1、父子组件通信
父组件通过props传递数据给子组件,子组件通过$emit发送事件传递数据给父组件,这两种方式是最常用的父子通信实现方法。
父子通信方式是单向数据流,父组件通过props传递数据,子组件不能直接修改props,而是必须通过发送事件的方式告知父组件修改数据。
2.非父子组件间的数据传递,兄弟组件传值
对于这种情况可以通过查找父组件中的子组件实现,也就是 this.$parent.$children,在 $children 中可以通过组件 name 查询到需要的组件实例,然后进行通信。
(4)路由
1、路由的钩子函数
1)全局钩子函数:beforeEach、afterEach
router.beforeEach(to, from , next) 全局钩子函数,每次每一个路由改变的时候都得执行一遍。
to:即将要进入的目标路由对象;form:当前导航正要离开的路由;next:Function
next( ):进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是confirmed。
next( false):中断当前的导航。
next( '/' ):跳转到一个不同的地址。
const router = new VueRouter({ ... })
router.beforeEach((to, from, next) => {
// ...
})
router.afterEach全局后置钩子,这些钩子不会接受 next 函数也不会改变导航本身:
router.afterEach((to, from) => {
// ...
})
2)单个路由里面的钩子:beforeEnter、beforeLeave
你可以在路由配置上直接定义 beforeEnter 钩子函数,在进入对应路由时调用对应的beforeEnter
const router = new VueRouter({
routes: [
{
path: '/foo',
component: Foo,
beforeEnter: (to, from, next) => {
// ...
}
}
]
})
3)组件内的钩子函数:beforeRouteEnter 、beforeRouteUpdate 、beforeRouteLeave
const Foo = {
template: `...`,
beforeRouteEnter (to, from, next) {
// 在渲染该组件的对应路由被 confirm 前调用;不!能!获取组件实例 `this`; 因为当守卫执行前,组件实例还没被创建
},
beforeRouteUpdate (to, from, next) {
// 在当前路由改变,但是该组件被复用时调用;举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候;由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。 可以访问组件实例 `this`
},
beforeRouteLeave (to, from, next) {
// 导航离开该组件的对应路由时调用; 可以访问组件实例 `this`
}
}
2、路由跳转的几种方式
1)直接调用$router.push实现路由跳转:
this.$router.push({
path: `/login/${id}`,
})
对应路由配置如下:
{
path: '/login/:id',
name: 'Login',
component: Login
}
在子组件中获取参数值:
this.$route.params.id
2)通过路由属性中的name来确定匹配的路由,通过params来传递参数。
this.$router.push({
name: 'Login',
params: {
id: id
}
})
对应路由配置如下:
{
path: '/login',
name: 'Login',
component: Login
}
在子组件中获取参数值:
this.$route.params.id
3)使用path来匹配路由,然后通过query来传递参数。这种情况下 query传递的参数会显示在url后面?id=?
this.$router.push({
path: '/login',
query: {
id: id
}
})
对应路由配置如下:
{
path: '/login',
name: 'Login',
component: Login
}
在子组件中获取参数值:
this.$route.params.id
(5)组件中data为什么是一个函数
一个组件的 data 选项必须是一个函数,因此每个实例可以维护一份被返回对象的独立的拷贝:
data: function () {
return {
count: 0
}
}
原因:对象为引用类型,当重用组件时,由于数据对象都指向同一个data对象,当在一个组件中修改data时,其他重用的组件中的data会同时被修改;而使用返回对象的函数,由于每次返回的都是一个新对象(Object的实例),引用地址不同,则不会出现这个问题
// 1.对象方式(所有重用的实例中的data均为同一个对象)
var data = {
x: 1
};
var vm1 = {
data: data
};
var vm2 = {
data: data
};
console.log(vm1.data === vm2.data);// true,指向同一个对象
// 2.函数方式(所有重用的实例中的data均为同一个函数)
var func = function () {
return {
x: 1
}
};
var vm3 = {
data: func
};
var vm4 = {
data: func
};
console.log(vm3.data() === vm4.data()); // false,指向不同对象
参考博文:https://blog.csdn.net/qq_33576343/article/details/82793894
(6)v-show 与 v-if 区别
v-show只是在display:none和display:block之间切换。无论初始条件是什么都会被渲染出来,后面只需切换CSS,DOM还是一直保留。
v-if 初始值为false时,组件不会被渲染,直到条件为true,并且切换条件时会触发销毁/挂载组件。
对比来说,v-show在初始时有更高的开销,但是切换开销小,适于频繁切换的场景;v-if初始渲染开销小,切换时开销更高,不适合经常切换的场景。
(7)自定义指令
1、全局注册指令
2、局部注册指令
使用:
3、自定义指令的钩子函数
bind:只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个绑定时执行一次的初始化动作。
inserted:被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于document中)。
update:被绑定于元素所在的模板更新时调用,而无论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新。
componentUpdated:被绑定元素所在模板完成一次更新周期时调用。
unbind:只调用一次,指令与元素解绑时调用。
参考:https://juejin.im/book/5bdc715fe51d454e755f75ef/section/5c024ecbf265da616a476638
前端整理——Vue部分的更多相关文章
- 【前端】Vue.js经典开源项目汇总
Vue.js经典开源项目汇总 原文链接:http://www.cnblogs.com/huyong/p/6517949.html Vue是什么? Vue.js(读音 /vjuː/, 类似于 view) ...
- 0基础菜鸟学前端之Vue.js
简介:0基础前端菜鸟,啃了将近半月前端VUE框架,对前端知识有了初步的了解.下面总结一下这段时间的学习心得. 文章结构 前端基础 Vue.js简介 Vue.js常用指令 Vue.js组件 Vue.js ...
- 前端基于VUE的v-charts的曲线显示
目录 前端基于VUE的v-charts的曲线显示 1. 应用背景 2. 分析数据生产者生成 3. 取出数据消费者 4. 前端显示 4.1 安装V-charts插件 4.2 引入veline曲线插件 4 ...
- 整理Vue.js 面试题
Vue.js 面试题整理 Vue项目结构介绍 build 文件夹:用于存放 webpack 相关配置和脚本. config 文件夹:主要存放配置文件,比如配置开发环境的端口号.开启热加载或开启gz ...
- 前端框架vue.js系列(9):Vue.extend、Vue.component与new Vue
前端框架vue.js系列(9):Vue.extend.Vue.component与new Vue 本文链接:https://blog.csdn.net/zeping891103/article/det ...
- 在基于ABP框架的前端项目Vue&Element项目中采用电子签名的处理
在前面随笔介绍了<在基于ABP框架的前端项目Vue&Element项目中采用电子签章处理文件和打印处理>的处理,有的时候,我们在流程中或者一些文件签署的时候,需要签上自己的大名,一 ...
- (转)2018几大主流的UI/JS框架——前端框架 [Vue.js(目前市场上的主流)]
https://blog.csdn.net/hu_belif/article/details/81258961 2016年开始应该是互联网飞速发展的几年,同时也是Web前端开发非常火爆的一年,Web ...
- 从后端到前端之Vue(三)小结以及一颗真实的大树
上一篇写了一下tab,下面整理一下用过的知识点,本想按照官网的文档,整理一下可以更清晰,结果也许是我的方法不对吧,总之更模糊了. 按照官网文档的顺序整理到了表单输入绑定之前,因为之前大致也就只涉及到这 ...
- 从后端到前端之Vue(六)表单组件
表单组件 做项目的时候会遇到一个比较头疼的问题,一个大表单里面有好多控件,一个一个做设置太麻烦,更头疼的是,需求还总在变化,一会多选.一会单选.一会下拉的,变来变去的烦死宝宝了. 那么怎么解决这个问题 ...
随机推荐
- Java正则表达式API详解
1. Pattern类 public class PatternExample { /** * public static String quote(String s) * 返回指定字符串的字面值模式 ...
- [CocoaPods]Podfile文件
Podfile是一个描述一个或多个Xcode项目的目标依赖项的规范.该文件应该只是命名Podfile.指南中的所有示例都基于CocoaPods 1.0及更高版本. Podfile可以非常简单,这会将A ...
- Ubuntu 16.04 安装 arm-linux-gcc 交叉编译工具
工作需要,最近在编译linux嵌入式内核时,需要安装arm-linux-gcc交叉编译,实际上,安装这个交叉编译器的难度没啥.不过,这里有些问题还是值得我去思考和记录下来的. 这个系统的上的编译器用的 ...
- 机器学习基石笔记:11 Linear Models for Classification
一.二元分类的线性模型 线性分类.线性回归.逻辑回归: 可视化这三个线性模型的代价函数, SQR.SCE的值都是大于等于0/1的. 理论分析上界: 将回归应用于分类: 线性回归后的参数值常用于pla/ ...
- :nth-child(n)选择器
p:nth-child(n) 选择属于父元素的第n个子元素的每个p标签
- IOS 数据存储之 Core Data详解
Core Date是ios3.0后引入的数据持久化解决方案,它是是苹果官方推荐使用的,不需要借助第三方框架.Core Date实际上是对SQLite的封装,提供了更高级的持久化方式.在对数据库操作时, ...
- JavaScript中原型链的那些事
引言 在面向对象的语言中继承是非常重要的概念,许多面向对象语言都支持两种继承方式:接口继承和实现继承.接口继承制只继承方法签名,而实现继承继承实际的方法.在ECMAScript中函数没有签名,所以EC ...
- 安装CDH5 hadoop2.3.0 NodeManager 没有启动
今天在安装hadoop后,启动start-yarn.sh后,nodemanager起不起来,后来查看DN节点的日志,报了以下一个错误: FATAL org.apache.hadoop.yarn.ser ...
- 从零开始学 Web 之 移动Web(八)Less
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- Vue + Element UI 实现权限管理系统 前端篇(十三):页面权限控制
权限控制方案 既然是后台权限管理系统,当然少不了权限控制啦,至于权限控制,前端方面当然就是对页面资源的访问和操作控制啦. 前端资源权限主要又分为两个部分,即导航菜单的查看权限和页面增删改操作按钮的操作 ...