第八十一篇:Vue购物车(二) 名称,图片,价格的渲染
好家伙,
1,为组件封装属性,
需要封装以下属性:
| 需要定义的属性 | 属性名 | 值的类型 |
|
商品名 |
title | String |
| 商品图片 | pic | String |
| 商品价格 | price | Number |
| 是否勾选 | state | Boolean |
通过props为属性传值
上代码:
Goods.vue组件:
<template>
<div class="goods-container">
<!-- 左侧图片 -->
<div class="thumb">
<div class="custom-control custom-checkbox">
<!-- 复选框 -->
<input type="checkbox" class="custom-control-input" id="cb1" :checked="state" />
<label class="custom-control-label" for="cb1">
<!-- 商品的缩略图 -->
<img :src="pic" alt="" />
<img src="../../assets/1.jpg" alt=""> </label>
</div>
</div>
<!-- 右侧信息区域 -->
<div class="goods-info">
<!-- 商品标题 -->
<h6 class="goods-title">我的名字是:{{ title }}</h6>
<div class="goods-info-bottom">
<!-- 商品价格 -->
<span class="goods-price">{{ price }}¥</span>
<!-- 商品的数量 -->
</div>
</div>
</div>
</template> <script>
export default {
props:{
//商品名字
title:{
default:'',
type:String
},
//商品图片
pic:{
default:'',
type:String
},
//商品价格
price:{
default:0,
type:Number
},
//商品的勾选状态
state:{
default:false,
//是否勾选,所以是布尔值类型
type:Boolean
}
}
}
</script>
这里我们用一个插值表达式{{}}去拿到props中的值并把它渲染出来
来到App.vue这边
App.vue完整代码主要来看其中的组件调用部分
<Goods v-for="item in list"
:key="item.id"
:title="item.goods_name"
:pic="item.goods_img"
:price="item.goods_price"
:state="item.goods_stats"></Goods>
看看效果:

图片那块出了点bug
2.如何修改商品的勾选状态:
这里涉及到父子传值了
1.在子组件中,要监听复选框 状态变化的事件。拿到最新的勾选状态<input type="checkbox"@change="stateChange"/>
只要复选框的勾选状态发生了变化,会自动触发 change事件!
2.当监听到勾选状态变化之后,应该立即把最新的状态,通过自定义事件的形式,发送给父组件。
this.$emit('state-change', { id,value})
其中,id表示当前这件商品的id,value的值是最新的勾选状态
上代码:
App.vue中添加代码
<Goods v-for="item in list"
:key="item.id"
:id="item.id"
:title="item.goods_name"
:pic="item.goods_img"
:price="item.goods_price"
:state="item.goods_stats"
@state-change="getNewState"></Goods>
添加方法自定义方法:
methods:{
//封装请求列表数据的方法
//接受子组件传递过来的数据
//e的格式为{id,value}
getNewState(val){
console.log('父组件成功接受值')
this.list.some(item=>{
item.goods_state=e.value
//终止后续的循环
return true
})
}
},
Good.vue中添加代码
为复选框绑定方法:
<input type="checkbox"
class="custom-control-input"
id="cb1"
:checked="state"
@change="stateChange"/>
@change当input
添加自定义方法:
e.target.checked是勾选框的状态(true或false)
methods:{
stateChange(e){
const newState = e.target.checked
//触发自定义事件
this.$emit('state-change',{id:this.id,value:newState})
}
}
但是依旧有bug,比如点了第三个,第一个的勾选被取消了

