6、分支循环结构
(1)分支结构
v-if
v-else
v-else-if
v-show
# v-if 和 v-show的区别
使用场景:
(1) 涉及到频繁切换 使用v-show
(2) 如果这个元素可能永远不显示出来 使用v-if
(2)循环结构
1、v-for遍历数组
{{item}} + '------' +{{index}}
# key的作用,帮助Vue区分不同元素,提高性能
原则上遍历的时候都要加上key
2、v-for遍历对象
3、v-if和v-for结合使用
{{index}}={{key}}:{{val}}
# Vue常用特性
1、表单操作 用户交互
(1)见10.表单操作
(2)表单域修饰符
number:转化为数值
trim:去掉首尾空格
lazy:将input事件切换为change事件
2、自定义指令
Vue.directive('focus',{
inserted:function(el){
// el表示指令所绑定的元素
el.focus();
}
})
3、计算属性
让模板中复杂的计算更加简单
基于data计算,data中的数据发生变化,计算属性也会变化
computed:{
reverseMessage:function(){
return this.msg.split('').reverse().join('');
}
}
计算属性和方法的区别:
计算属性是基于他们的依赖(data中的数据)进行缓存的,方法不会缓存,计算一次过后就不会再计算了,
而方法函数每调用一次就会执行一次,计算属性更节省性能
4、过滤器
格式化数据,比如将字符串格式为首字母大写,日期的格式化等
Vue.filter('upper',function(val){
return val.charAt(0).toUpperCase()+val.slice(1);
})
使用场景:数据绑定,属性绑定
{{msg | upper | lower}}
测试
*过滤器也支持同时使用多个,级联
*带参数的过滤器
5、监听器
应用场景:数据变化时执行异步或开销较大的操作
计算属性可以防止监听属性的滥用,但一些异步请求,计算属性做不到,还得watch来完成。
watch:{
firstName:fuction(val){
this.fullName = val + this.lastName
}
}
6、生命周期
从Vue实例创建、运行、到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期
(1)挂载(初始化相关属性)
1、beforeCreate
在实例初始化之后,数据观测和事件配置之前被调用
2、created
在实例创建完成后被立即调用
3、beforeMount
在挂载开始之前被调用
4、mounted
el被新创建的vm.$el替换,并挂载到实例上去之后调用该钩子
(2)更新(元素或组件的变更操作)
5、beforeUpdate
数据更新时调用,发生在虚拟DOM打补丁之前
6、updated
由于数据更改导致的虚拟DOM重新渲染和打补丁,在这之后会调用该钩子
(3)销毁(销毁相关属性)
7、beforeDestory
实例销毁前调用
8、destoryed
实例销毁后调用
实例销毁后调用。该钩子被调用后,对应 Vue 实例的所有指令都被解绑,所有的事件监听器被移除,所有的子实例也都被销毁。
# 修改响应式数据(数组和对象)
Vue.set(vm.items,indexOfitem,newValue)
vm.$set(vm.items,indexOfitem,newValue)
参数一 要处理的数组名称
参数二 索引
参数三 要修改的值
既可以处理数组索引,也可以处理对象属性
## 常用特性应用场景
1、过滤器 ---- 格式化日期
2、自定义指令 ---- 获取表单焦点
3、计算属性 ---- 统计数量
4、侦听器 ---- 验证,监听一些一步的处理
5、生命周期 ---- 数据处理,比如从后台获取数据填充到模板中
### Vue组件化开发
# 组件化规范 Web Components
创建封装好功能的定制元素 Vue部分实现了上述规范
## 注册组件
Vue实例对象本身也是个组件
# 全局注册
Vue.component('组件名称',{
data:function(){
return{
}
},
template:组件模板内容
})
注意事项:1、data必须是一个函数
2、组件模板内容必须是单个根元素
3、组件模板内容可以是模板字符串
4、组件的命名方式:
(1)短横线
(2)驼峰式
如果使用驼峰式命名组件,使用的时候只能在字符串模板中使用驼峰式来使用,普通
标签模板必须使用短横线!
# 局部组件注册
new Vue({
components:{
'component-a':ComponentA,
'component-b':ComponentB
}
})
局部组件只能在注册它的父组件当中使用
## Vue调试工具安装Devtools
1、克隆仓库
2、安装依赖包
3、构建
4、打开Chrome扩展页面
5、选中开发者模式
6、加载已解压的扩展,选择shells/chrome
## 组件间数据交互
# 父组件向组件传值
1、父组件向子组件传值
(1)子组件通过props接收传递过来的值,具体通过属性名来接收
Vue.component('menu-item',{
props:['title'],
template:'
{{ title }}
'
})
注意:1、props属性名规则:在html标签中需要使用短横线,不能使用驼峰
2、props属性值类型:所有类型都可以,但对于布尔和数字,如果不进行v-bind绑定,得到的数据
都是字符串类型的数据
2、父组件通过属性将值传递给子组件,动态绑定或者写死
# 子组件向父组件传值
1、子组件通过自定义事件向父组件传递信息
子组件内部通过`this.$emit('方法名', 要传递的数据)`方式,来调用父组件中的方法,
同时把数据传递给父组件使用
template:'
',
methods:{
sendMsg(){
this.$emit('func', 'OK');
}
}
2、父组件监听子组件事件
# 兄弟组件传值
1、单独的事件中心管理组件间的通信
var eventHub = new Vue()
2、监听事件与销毁事件
eventHub.$on('add-todo',addTodo)
eventHub.$off('add-todo)
3、触发事件
eventHub.$emit('add-todo',id)
## 组件插槽
1、插槽位置
template:`
`
2、插槽内容
插槽内容
# 具名插槽
可以定义多个插槽,同时可以给插槽命名
具名插槽
# 作用域插槽
应用场景:父组件对子组件内容进行加工处理
## 基于组件案例
1、根据业务功能进行组件化划分
(1)标题组件(展示文本)
(2)列表组件(列表展示、商品数量变更、商品删除)
(3)结算组件(计算商品总额)
2、功能实现步骤:
·实现整体布局和样式效果
·划分独立的功能组件
·组合所有的子组件形成整体结构
·逐个实现各个组件功能:标题、列表、结算组件
### 前后端交互
## 前后端交互模式
# 接口调用方式
1、原生ajax
2、基于jquery的ajax
3、fetch
4、axios
# URL地址格式
1、传统形式URL schema://host:port/path?query#fragment
schema:协议
host:域名
port:端口
path:路径
query:查询参数
fragment:锚点(哈希),定位页面中某个位置
2、Restful形式的URL
①GET 查询
②POST 添加
③PUT 修改
④DELETE 删除
例:http://www.xxxx/books/123
/123传参 与请求方式密切相关
## Promise用法
# 异步调用
1、定时任务
2、Ajax
3、事件函数
为什么要用Promise?
1、多次异步调用的结果顺序不确定
2、异步调用结果存在依赖需要嵌套
# Promise概述
Promise是异步编程的一种解决方案,从语法上讲,Promise是一个对象(函数),从它可以获取异步操作的消息
好处:
1、解决回调地狱(多次嵌套)
2、提供的简结的API,操作更加容易两种情况
# Promise基本用法
1、实例化Promise对象,构造函数中传递函数,该函数用于处理异步任务
2、resolve和reject两个参数用于处理成功和失败,并通过p.then获取处理结果
p.then()成功
p.catch()失败
p.finally()无论成功失败
Promise.all()并发处理多个异步任务,所有任务都执行完成才能得到结果
Promise.race()并发处理多个异步任务,只要有一个任务完成就能得到结果
# then参数中的函数返回值
1、返回Promise实例对象
返回的实例对象会调用下一个then
2、返回普通值
返回的普通值会传递给下一个then,通过then参数中函数的参数接收该值
## fetch用法
# fetch概述
1、基本特性:
*更加简单的数据获取方式
*基于Promise实现
fetch(url).then().then().catch()
fetch('http://localhost/data',{
method:'get'
}).then(function(data){
// text()方法返回一个Promise实例对象,用于获取后台数据
return data.text()
}).then(function(data){
console.log(data)
})
2、fetch请求参数
常用配置选项:method、body请求参数、headers请求头