Vue全家桶之Vue基础

Vue全家桶之Vue基础

一、Vue概述

Vue:渐进式JavaScript框架

声明式渲染-组建系统-客户端路由-集中式状态管理-项目构建

二、Vue基本使用

1.传统开发模式

原生JS

jQuery

2.Vue.js之Hello World基本步骤

<div id="app">

    <div>{{msg}}</div>

</div>

new Vue({

    el : '#app',

    data : {

        msg : 'HelloWorld'

    }

})

3.Vue.js之Hello World细节分析

实例参数分析

  el: 元素的挂载位置(值可以是css选择器或者dom元素)

  data:模型数据(值是一个对象)

插值表达式用法

将数据填充到HTML标签中

插值表达式支持基本的计算操作

Vue代码运行原理分析

概述编译过程的概念(Vue语法-原生语法)

三、Vue模板语法

1.模板语法概述

如何理解前端渲染?

把数据填充到HTML标签中。

前端的渲染方式:

原生js拼接字符串

使用前端模板引擎

使用vue特有的模板语法

原生jd拼接字符串:

基本上就是将数据以字符串的方式拼接到HTML标签中。

使用前端模板引擎:

基于art-template的一段代码,与拼接字符串相比,代码明显规范了很多,它拥有自己的一套模板语法规则。

模板语法概览:

插值表达式

指令:

v-text

v-html

v-show

v-if

v-else

v-else-if

v-for

v-on

v-bind

v-model  双向绑定

v-slot

v-pre

v-cloak  解决闪动问题

v-once

事件绑定

属性绑定

样式绑定

分支循环结构

2.指令

什么是指令?-什么是自定义属性、指令的本质就是自定义属性、指令的格式:以v-开始

①v-cloak指令用法

插值表达式存在闪动问题,使用v-cloak指令可以解决

解决原理:先隐藏,替换好值之后再显示最终的值。

示例:

提供样式

[v-cloak] {

    display :none;

}

在表达式所在标签添加v-cloak指令

<div v-cloak> 

      {{msg}}

</div>

②数据绑定-将数据填充到标签

v-text 填充纯文本,无闪动

    <span v-text="msg"></span>

v-html  填充html片段,存在安全问题

    <div v-html="html"></div>

v-pre  填充原始信息,显示原始信息,跳过编译过程

    <span v-pre>{{msg}}</div>

③数据响应式

v-once  只编译一次,显示内容之后不再具有响应式功能,应用场景:如果显示的信息后续不需要修改,可使用v-once,可提高性能。

3.数据双向绑定指令

v-model指令

<input type="text" v-model="uname"/>

限制input  select  textarea  components

MVVM设计思想,model-view-view,model

4.事件绑定

Vue如何处理事件?

v-on指令,简写@

<input type='button' v-on:click='num++' />

<input type='button' @click='num++' />

事件函数的调用方式:

直接绑定函数名

<button v-on:click='say'></button>

调用函数

<button v-on:click='say()'></button>

事件函数参数传递:

普通参数和事件对象

<button v-on:click='say("hi",$event)'></button>

事件修饰符:

.stop阻止冒泡

<a @click.stop="handle">跳转</a>

.prevent阻止默认行为

<a @click.prevent="handle">跳转</a>

按键修饰符:

.enter回车键

<input @keyup.enter='submit'>

.esc退出键

<input @keyup.delete='handle'>

自定义按键修饰符:

全局config.keyCodes对象

Vue.config.keyCodes.f1 = 112

规则:自定义按键修饰符名字是自定义的,但是对应的值必须是按键对应的event.keyCode值。

5.属性绑定

①Vue如何动态处理属性?

v-bind指令用法,简写:

<a v-bind:href='url'>跳转</a>

缩写<a :href='url'>跳转</a>

②v-model的底层实现原理分析

<input v-bind:value="msg" v-on:input="msg=$event.target.value">

6.样式绑定

①class样式处理

对象语法

<div v-bind:class="{ active:isActive}"></div>

数组语法

<div v-bind:class="[activeClass,errorClass]"></div>

②style样式处理

对象语法

<div v-bind:style="{color: activeColor,fontSize:fontSize}"></div>

数组语法

<div v-bind:style="[baseStyles,overridingStyles]"></div>

7.分支循环结构

①分支结构

v-if

v-else

v-else-if

v-show

②v-if 和v-show区别

v-if控制元素是否渲染到页面

v-show控制元素是否显示(已经渲染到了页面)

③循环结构

v-for遍历数组

<li v-for='item in list'>{{item}}</li>

<li v-for='{item,index} in list'>{{item}}+{{index}}</li>

key的作用:帮助Vue区分不同的元素,从而提高性能

