vue.js渐进式教程(进阶篇)

由于公司最近持续开展学习会,让开发人员能够学到更多的知识和技能,所以本人写了一篇关于vue.js的教程,虽然网上的教程很多,但本篇教程是本人的个人学习和经验总结,只针对于正在学习中的小伙伴们,主要是面试经常会被问到,以及开发中常用知识点和技能的一些整理,希望正在学习阶段的小伙伴能够少走弯路,能够更明确的学到有用的知识和技能:
此教程主要分为三个阶段入门篇,进阶篇和高级篇,将会不定期发布每一篇内容,当然,后期也会持续更新一些其它方面的学习知识,有问题和需要扩充的地方欢迎大家提出。
一、vue.js入门篇
1.1 vue.js的介绍
1.2 vue.js的环境安装
1.3 vue.js的目录结构
1.4 vue.js的模板语法和指令
1.5 vue.js的生命周期
1.6 vue.js的路由
二、vue.js进阶篇
2.1 vue.js的自定义指令和过滤器
2.2 vue.js的计算属性、侦听器和mixins混入
2.3 vue.js的过渡动画
2.4 vue.js的props和父子组件之间的通信
2.5 vue.js异步更新的策略以及nextTick的用途和原理
2.6 vue.js中使用axios
三、vue.js高级篇
3.1 vue.js组件化
3.2 vuex状态管理模式
3.3 路由守卫
3.4 拓展
接下来我们就进入vue.js进阶篇的学习:

2.1 vue.js的自定义指令和过滤器

一、vue.js的自定义指令(directive)
        vue.js除了默认设置的核心指令(v-model,v-show等)外,也可以注册自定义指令;在vue.js中代码复用的主要形式和抽象是组件,然而在有的情况下要对纯DOM元素进行底层操作,这个时候就需要用到自定义指令了。指令函数可接受所有合法的 JavaScript 表达式。
        ①全局指令:// 注册一个全局自定义指令 v-focus
    Vue.directive('focus', {
        inserted: function (el) {
               el.focus()
        }
    })
        ②局部指令:// 注册一个局部的自定义指令 v-focus
    directives: {
           focus: {
                      inserted: function (el) {
                el.focus()
             }
                  }
                }
二、vue.js的过滤器(filter)
       vue.js 允许自定义过滤器,可被用于一些常见的文本格式化。过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持)。过滤器应该被添加在 JavaScript 表达式的尾部,由管道符 | 指示。
       Vue.filter('dateFormat', function (dateStr) {
       })           

2.2 vue.js的计算属性、侦听器和mixins混入

一、vue.js的计算属性(computed):计算属性一般用在处理比较复杂的逻辑

    1.支持缓存,只有依赖数据发生改变,才会重新进行计算;

    2.不支持异步,当 computed 内有异步操作时无效,无法监听数据的变化;

    3.computed 属性值会默认走缓存,计算属性是基于它们的响应式依赖进行缓存的。也就是基于 data 中声明过或者
    父组件传递的 props 中的数据通过计算得到的值;

    4.如果一个属性是由其他属性计算而来的,这个属性依赖其他属性 是一个多对一或者一对一,一般用computed;

    5.如果 computed 属性值是函数,那么默认会走 get 方法,函数的返回值就是属性的属性值;在computed中的,
    属性都默认有一个get,set方法可以自己定义,当数据变化时,调用 set 方法;

二、vue.js的监听器(watch):
    1.不支持缓存,数据变化,直接会触发相应的操作;

    2.watch 支持异步操作;

    3.监听的函数接收两个参数,第一个参数是最新的值;第二个参数是输入之前的值;

    4.当一个属性发生变化时,需要执行对应的操作,一对多;

    5.监听数据必须是 data 中声明过或者父组件传递过来的 props 中的数据。
    注:当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的,这是和 computed 最大的区别。

    在 computed 和 watch 方面,一个是计算,一个是观察,在语义上是有区别的。计算是通过变量计算来得出数据,而观察  是观察一个特定的值,根据被观察者的变动进行相应的变化,在特定的场景下不能相互混用,所以还是需要注意 api 运 用的合理性和语义性

 三、vue.js的mixins混入:
    混入 (mixins) 是一种分发 Vue 组件中可复用功能的非常灵活的方式。混入对象可以包含任意组件选项。当组件
    使用混入对象时,所有混入对象的选项将被混入该组件本身的选项。
    我们一般在什么时候使用mixins呢?在页面的风格不用,但是执行的方法和需要的数据类似时。
    一般组件引用:父组件+子组件 === 父组件+子组件
    mixins:父组件+子组件 === new父组件
    有点像注册了一个 vue 的公共方法,可以绑定在多个组件或者多个Vue对象实例中使用

