VUE day_03(7.19)图片资源存储位置与引用、购物车案例、自定义指令、网络请求、过滤器、解决防盗链

复习

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方法引入这个图片,才会被识别到

 二、购物车案例 

步骤

  1. 制作假数据,用数组items存储
  2. 制作表格,利用v-for循环把数据显示出来
  3. 实现按钮 + 和 - 操作
  4. 合计功能(难):利用计算属性制作一个函数,利用 reduce 合并得到总价格          -- 计算属性:使用时不需要(),会自动触发,不适合事件-> 事件需要通过事件触发      --reduce需要复习JS高级的 数组高阶函数
  5. 全选操作: -- 给全选按钮添加 change事件来触发;  --两种方案读取全选按钮的值:DOM事件参数(作者不推荐)或v-model 双向绑定;  --读取值后,遍历每个元素,修改其勾选的值(和全选按钮一样)。
  6. 单选:给每个单选框绑定事件,然后用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站图片的防盗链)

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值