好家伙,

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购物车(二) 名称,图片,价格的渲染的更多相关文章

  1. 第十一篇:vue.js监听属性(大作业进行时)

    这个知识点急着用所以就跳过<计算属性>先学了 首先理解一下什么是监听:对事件进行监控,也就是当我进行操作(按了按钮之类的事件)时,会有相应的事情发生 上代码 <div id = &q ...

  2. Python学习二十八周(vue.js)

    一.指令 1.一个例子简单实用vue: 下载vue.js(这里实用1.0.21版本) 编写html代码: <!DOCTYPE html> <html lang="en&qu ...

  3. {Python之线程} 一 背景知识 二 线程与进程的关系 三 线程的特点 四 线程的实际应用场景 五 内存中的线程 六 用户级线程和内核级线程(了解) 七 python与线程 八 Threading模块 九 锁 十 信号量 十一 事件Event 十二 条件Condition(了解) 十三 定时器

    Python之线程 线程 本节目录 一 背景知识 二 线程与进程的关系 三 线程的特点 四 线程的实际应用场景 五 内存中的线程 六 用户级线程和内核级线程(了解) 七 python与线程 八 Thr ...

  4. 《手把手教你》系列基础篇(八十一)-java+ selenium自动化测试-框架设计基础-TestNG如何暂停执行一些case(详解教程)

    1.简介 在实际测试过程中,我们经常会遇到这样的情况,开发由于某些原因导致一些模块进度延后,而你的自动化测试脚本已经提前完成,这样就会有部分模块测试,有部分模块不能进行测试.这就需要我们暂时不让一些t ...

  5. Spring Cloud第十一篇 | 分布式配置中心高可用

    ​ 本文是Spring Cloud专栏的第十一篇文章,了解前十篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cl ...

  6. Python开发【第二十一篇】:Web框架之Django【基础】

    Python开发[第二十一篇]:Web框架之Django[基础]   猛击这里:http://www.cnblogs.com/wupeiqi/articles/5237704.html Python之 ...

  7. BitAdminCore框架应用篇:(二)创建一个简单的增删改查模块

    NET Core应用框架之BitAdminCore框架应用篇系列 框架演示:http://bit.bitdao.cn 框架源码:https://github.com/chenyinxin/cookie ...

  8. day 82 Vue学习二之vue结合项目简单使用、this指向问题

    Vue学习二之vue结合项目简单使用.this指向问题   本节目录 一 阶段性项目流程梳理 二 vue切换图片 三 vue中使用ajax 四 vue实现音乐播放器 五 vue的计算属性和监听器 六 ...

  9. 孤荷凌寒自学python第八十一天学习爬取图片1

    孤荷凌寒自学python第八十一天学习爬取图片1 (完整学习过程屏幕记录视频地址在文末) 通过前面十天的学习,我已经基本了解了通过requests模块来与网站服务器进行交互的方法,也知道了Beauti ...

随机推荐

  1. 隐私计算FATE-模型训练

    一.说明 本文分享基于 Fate 自带的测试样例,进行 纵向逻辑回归 算法的模型训练,并且通过 FATE Board 可视化查看结果. 本文的内容为基于 <隐私计算FATE-概念与单机部署指南& ...

  2. RPA应用场景-财务报表统计整合

    场景概述 财务报表统计整合 所涉系统名称 邮储银行系统 人工操作(时间/次) 3小时 所涉人工数量 1 操作频率 每月 场景流程 1.登录各个区支行系统 2.机器人按照要求,自动复选多项业务参数,导出 ...

  3. git 删除、合并多次commit提交记录

    合并多次记录 1. git log找到要合并的记录的数量. 2. git rebase -i HEAD~5 将最上面一个的记录选为pack,下面记录都改为s. ================= 删除 ...

  4. 7.Spark SQL

    1.分析SparkSQL出现的原因,并简述SparkSQL的起源与发展. SparkSQL出现是因为关系数据库已经不能满足各种在大数据时代新增的用户需求.首先,用户需要在不同的结构化和非结构化数据中执 ...

  5. UI自动化测试执行问题总结

    ------------恢复内容开始------------ ![image](https://img2022.cnblogs.com/blog/1510476/202206/1510476-2022 ...

  6. 毫秒值的概念和作用 --Date类的构造方法和成员方法

    一,  Date类类 Date 表示特定的瞬间,精确到毫秒. 毫秒:千分之一秒作用:可以对时间和日期进行计算可一把日期转换为毫秒进行计算,计算完毕,再转换为日期. 把日期转换为毫秒:当前的日期:202 ...

  7. 2022DASCTF Apr X FATE 防疫挑战赛-- SimpleFlow

    1.SimpleFlow 得到pcapng文件,协议分级统计显示大部分为TCP流和http流 过滤http流,发现了flag.zip,foremost分离,得到加密的zip 在pcapng中寻找pas ...

  8. buu第二页

    33.被劫持的神秘礼物 打开后直接搜索HTTP,发现了以POST方式提交的数据,追踪HTTP流,根据题目提示,把name和word拼在一起 再根据题目提示,用MD5解密 这样就得到了flag 34.刷 ...

  9. 0基础就可以上手的Spark脚本开发-for Java

    前言 最近由于工作需要,要分析大几百G的Nginx日志数据.之前也有过类似的需求,但那个时候数据量不多.一次只有几百兆,或者几个G.因为数据都在Hive里面,当时的做法是:把数据从Hive导到MySQ ...

  10. MySQL主从复制及读写分离

    MySQL主从复制 MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展.多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能. M ...