英文官网:https://vuejs.org/
中文官网:https://cn.vuejs.org/
渐进式 JavaScript 框架
作者: 尤雨溪(一位华裔前 Google 工程师)
作用: 动态构建用户界面
遵循 MVVM 模式
编码简洁, 体积小, 运行效率高, 适合移动/PC 端开发
它本身只关注 UI, 可以轻松引入 vue 插件或其它第三库开发项目
借鉴 angular 的模板和数据绑定技术
借鉴 react 的组件化和虚拟 DOM 技术
vue-cli: vue 脚手架
vue-resource(axios): ajax 请求
vue-router: 路由
vuex: 状态管理
vue-lazyload: 图片懒加载
vue-scroller: 页面滑动相关
mint-ui: 基于 vue 的 UI 组件库(移动端)
element-ui: 基于 vue 的 UI 组件库(PC 端)
01_helloworld.gif
Hello, {{username}}
Vue.js devtools_3.1.2_0.crx
02_模板语法.gif
动态的 html 页面
包含了一些 JS 语法代码
a. 双大括号表达式
b. 指令(以 v-开头的自定义标签属性)
语法: {{exp}}
功能: 向页面输出数据
可以调用对象的方法
功能: 指定变化的属性值
完整写法: v-bind:xxx=‘yyy’ //yyy 会作为表达式解析执行
简洁写法: :xxx=‘yyy’
功能: 绑定指定事件名的回调函数
完整写法:
v-on:keyup='xxx'
v-on:keyup='xxx(参数)'
v-on:keyup.enter='xxx'
@keyup='xxx'
@keyup.enter='xxx'
03_计算属性和监视.gif
在 computed 属性对象中定义计算属性的方法
在页面中使用{{方法名}}来显示计算的结果
通过 vm 对象的 $watch() 或 watch 配置来监视指定的属性
当属性变化时, 回调函数自动调用, 在函数内部进行计算
通过 getter/setter 实现对属性数据的显示和监视
计算属性存在缓存, 多次读取只执行一次 getter 计算
姓:
名:
姓名 1(单向):
姓名 2(单向):
姓名 3(双向):
05_条件渲染.gif
v-if 与 v-else
v-show
如果需要频繁切换 v-show 较好
当条件不成立时, v-if 的所有子节点不会解析(项目中使用)
表白成功
表白失败
求婚成功
求婚失败
06_列表渲染.gif 06_列表的过滤和排序.gif
数组: v-for / index
对象: v-for / key
删除 item
替换 item
列表过滤
列表排序
测试: v-for 遍历数组
-
{{index}}--{{p.name}}--{{p.age}}
--
--
测试: v-for 遍历对象
-
{{ key }} : {{ value }}
-
{{index}}--{{p.name}}--{{p.age}}
07_事件处理.gif
v-on:xxx=“fun”
@xxx=“fun”
@xxx=“fun(参数)”
默认事件形参: event
隐含属性对象: $event
.prevent : 阻止事件的默认行为 event.preventDefault()
.stop : 停止事件冒泡 event.stopPropagation()
.keycode : 操作的是某个 keycode 值的键
.keyName : 操作的某个按键名的键(少部分)
08_表单输入绑定.gif
text/textarea
checkbox
radio
select
09_Vue实例_生命周期.gif
beforeCreate()
created()
beforeMount()
mounted()
beforeUpdate()
updated()
beforeDestory()
destoryed()
created()/mounted(): 发送 ajax 请求, 启动定时器等异步任务
beforeDestory(): 做收尾工作, 如: 清除定时器
{{msg}}
10_过渡&动画1.gif
10_过渡&动画2.gif
操作 css 的 trasition 或 animation
vue 会给目标元素添加/移除特定的 class
过渡的相关类名
xxx-enter-active: 指定显示的 transition
xxx-leave-active: 指定隐藏的 transition
xxx-enter/xxx-leave-to: 指定隐藏时的样式
在目标元素外包裹
定义 class 样式
指定过渡样式: transition
指定隐藏时的样式: opacity/其它
hello
hello
Look at me!
功能: 对要显示的数据进行特定格式化后再显示
注意: 并没有改变原本的数据, 可是产生新的对应的数据
Vue.filter(filterName, function(value[,arg1,arg2,…]){
// 进行一定的数据处理
return newValue
})
当前时间为: {{currentTime}}
当前时间 1 为: {{currentTime | dateStr}}
当前时间 2 为: {{currentTime | dateStr('YYYY-MM-DD')}}
当前时间 3 为: {{currentTime | dateStr('HH:mm:ss')}}
12_指令_内置指令.gif
v:text : 更新元素的 textContent
v-html : 更新元素的 innerHTML
v-if : 如果为 true, 当前标签才会输出到页面
v-else: 如果为 false, 当前标签才会输出到页面
v-show : 通过控制 display 样式来控制显示/隐藏
v-for : 遍历数组/对象
v-on : 绑定事件监听, 一般简写为@
v-bind : 强制绑定解析表达式, 可以省略 v-bind
v-model : 双向数据绑定
ref : 指定唯一标识, vue 对象通过$els 属性访问这个元素对象
v-cloak : 防止闪现, 与 css 配合: [v-cloak] { display: none }
Vue.directive(‘my-directive’, function(el, binding){
el.innerHTML = binding.value.toupperCase()
})
directives : {
‘my-directive’ : {
bind (el, binding) {
el.innerHTML = binding.value.toupperCase()
}
}
}
v-my-directive=‘xxx’
atguigu.com
{{url}}
需求: 自定义 2 个指令
功能类型于 v-text, 但转换为全大写
功能类型于 v-text, 但转换为全小写
13_插件.gif
Vue 插件是一个包含 install 方法的对象
通过 install 方法给 Vue 或 Vue 实例添加方法, 定义全局指令等
1) 插件 JS
/**
* 自定义 Vue 插件
*/
(function () {
const MyPlugin = {}
MyPlugin.install = function (Vue, options) {
// 1. 添加全局方法或属性
Vue.myGlobalMethod = function () {
alert('Vue 函数对象方法执行')
} //
2. 添加全局资源
Vue.directive('my-directive', function (el, binding) {
el.innerHTML = "MyPlugin my-directive " + binding.value
})
// 3. 添加实例方法
Vue.prototype.$myMethod = function () {
alert('vue 实例对象方法执行')
}
}
window.MyPlugin = MyPlugin
})()
2) 页面使用插件