复习
1.选项: 可选
的配置项
(1)数据
- data: 在脚手架项目包里 必须是
函数类型
, 和组件复用有关 -- 用于存储数据 - methods: 存放方法, 通常会关联事件
- computed: 计算属性. 存储在这里的函数 会自动更改为 get 计算属性 -- 特点: 使用时不需要() 就能自动触发
(2)DOM
- el: 一个id选择器, 代表 vue对象管理的元素
2.指令: vue提供的一套元素的属性
(1)v-text: innerText原样显示文本
(2)v-html: innerHTML 解析HTML代码
(3)v-show: 利用css 显示或隐藏
(4)v-if: 利用移除DOM实现隐藏
- v-else
- v-else-if
(5) v-for: 遍历数据生成元素
- v-for="值 in/of 数组"
- v-for="(值, 序号) in/of 数组"
- v-for="值 in/of 数字" 特色:可以遍历数字
key属性
: 为元素添加唯一标识, 当数组发生增删操作时, 直接复用相同唯一标识的元素, 提升效率
(6)v-on: 事件绑定
@事件名="方法名"
: 参数1是 事件参数@事件名="方法名(参数, $event)"
: 自定义传参
(7)v-bind: 属性绑定
:属性名="值"
(8)v-model: 双向数据绑定, 适合表单元素 -- 下拉,单选,多选, 输入框...
- 方向1: 数据绑定给DOM元素
- 方向2: DOM元素发生变化, 会更新数据
(9)v-pre: 原样显示标签内容, 不解析{{}}
(10)v-once: 一次性渲染
3.动态样式: :class="{样式类: true/false}"
真生效, 假不生效
4.项目包的使用
必须
采用 vue项目包提供的服务器 才能运行vue项目- 服务器的启动命令:
npm run serve
- 启动后, 会提示访问的路径, 正常是:
localhost:8080
一、图片资源存储位置与引用
在VUE中,图片需要存储在assets里,assets:资源 -- 图片/CSS/音频/视频...
关于图片:
- 项目中自带webpack模块,会自动对项目进行打包,剔除代码中没有用到的资源,假设assets里放了100个图,代码中就用了10个,打包时会自动只打包10个
- 在img的src中书写图片的路径,会被认为是需要的图片
- 问题点:JS中书写的图片路径,默认会识别为普通的字符串,而不被打包,必须用require方法引入这个图片,才会被识别到
二、购物车案例
步骤
- 制作假数据,用数组items存储
- 制作表格,利用v-for循环把数据显示出来
- 实现按钮 + 和 - 操作
- 合计功能(难):利用计算属性制作一个函数,利用 reduce 合并得到总价格 -- 计算属性:使用时不需要(),会自动触发,不适合事件-> 事件需要通过事件触发 --reduce需要复习JS高级的 数组高阶函数
- 全选操作: -- 给全选按钮添加 change事件来触发; --两种方案读取全选按钮的值:DOM事件参数(作者不推荐)或v-model 双向绑定; --读取值后,遍历每个元素,修改其勾选的值(和全选按钮一样)。
- 单选:给每个单选框绑定事件,然后用every来获取是否每个都勾选了,修改全选的值
此案例用到day_02里的v-for循环元素方法(依次展示属性的对象到HTML)、数据的双向绑定(选中单选框传递布尔值)和给按钮设置动态class(数量的加减)赋予功能,需要关注的点就是computed计算方法reduce(详情在JSCORE day_04)和全选按钮的设置的methods方法,还有单选框的绑定事件。
1.购物车合计计算:
2. 点击全选按钮改变每个数据项的勾选状态:
(1)DOM
首先要知道如何读取本次事件,事件导致勾选框变化成什么了,就需要传递事件参数event,简写e,全选按钮的是否勾选的布尔值在 target里的checked里(可以打印e找一下),所以使用DOM方法的话,就用e.target.checked取出表示勾选状态的(布尔)值,再遍历数据,把每个数据项的勾选状态都跟全选按钮统一。
记得要在标签里面加上change事件( 原理是:先触发点击事件->触发变更change)
(2)VUE
还有另外一种 不用DOM,使用VUE的声明变量, 双向绑定给全选按钮, 通过变量来获取勾选状态,要想获取表单元素的值, 都可以依赖双向绑定实现
标签上添加 v-model 双向传递选择框值
同样的,遍历数据项,统一每个数据项的勾选状态。
3.操作单选框 与全选框也要联动
利用高阶函数every判断,判断有无符合条件的数据(在JSCORE day_03),
完整代码 :
三、自定义指令
系统指令: vue本身提供了一些 v- 开头的属性, 例如 v-if、v-text.. 可以快速操作元素的DOM
自定义指令: 程序员可以根据具体的项目需求, 制作自己的指令
新的配置项: directives,存放自定义属性,所有v- 开头的,都可以在这里书写,有两个参数:
- 参数1: 所在的元素
- 参数2: 具体的值 bindings 绑定的值们
可以只写一个参数 -- 指令所在的元素
高级用法:常出现在面试题中
在自定义指令里面的必须是元素已经显示在页面后的阶段,调用focus方法,只要调用了focus(),就可以使用。
ctrl+i 会提示DOM元素五个周期,bind和inserted是最常见的
四、网络请求
1.原生Ajax:new XMLHttpRequest()
2.jQuery: 采用通过回调函数封装实现的
$.get(请求地址, data=>{})
- 因为是回调函数封装的, 所以有
回调地狱
风险
3.axios: 一款很有名的第三方用 Promise
封装后得到的框架
- 解决了回调地狱风险
- 官方: axios中文网|axios API 中文文档 | axios
- 项目包中默认没有axios, 需要手动安装 :
老师网盘提供的包已经安装过axios
- 自己生成的项目包, 在目录下执行:
npm i axios vue-axios
配置好axios,就可以使用了
1.首先,要引入axios,有两种方式:局部和全局
局部:写在当前页面的script里面:
2.网络请求的数据有两种状态: 初始null 请求完毕后才有值,所以需要在本地准备一个变量, 名字随便. 初始值null。
3. 添加一个方法,用于下载(接收)数据。
4.添加一个按钮,绑定download()方法,用点击事件触发,点击之后马上能在后台拿到数据。
5.需要注意的是,应该添加一个判断:如果数据存在, 再加载相关的DOM -- 懒加载,利用v-if进行判定: 如果data存在, 再加载DOM ,数据不存在之前, 不能用. 用就报错。(必须加)
6.成功获取数据后,利用v-for将数据遍历到HTML展示出来。
不允许 if 和 for 写在一个标签上, 存在性能问题. 不能每次遍历都判断一次
总结一下步骤:
https://api.xin88.top/car/news.json
1. 下载按钮 关联 download 方法
2. 引入axios请求, 发送get请求, 查看后台数据
3. 准备本地数据data, 把响应数据存储本地
4. 展示到页面: 注意先判断data存在, 然后在里面遍历
五、过滤器
配置项:filters
过滤器: 本质是个函数, 可以把{{}}中的值进行转换
格式 {{ 值 | 过滤器 }}
一些例子:
六、防盗链
在index.html里添加这一句(解决B站图片的防盗链)