我们绑个id来解决这个问题
Goods.vue中
<div class="custom-control custom-checkbox">
<!-- 复选框 -->
<input type="checkbox"
class="custom-control-input" //原先为id="cb"
:id="'cb'+id"
:checked="state"
@change="stateChange"/> //原先为for="cb"
<label class="custom-control-label" :for="'cb'+id">
<!-- 商品的缩略图 -->
<img :src="pic" alt="" />
<img src="../../assets/1.jpg" alt=""> </label>
</div>
搞定!
我得想想图片的bug怎么处理,
第八十一篇:Vue购物车(二) 名称,图片,价格的渲染的更多相关文章
- 第十一篇:vue.js监听属性(大作业进行时)
这个知识点急着用所以就跳过<计算属性>先学了 首先理解一下什么是监听:对事件进行监控,也就是当我进行操作(按了按钮之类的事件)时,会有相应的事情发生 上代码 <div id = &q ...
- Python学习二十八周(vue.js)
一.指令 1.一个例子简单实用vue: 下载vue.js(这里实用1.0.21版本) 编写html代码: <!DOCTYPE html> <html lang="en&qu ...
- {Python之线程} 一 背景知识 二 线程与进程的关系 三 线程的特点 四 线程的实际应用场景 五 内存中的线程 六 用户级线程和内核级线程(了解) 七 python与线程 八 Threading模块 九 锁 十 信号量 十一 事件Event 十二 条件Condition(了解) 十三 定时器
Python之线程 线程 本节目录 一 背景知识 二 线程与进程的关系 三 线程的特点 四 线程的实际应用场景 五 内存中的线程 六 用户级线程和内核级线程(了解) 七 python与线程 八 Thr ...
- 《手把手教你》系列基础篇(八十一)-java+ selenium自动化测试-框架设计基础-TestNG如何暂停执行一些case(详解教程)
1.简介 在实际测试过程中,我们经常会遇到这样的情况,开发由于某些原因导致一些模块进度延后,而你的自动化测试脚本已经提前完成,这样就会有部分模块测试,有部分模块不能进行测试.这就需要我们暂时不让一些t ...
- Spring Cloud第十一篇 | 分布式配置中心高可用
本文是Spring Cloud专栏的第十一篇文章,了解前十篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cl ...
- Python开发【第二十一篇】:Web框架之Django【基础】
Python开发[第二十一篇]:Web框架之Django[基础] 猛击这里:http://www.cnblogs.com/wupeiqi/articles/5237704.html Python之 ...
- BitAdminCore框架应用篇:(二)创建一个简单的增删改查模块
NET Core应用框架之BitAdminCore框架应用篇系列 框架演示:http://bit.bitdao.cn 框架源码:https://github.com/chenyinxin/cookie ...
- day 82 Vue学习二之vue结合项目简单使用、this指向问题
Vue学习二之vue结合项目简单使用.this指向问题 本节目录 一 阶段性项目流程梳理 二 vue切换图片 三 vue中使用ajax 四 vue实现音乐播放器 五 vue的计算属性和监听器 六 ...
- 孤荷凌寒自学python第八十一天学习爬取图片1
孤荷凌寒自学python第八十一天学习爬取图片1 (完整学习过程屏幕记录视频地址在文末) 通过前面十天的学习,我已经基本了解了通过requests模块来与网站服务器进行交互的方法,也知道了Beauti ...
随机推荐
- 【Redis】简单动态字符串SDS
C语言字符串 char *str = "redis"; // 可以不显式的添加\0,由编译器添加 char *str = "redis\0"; // 也可以添加 ...
- 一、shell编程与变量
目录 命令是什么 命令是如何运行的: 基本语法 解释器 注释 如何执行 输入.输出流 重定向 管道符 | 变量 常见Shell变量的类型包括: 变量命名原则 单引号和双引号 反引号 变量作用范围 查看 ...
- 《Java基础——IO流》
Java基础--IO流 一.字节流: 1.输入流 (InputStream) 规则: 此处用于读取txt文件中的内容. 代码: import java.io.*; public c ...
- 『现学现忘』Docker基础 — 41、将本地镜像推送到阿里云
目录 1.准备工作 2.阿里云容器镜像仓库的使用 (1)创建命名空间 (2)创建容器镜像 (3)查看阿里云镜像仓库的信息 3.将本地Docker镜像推送到阿里云 (1)登陆阿里云 (2)给镜像生成版本 ...
- C语言动态输出等腰三角形
C语言动态输出等腰三角形 题目要求:输入行数 打印出对应行数的等腰三角形,要求使用for循环嵌套. 思路 while语句写外层死循环 用于判断输出的数据: 分析: 最外层for,来控制最外层行数,存储 ...
- meet in the middle 复习笔记
前言 若干年前看过现在又忘了.这么简单都忘 所以今天来重新复习一下. 正题 考虑这样的问题: 给定 \(n\) 个物品的价格,你有 \(m\) 块钱,每件物品限买一次,求买东西的方案数. \(n\le ...
- 一文搞懂 Netty 发送数据全流程 | 你想知道的细节全在这里
欢迎关注公众号:bin的技术小屋,如果大家在看文章的时候发现图片加载不了,可以到公众号查看原文 本系列Netty源码解析文章基于 4.1.56.Final版本 在<Netty如何高效接收网络数据 ...
- Python实现哈希表(分离链接法)
一.python实现哈希表 只使用list,构建简单的哈希表(字典对象) # 不使用字典构造的分离连接法版哈希表 class HashList(): """ Simple ...
- 交替方向乘子法(Alternating Direction Multiplier Method,ADMM)
交替方向乘子法(Alternating Direction Multiplier Method,ADMM)是一种求解具有可分结构的凸优化问题的重要方法,其最早由Gabay和Mercier于1967年提 ...
- while循环--和do-while循环
对于循环语句来说他会有一个回上去的箭头,这个回上去的箭头就形成了一个重复做的事情,那种重复做的事情我们就叫做循环 while循环 ~如果我们把while翻译作"当",那么一个whi ...