第八十一篇: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这边

主要来看其中的组件调用部分
<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 ...
随机推荐
- make 随笔
# --with--cc-opt flag导致./configure时找不到对应库文件? checking for --with-ld-opt="-Wl,-z,relro -Wl,-z,no ...
- BUUCTF-刷新过的图片
刷新过的图片 刷新在MISC中比较特殊,一般是指F5隐写方式 直接使用工具提取出来,发现生成的是Pk开头的,应该是zip格式 使用16进制确认了是ZIP,将生成的output.txt改为output. ...
- QT与DoNet中单例模式的简单实现
由于使用场景的不同,单例模式的写法也有所区别. 目前接触到的,大多数都是多线程,大量数据处理,还要考虑灵活性,对原有类结构改动最小等因素,所以写法更是多种多样. QT个人较常用的一种写法:(两个文件: ...
- 解开XAML的邪恶面纱
什么是XAML,首先我们看下它的外观 <Window x:Class="Blend_WPF.WindowStyle" xmlns="http://sc ...
- JavaScript中async和await的使用以及队列问题
宏任务和微任务的队列入门知识,可以参考之前的文章: JavaScript的事件循环机制 宏任务和微任务在前端面试中,被经常提及到,包括口头和笔试题 async && await概念 a ...
- ansible管理windows主机
1. 在windows开启winrm winrm service 默认都是未启用的状态,先查看状态:如无返回信息,则是没有启动: winrm enumerate winrm/config/listen ...
- Linux文件的通配符
通配符的作用:匹配文件名 常见的通配符: *:表示任意个字符(不包括隐藏文件) ?:单个任意字符(中文也算一个字符) []:表示匹配一范围或者其中一个 表示匹配范围: [a-z] --- 不但包括了小 ...
- Kafka 延时队列&重试队列
一.延时队列 1. 简介 TimingWheel是kafka时间轮的实现,内部包含了⼀个TimerTaskList数组,每个数组包含了⼀些链表组成的TimerTaskEntry事件,每个TimerTa ...
- 《Stepwise Metric Promotion for Unsupervised Video Person Re-identification》 ICCV 2017
Motivation: 这是ICCV 17年做无监督视频ReID的一篇文章.这篇文章简单来说基于两个Motivation. 在不同地方或者同一地方间隔较长时间得到的tracklet往往包含的人物是不同 ...
- 数论之欧几里德gcd
序:这篇博客我最开始学的时候写的,后来又学了一遍,自我感觉这篇好像有问题,扩展欧几里得建议走这边 首先先说,欧几里德一共有俩,欧几里德和扩展欧几里德,前者非常简单,后者直接变态(因为我太菜) gcd ...