<li :key='item.id' v-for='(item,index) in list'>{{item}}+{{index}}</li>

v-for遍历对象

<div v-for='(value,key,index) in object'></div>

v-if和v-for结合使用

<div v-if='value==12' v-for='(value,key,index) in object'></div>

四、基础案例

Tab选项卡

五、Vue常用特性

1.常用特性概览

表单操作

自定义指令

计算属性

侦听器

过滤器

声明周期

2.表单操作

①基于Vue的表单操作

input 单行文本

textarea 多行文本

select 下拉多选

radio 单元框

checkbox 多选框

②表单域修饰符

number : 转化为数值

trim : 去掉开始和结尾的空格

lazy : 将input事件切换为change事件

<input v-model.number="age" type="number">

3.自定义指令

①为何需要自定义指令?

内置指令不满足需求

②自定义指令的语法规则(获取元素焦点)

Vue.directive('focus' {

    inserted : function (el) {

      //获取元素的焦点

      el.focus();

    }

})

③自定义指令用法

<input type="text" v-focus>

④带参数的自定义指令(改变元素背景色)

Vue.directive('color', {

      inserted: function (el,binding) {

      el.style.backgroundColor = binding.value.color;

    }

})

⑤指令的用法

<input type="text" v-color='{color: "orange"}'>

⑥局部指令,只能在本组件中使用,与data同级

directives:{

  focus : {

      inserted: function (el) {

          el.focus()

      }

  }

}

4.计算属性

①为何需要计算属性?

表达式的计算逻辑可能会比较复杂,使用计算属性可以使模板内容更加简洁。

②计算属性的用法:

computed: {

    reversedMessage: function () {

      return this.msg.split('').reverse().join('')

    }

}

③计算属性与方法的区别

计算属性是基于它们的依赖进行缓存的

方法不存在缓存

5.侦听器

①侦听器的应用场景

数据变化时执行异步或开销较大的操作

②侦听器的用法

watch:{

    firstName: function (val) {

      this.fullName = val + this.lastName;

    },

    lastName : function (val) {

      this.fullName = this.firstName + val;

    }

}

案例:验证用户名是否可用

需求:输入框输入姓名,失去焦点时验证是否存在,如果已经存在,提示从新输入,如果不存在,提示可以使用。

分析:

通过v-model实现数据绑定

需要提供提示信息

需要侦听器监听输入信息的变化

需要修改触发的事件

6.过滤器

①过滤器的作用

格式化数据,比如将字符串格式转化为首字母大写,将日期格式转化为指定的格式等。

②自定义过滤器

Vue.filter('过滤器名称',function (value) {

    //过滤器业务逻辑

})

③过滤器的使用

<div>{{msg|upper}}</div>

<div>{{msg|upper|lower}}</div>

<div v-bind:id="id | formatId"></div>

④局部过滤器

filters: {

    capitalize:function () {

}

⑤带参数的过滤器

Vue.filter('format',function (value,arg1) {

    //value就是过滤器传递过来的参数

})

⑥过滤器的作用

<div>{{date | format('yyyy-MM-dd')}}</div>

案例:使用过滤器格式化日期

7.生命周期

①主要阶段

挂载(初始化相关属性)

    beforeCreate

    created

    beforeMount

    mounted

更新(元素或组件的变更操作)

    beforeUpdate

    updated

销毁(销毁相关属性)

  beforeDestroy

  destroyed

②Vue实例的产生过程

beforeCreate 在实例初始化之后,数据观测和事件配置之前被调用。

created 在实例创建完成后被立即调用。

beforeMount在挂载开始之前被调用。

mounted el 被新创建的vm.$el替换,并挂载到实例上去之后会调用该钩子。

beforeUpdate数据更新时调用,发生在虚拟DOM打补丁之前。

updated由于数据更改导致的虚拟DOM重新渲染和打补丁,在这之后会调用该钩子。

beforeDestroy实例销毁之前调用。

destroyed实例销毁后调用。

六、综合案例

图书管理

1.补充知识

①变异方法(修改原有数据)

push()  添加数组至末尾

pop()  删除最后一个元素

shift()  删除第一个元素

unshift()  添加元素至开头

splice()

sort()  排序

reverse()  反转数组

②替换数组(生成新数组)

filter() 

concat()  合并数组

slice()  拷贝数组

③修改响应式数据

Vue.set(vm.items,indexOfitem,newValue)

Vue.$set(vm.items,indexOfitem,newValue)

参数一表示要处理的数组名称

参数二表示要处理的数组索引

参数三表示要处理的数组的值

常用特性应用场景:

过滤器(格式化日期)

自定义指令(获取表单焦点)

计算属性(统计图书数量)

侦听器(验证图书存在性)

生命周期(图书数据处理)

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