2.3vue.js的过渡动画

Vue 在插入、更新或者移除 DOM 时,提供多种不同方式过渡效果。Vue 提供了内置的过渡封装组件,该组件用于
包裹要实现过渡效果的组件。所有动画的具体实现主要是通过组件 <transition> 和 <transition-group> 来实现的。
<transition> 针对单个元素进行动画渲染(多个元素需要使用一个父元素包裹);
<transition-group> 针对列表元素进行动画渲染。
vue.js中触发动画的条件主要有4个:
①条件渲染(使用v-if);②条件展示(使用v-show);③动态组件;④组件跟节点

在进入/离开的过渡中,会有 6 个 class 切换。

1.v-enter:定义进入过渡的开始状态。在元素被插入之前生效,在元素被插入之后的下一帧移除。

2.v-enter-active:定义进入过渡生效时的状态。在整个进入过渡的阶段中应用,在元素被插入之前生效,并在过渡/动画完成之后
移除。这个类可以被用来定义进入过渡的过程时间,延迟和曲线函数。

3.v-enter-to:2.1.8 版及以上定义进入过渡的结束状态。在元素被插入之后下一帧生效 (与此同时 v-enter 被移除),
在过渡/动画完成之后移除。

4.v-leave:定义离开过渡的开始状态。在离开过渡被触发时立刻生效,下一帧被移除。

5.v-leave-active:定义离开过渡生效时的状态。在整个离开过渡的阶段中应用,在离开过渡被触发时立刻生效,在过渡/动画完成
之后移除。这个类可以被用来定义离开过渡的过程时间,延迟和曲线函数。

6.v-leave-to:2.1.8 版及以上定义离开过渡的结束状态。在离开过渡被触发之后下一帧生效 (与此同时 v-leave 被删除),在过渡/动画
完成之后移除。                                                                                     
 vue第三方css动画库(Animate.css):https://animate.style/
vue第三方js动画库(animejs) :https://animejs.com/

2.4 vue.js的props和父子组件之间的通信

 一、vue.js中的props
      vue的props属性一般用于父组件向子组件传递值,是一个高频使用的特性。
       props的使用需要父子组件的配合,在父组件中使用v-bind绑定要传递的值,在子组件中的props属性中
      声明接受属性的类型和默认值。
      父组件传递:<TestChildren :isColor="isColor"></TestChildren>
      子组件props接收:props:{isColor:String}

      二、父子组件之间的通信:
    父传子:props
    父组件监听子组件的值:$emit(子传父)
    子传父:.sync是 $emit的一种简写语法,俗称语法糖。
    子组件获取父组件的值:$attrs
    子组件获取父组件的事件:$listeners
    组件间数据共享:EventBus
    $parent和$children可以获取到父组件或子组件的dom,一般不推荐

2.5 vue.js异步更新的策略以及nextTick的用途和原理

Vue异步执行DOM更新。只要观察到数据变化,Vue将开启一个队列,并缓冲在同一事件循环中发生的所有数据改变。
    如果同一个watcher被多次触发,只会被推入到队列中一次。这种在缓冲时去除重复数据对于避免不必要的计算和
    DOM操作上非常重要。然后,在下一个的事件循环“tick”中,Vue刷新队列并执行实际 (已去重的) 工作。

    nextTick:主要用来异步操作,在下次 DOM 更新循环结束之后执行延迟回调,异步更新内部是最重要的就是nextTick
    方法,它负责将异步任务加入队列和执行异步任务。vue也将它暴露出来提供给用户使用。在数据修改完成后,立即获
    取相关DOM还没那么快更新,使用nextTick便可以解决这一问题。
    nextTick(()=>{})

2.6 vue.js中使用axios

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。
    安装:npm install axios;
    引入:import axios from "axios";
    axios的特点:
    ①支持浏览器和node.js
    ②支持promise
    ③能拦截请求和响应
    ④能转换请求和响应数据
    ⑤能取消请求
    ⑥自动转换JSON数据
    ⑦浏览器端支持防止CSRF(跨站请求伪造)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,717评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,501评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,311评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,417评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,500评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,538评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,557评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,310评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,759评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,065评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,233评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,909评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,548评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,172评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,420评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,103评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,098评论 2 352

推荐阅读更多精彩内容

  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,561评论 0 11
  • 彩排完,天已黑
    刘凯书法阅读 4,205评论 1 3
  • 没事就多看看书,因为腹有诗书气自华,读书万卷始通神。没事就多出去旅游,别因为没钱而找借口,因为只要你省吃俭用,来...
    向阳之心阅读 4,778评论 3 11
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 124,731评论 2 7