声明式渲染->组件系统->客户端路由->集中式状态管理->项目构建
原生js
输出
Hello World
jQuery
输出
Hello World
Vue.js之实现Hello World的基本步骤
Vue基本使用步骤
1.需要提供标签用于填充数据
2.引入vue.js库文件
3.可以使用vue的语法做功能了
4.把vue提供的数据填充到标签里面
{{msg}}
3.Vue代码运行原理分析
如何理解前端渲染
把数据填充到HTML标签中
前端渲染的方式
基本上就是将数据以字符串的方式拼接到HTML标签中
缺点:不同开发人员的代码风格差别很大,随着业务的复杂,后期的维护变得逐渐困难起来
与字符串拼接相比,代码明显规范了很多,它拥有自己的一套模板语法规则
优点:大家都遵循同样的规则写代码,代码可读性明显提高了,方便后期维护
缺点:没有专门提供事件机制
1.什么是指令
2.v-cloak指令用法
{{msg}}
数据绑定指令
输出
HTML
{{msg}}
双向数据绑定
数据的变化导致页面内容的变化,页面内容的变化导致数据的变化
{{info}}
MVVM设计思想
vue处理事件
{{num}}
{{num}}
事件函数的调用方式
{{num}}
{{num}}
事件函数的参数传递
{{num}}
{{num}}
事件修饰符
1.阻止冒泡
{{num}}
2.阻止默认行为
按键修饰符
1.enter键
2.delete键
自定义按键修饰符
规则:自定义按键修饰符名字是自定义的,但是对应的是按键对应event.keyCode值
案例:简单计算器
需求:实现简单的加法计算,分别输入数值a和数值b,点击按钮,结果显示在下面
分析:
1.通过v-model指令实现数值a和数值b的绑定
2.给计算按钮绑定事件,实现计算逻辑
3.将计算结果绑定到对应位置
简单计算器
数值A:
数值B:
计算结果
Vue动态处理属性
v-model的底层实现原理分析
原始版
{{msg}}
升级版
{{msg}}
最终版
{{msg}}
1.class样式处理
测试内容
测试内容
样式绑定相关语法细节
1.对象绑定和数组绑定可以结合使用
测试内容
2.class绑定的值可以简化操作
3.默认的class如何处理?默认的class会保留
2.style样式处理
方法一:
方法二(简化版):
优秀
良好
一般
比较差
v-show
原理:控制元素的样式是否显示
测试v-show
v-if与v-show的区别
v-for遍历数组
语法:
{{item}}
示例:
水果列表
- {{item}}
输出
水果列表
apple
orange
banana
复杂版:
水果列表
-
{{item.ename}}
----
{{item.cname}}
输出:
水果列表
apple ---- 苹果
orange ---- 橘子
banana ---- 香蕉
语法
{{item+'----'+index}}
示例:
水果列表
- {{item+'----'+index}}
输出
水果列表
apple----0
orange----1
banana----2
key的作用:帮助Vue区分不同的元素,从而提高性能
{{item+'----'+index}}
v-for遍历对象
语法:
{{v+'----'+k+'----'+i}}
示例:
{{v+'----'+k+'----'+i}}
输出:
zhangsan----uname----0
12----age----1
male----gender----2
v-if与v-for结合使用
语法:
{{v+'----'+k+'----'+i}}
示例:
{{v+'----'+k+'----'+i}}
输出:
12----age----1
案例:Tab选项卡
效果:
代码:
- {{item.title}}
单选
多选
表单域修饰符
{{msg}}
自定义指令的语法规则(获取元素焦点)
Vue.directive('focus', {
inserted: function (el) {
//el表示指令所绑定的元素
el.focus();
}
})
自定义指令用法
示例:
带参数的自定义指令(改变元素的背景色)
局部指令
为何需要计算属性
表达式的计算逻辑可能会比较复杂,使用计算属性可以使用模板内容更加简洁
原始做法:
{{msg}}
{{msg.split('').reverse().join('')}}
输出
Hello
olleH
计算属性做法:
{{msg}}
{{reverseString}}
输出
Nihao
oahiN
计算属性与方法的区别
{{reverseString}}
{{reverseString}}
{{reverseMessage()}}
{{reverseMessage()}}
浏览器中输出:
oahiN
oahiN
oahiN
oahiN
控制台中输出:
computed
methods
methods
数据一旦发生变化就通知侦听器所绑定方法
应用场景
数据变化时执行异步或开销较大的操作
侦听器做法:
名:
姓:
{{fullName}}
名:
姓:
{{fullName}}
输出:
侦听器案例:验证用户名是否可用
需求:
输入框中输入姓名,失去焦点时验证是否存在,如果已经存在,提示重新输入,如果不存在,提示可以使用
需求分析:
1.通过v-model实现数据绑定
2.需要提供提示信息
3.需要侦听器监听输入信息的变化
4.需要修改触发的事件
用户名:
{{tip}}
过滤器的作用
格式化数据,比如将字符串化为首字母大写,将日期格式化为指定的格式等
自定义过滤器
用法一:
{{msg | upper}}
方法二:
测试数据
局部过滤器
测试数据
带参数的过滤器
{{date | format('yyyy-MM-dd')}}
输出:
2020-3-15
vue实例的产生过程
1.变异方法(修改原有数据)
2.替换数组(生成新的数组)
示例:
- {{item}}
修改响应式数据
Vue.set(vm.items,indexOfItem,newValue)
- {{item}}
vm.$set(vm.items,indexOfItem,newValue)
{{info.name}}
{{info.age}}
{{info.gender}}
效果如下:
1.图书列表
2.添加图书
3.修改图书
4.删除图书
常用特性应用场景
案例代码如下:
输出
点击了2次 点击了4次 点击了6次
组件注册注意事项
1.data必须是一个函数
2.组件模板内容必须是单个根标签
3.组件模板内容可以是模板字符串
4.如果使用驼峰式命名组件,那么在使用组件的时候,只能在字符串模板中用驼峰的方式使用组件,但是在普通的标签模板中,必须使用短横线的方式使用组件
输出
HelloWorld
HelloTom
HelloJerry
1.组件内部通过props接收传递过来的值
2.父组件通过属性将值传递给子组件
{{pmsg}}
输出
父组件中的内容
子组件本身的数据-----来自父组件的值-----undefined
子组件本身的数据-----动态绑定属性-----hello
{{pmsg}}
输出:
父组件中的内容
hello
{{pmsg}}
输出:
父组件中的内容
24
1313
{{pmsg}}
输出
父组件中的内容
boolean
string
{{pmsg}}
输出:
父组件中的内容
apple
orange
banana
{{pmsg}}
输出
父组件中的内容
zhangsan 12
1.子组件通过自定义事件向父组件传递信息
2.父组件监听子组件的事件
{{pmsg}}
子组件向父组件传值–携带参数
{{pmsg}}
1.单独的事件中心管理组件间的通信
2.监听事件与销毁事件
父组件
输出:
父组件
销毁
TOM:3
点击
JERRY:4
点击
组件插槽的作用
有bug发生
有一个警告
输出:
ERROR: 有bug发生
ERROR: 有一个警告
ERROR: 默认内容
用法一:
标题信息
主要内容1
主要内容2
底部信息
输出:
标题信息
主要内容1
主要内容2
底部信息
结构代码:
用法二:
标题信息1
标题信息2
主要内容1
主要内容2
底部信息1
底部信息2
输出:
标题信息1
标题信息2
主要内容1
主要内容2
底部信息1
底部信息2
结构代码:
应用场景:父组件对子组件的内容进行加工处理
{{slotProps.info.name}}
{{slotProps.info.name}}
输出:
1.传统形式的URL
2.Resful形式的URL
promise是异步编程的一种解决方案,从语法上讲,Promise是一个对象,它可以获取异步操作的消息
使用Promise主要有以下好处:
1.实例方法
function foo() {
return new Promise(function (resolve, reject) {
setTimeout(function () {
resolve(123);
// reject('出错了');
}, 100)
})
}
// 方法一
// foo()
// .then(function (data) {
// console.log(data);
// })
// .catch(function (data) {
// console.log(data);
// })
// .finally(function () {
// console.log('finished');
// })
// -----------------------------------
// 方法二
foo()
.then(function(data){
console.log(data);
},function(data){
console.log(data);
})
.finally(function(){
console.log('finished');
})
2.对象方法
axios的基本特性
axios是一个基于Promise用于浏览器和node.js的http客户端
它具有以下特征:
axios.get('http://localhost:3000/data').then(function (ret) {
// data是固定的用法,用于获取后台的实际数据
console.log(ret.data);
})
GET传递参数
put传递参数
DELETE传递参数
响应结果的主要属性