Vue第一天
Vue第一天
1. vue初始/创建vue实例对象
让vue工作, 就必须创建一个vue实例 且要传入一个配置对象
box容器的代码依然符合html规范 只是混入了特殊vue语法
box容器里的代码称为: Vue模板
vue实例和容器是一一对应的
- 中要写js表达式 且xxx可自动读取data中所有属性
一旦data中数据改变 页面用到的数据也会自动更新
1 | <div class="box"> |
2. vue的模板/指令语法
Vue模板语法有2大类:
1. 插值语法
- 功能: 用于解析标签体内容
- 写法: 中要写js表达式 且xxx可自动读取data中所有属性
- 多级对象这样写:
2. 指令语法
- 功能: 用于解析标签(包括: 标签属性、内容、绑定事件)
- 举例: <a v-bind:href=”xx” 或简写为 :href=”xx”>
- 且可以直接读取到data中所有属性
- vue中有很多的指令, 且形式都是: v-???
1 | <div class="box"> |
3. vue的单项/双项数据绑定
- Vue有2中数据绑定方式:
- 单选数据绑定(v-bind): 数据只能从data流向页面
- 双选数据绑定(v-model): 数据不仅能从data流向页面, 还可从页面流向data
- 双向绑定一般应用在表单类元素上(input、select…)
- v-model:value 可简写为v-model 因为默认收集的就是value值
1 | <div class="box"> |
4. el和data的两种写法
1. el有两种写法:
- new Vue时候配置el属性
- 先创建vue实例, 再通过vm.$mount(‘#root’)指定el的值
2. data有两种写法: 1. 对象式 2.函数式
- 目前哪种写法都可以, 但组件化必须使用函数式, 否则报错
- 原则: 由Vue管理的函数, 一定不要写箭头函数, 写了this就不是vue实例了
1 | let v = new Vue({ |
5. Vue的MVVM的模型
- M(模型): data中的数据
- V(视图): 模板代码
- VM(视图模型): Vue实例
- data中所有属性, 最后都出现在vm身上
- vm身上所有属性 及vue原型上所有属性, 在vue模板中都可以直接使用
1 | <div class="box"> |
6. Object.defineProperty数据代理方法
- defineProperty(对象名, ‘添加的值’) 可以为对象添加属性值
- 但添加的对象不能被遍历
- 数据代理: 当读取obj的age属性时, get函数会被调用, 且返回值是age的值
- 数据劫持: 当修改obj的age属性时, set函数会被调用, 且会收到修改的具体指
1 | let num = 18 |
7. 理解数据代理
- 数据代理: 通过一个对象代理对另一个对象中属性的操作(读/写)
- 可通过obj1访问和修改obj的属性
1 | let obj = {x: 10} |
8. vue中的数据代理
- Vue中的数据代理: 通过vm对象来代理data对象属性的操作(读/写)
- Vue数据代理的好处: 更加方便的操作data中的数据
- 基本原理:
- 通过Object.defineProperty()把data对象中所有属性添加到vm上
- 为每个添加到vm上的属性, 都指定一个getter/setter方法
- 在getter/setter内部去操作(读/写)data中对应的属性
- vm中的data就是Vue实例对象中的_data属性
1 | <div class="box"> |
9. vue的事件绑定
- 使用v-on:xxx 或 @xxx 绑定事件, 其中xxx是事件名
- 事件的回调需要配置在methods对象中, 最终会在vm上
- methods中配置的函数, 不要用箭头函数, 否则this就不是vm
- methods中配置的函数, 都是被Vue所管理的函数, this指向是vm或组件实例对象
- @click=’show’ 和 @click=’show($event)’ 作用一致, 但后者可以传参
1 | <div class="box"> |
10. vue的事件修饰符
1 | <div class="box"> |
11. vue的键盘事件
- Vue中常用的按键别名: enter、delete、esc、space、tab、up、down、left、right
- Vue未提供别名按键, 可使用按键原始的key值去绑定, 但注意短横线命名(caps-lock)
- CapsLock是个特殊事件, 要写成caps-lock才行
- 系统修饰键(用法特殊): ctrl、alt、shift、meta
- 配合keyup使用: 按下修饰键的同时, 按下其他键, 事件才会触发
- 配合keydown使用: 正常触发事件
- 可定制按键别名: Vue.config.keyCodes.自定义键名 = 键码
- 使用keyCode指定具体按键(不推荐)
1 | <div class="box"> |
12. 姓名案例-插值语法实现
1 | <div class="box"> |
13. 姓名案例-methods属性实现
- data数据发生变化, vue模板会重新解析一遍
- vue模板里如果调用函数了, 函数也会被插值语法调用
1 | <div class="box"> |
14. 姓名案例-计算属性实现
- 定义: 要用的属性不存在, 要通过已有属性计算得来
- 原理: 底层借助Object.defineProperty方法提供getter/setter
- get函数什么时候执行? (1) 初次读取时会执行一次 (2) 当依赖的数据发生改变会被再次调用
- 优势: 与methods实现相比: 内部有缓存机制, 效率更高, 调试方便
- 计算属性最终会出现在vm上, 直接读取使用即可
- 如果计算属性要被修改, 那必须要set函数去响应修改, 且set中要引起计算时依赖的数据发生改变
1 | <div class="box"> |
15. 姓名案例-计算属性简写实现
只有考虑读取, 不考虑修改才能用简写方式
1 | <div class="box"> |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小城故事!
评论