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)

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

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

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

常用特性应用场景:

过滤器(格式化日期)

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

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

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。