附录6-1 黑马优购项目-组件与过滤器

目录

1  过滤器-格式化价格

2  组件-搜索框

3  组件-数量框

4  组件-商品概况

4.1  格式化价格

4.2  选择性使用勾选框和数量框

4.3  源码 


1  过滤器-格式化价格

这个项目中仅用到格式化价格这一种过滤器。过滤器文件位置为store/filter.wxs

文件内容是这样的,功能是保留两位小数。后续我们会进行引用

2  组件-搜索框

在首页中有使用

在分类中有使用

在app.json中注册black_horse_search组件

html

<!--components/black_horse_search.wxml-->
<view class="my-search-container" bindtap="go_search_page"><view class="my-search-box"><icon class="icon-small" type="search" size="17"></icon><text class="placeholder">搜索</text></view>
</view>

css

/* components/black_horse_search.wxss */
.my-search-container {background-color: #c00000;height:50px;padding:0 10px;display:flex;align-items: center;
}.my-search-box {height:36px;background-color: #fff;border-radius: 15px;width:100%;display:flex;align-items:center;justify-content:center;
}.my-search-box .placeholder {font-size:15px;margin-left:5px;
}

js

// components/black_horse_search.js
Component({/*** 组件的属性列表*/properties: {},/*** 组件的初始数据*/data: {},/*** 组件的方法列表*/methods: {go_search_page() {wx.navigateTo({url:'/subpackage_search/search'})}}
})

js中只有点击后跳转到子页面search,跳转之后的事情就不用这个组件来做了

3  组件-数量框

数量框就是这个,该项目中只有购物车中用到了数量框,所以实际这个没必要封装

wxml

<!--components/number_box/number_box.wxml-->
<view class="number-container"><!-- 减 1 的按钮 --><button size="mini" bindtap="sub_one" class="number_container_button">-</button><!-- 购买的数量 --><view class="number-box">{{ goods_count }}</view><!-- 加 1 的按钮 --><button size="mini" bindtap="add_one" class="number_container_button">+</button>
</view>

wxss

/* components/number_box/number_box.wxss */
.number-container {display: flex;text-align: center;justify-content: center;
}.number-box {line-height: 80rpx;text-align: center;margin: 0 5px;font-size: 12px;
}

js

// components/number_box/number_box.js
Component({/*** 组件的属性列表*/properties: {goods_count:{type:Number,value:1}},/*** 组件的初始数据*/data: {},/*** 组件的方法列表*/methods: {add_one(e) {this.setData({goods_count:this.data.goods_count+1})this.triggerEvent("add_one",e.target.dataset)},sub_one(e) {if (this.data.goods_count > 1) {this.setData({goods_count:this.data.goods_count-1})}this.triggerEvent("sub_one",e.target.dataset)}}
})

在js中用到了自定义事件传递数据。从数量框->goods_list_item->购物车页面

e.target.dataset是传递参数,我们在组件中没写参数,也不需要传递参数,所以可以删掉

4  组件-商品概况

在商品列表中使用。每一个绿框就是一个组件

在购物车中使用

在app.json中注册goods_list_item组件

4.1  格式化价格

引入wxs,然后在模板中使用

4.2  选择性使用勾选框和数量框

从使用者接受properties觉得是否使用勾选框和数量框

4.3  源码 

wxml

<!--components/goods_list_item/goods_list_item.wxml--><wxs module="filter" src="../../store/filter.wxs"></wxs><view class="goods-item"><view class="goods-item-left"><checkbox model:checked="{{goods_checked}}" color="#C00000" wx:if="{{showRadio}}" bindtap="trigger_change_radio_state_event" data-goods_id="{{goods_id}}" data-goods_status="{{goods_checked}}" /><image src="{{goods_small_logo}}" class="goods-pic" data-goods_id="{{goods_id}}"/></view><view class="goods-item-right" data-goods_id="{{goods_id}}"><view class="goods-name" data-goods_id="{{goods_id}}" >{{goods_name}}</view><view class="goods-info-box" data-goods_id="{{goods_id}}"><view class="goods-price" data-goods_id="{{goods_id}}">¥{{filter.format_price(goods_price)}}</view><number_box wx:if="{{showNumberBox}}" goods_count="{{goods_count}}" bind:add_one="add_one" bind:sub_one="sub_one" data-goods_id="{{goods_id}}"></number_box>  </view></view>
</view>

在这里给所有的元素都给上了data-goods_id是怕goods_id传不出去,怀疑是和事件冒泡有关,应该有更简便的写法,如果不想思考就给每个元素都加上

wxss

/* components/goods_list_item/goods_list_item.wxss */.goods-item {display:flex;padding:10px 5px;border-bottom:1px solid #f0f0f0;
}
/* 左侧 */
.goods-item .goods-item-left {margin-right:5px;display:flex;justify-content: space-between;align-items:center;
}.goods-item .goods-item-left .goods-pic {width:100px;height:100px;display: block;
}
/* 右侧 */
.goods-item .goods-item-right {display: flex;flex:1;flex-direction:column;justify-content:space-between;
}.goods-item .goods-item-right .goods-name {font-size:13px;
}.goods-item .goods-item-right .goods-price {font-size:16px;color:#c00000;
}.goods-item .goods-item-right .goods-info-box {display:flex;align-items:center;justify-content: space-between;
}

js

// components/goods_list_item/goods_list_item.js
Component({/*** 组件的属性列表*/properties: {goods_small_logo:{type:String,value:'https://img3.doubanio.com/f/movie/8dd0c794499fe925ae2ae89ee30cd225750457b4/pics/movie/celebrity-default-medium.png'},goods_id:{type:Number},goods_count:{type:Number},goods_price:{type:Number},goods_name:{type:String},showRadio:{type:Boolean,value:false},showNumberBox:{type:Boolean,value:false},goods_checked:{type:Boolean,value:true}},/*** 组件的初始数据*/data: {},/*** 组件的方法列表*/methods: {trigger_change_radio_state_event(e) {this.triggerEvent("radio_change",e.target.dataset)},add_one(e) {this.setData({goods_count:this.data.goods_count+1})this.triggerEvent("add_one",e.target.dataset)},sub_one(e) {if (this.data.goods_count > 1) {this.setData({goods_count:this.data.goods_count-1})}this.triggerEvent("sub_one",e.target.dataset)}}
})

js中干了两件事,一个是通过properties收数据,另一个是通过方法向上传数据,这里的e.target.dataset不可省略,因为要向上传递goods_id

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/661855.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

APT预警攻击平台截获Nday

APT预警攻击平台截获Nday 2024年4月26日 设备漏洞【漏洞利用】H3C Magic R100任意代码执行漏洞(CVE-2022-34598) 0000 &#xff1a; 0010 &#xff1a; 0020 &#xff1a; 0030 &#xff1a; 0040 &#xff1a; 0050 &#xff1a; 0060 &#xff1a; 0070 &#xff1a;6F 72…

MySQL基础学习(待整理)

MySQL 简介 学习路径 MySQL 安装 卸载预安装的mariadb rpm -qa | grep mariadb rpm -e --nodeps mariadb-libs安装网络工具 yum -y install net-tools yum -y install libaio下载rpm-bundle.tar安装包&#xff0c;并解压&#xff0c;使用rpm进行安装 rpm -ivh \ mysql-communi…

【热闻速递】Google 裁撤 Python研发团队

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 【&#x1f525;热闻速递】Google 裁撤 Python研发团队引入研究结论 【&#x1f5…

Liunx发布tomcat项目

Liunx在Tomcat发布JavaWeb项目 1.问题2.下载JDK3.下载Tomcat4.Tomcat本地JavaWeb项目打war包、解压、发布5.重启Tomcat,查看项目 1.问题 1.JDK 与 Tomcat 版本需匹配&#xff0c;否则页面不能正确显示 报错相关&#xff1a;Caused by: java.lang.ClassNotFoundException: java…

通过Servlet和JSP,结合session和application实现简单网络聊天室(文末附源码)

目录 一.成品效果 二.代码部分 chat.jsp ChatServlet 一.成品效果 在启动成功后&#xff0c;我们就可以在任意俩个浏览器页面中相互发消息&#xff0c;如图所示左边屏幕使用的是Edge浏览器&#xff0c;右图使用的是火狐浏览器。当然笔者这里只是简单实现最基本的一些功能&…

企业如何通过定制AI智能名片B2B2C商城系统革新营销手段

在日新月异的商业环境中&#xff0c;企业想要立足并蓬勃发展&#xff0c;就必须紧跟时代的步伐&#xff0c;不断革新营销手段。而定制开发AI智能名片B2B2C商城系统正是企业实现这一目标的重要武器。接下来&#xff0c;我们将深入探讨企业如何通过这一系统&#xff0c;在与客户交…

阿里云企业邮箱API的使用方法?调用限制?

阿里云企业邮箱API性能如何优化&#xff1f;配置邮箱API的优势&#xff1f; 阿里云企业邮箱以其稳定、高效和安全的特点&#xff0c;受到了众多企业的青睐。而阿里云企业邮箱API的开放&#xff0c;更是为企业提供了更加灵活、便捷的管理和操作方式。下面&#xff0c;我AokSend…

【Git】Git常用命令

1、配置命令 # 查看全局配置列表 git config --global -l # 查看局部配置列表 git config --local -l# 查看所有的配置以及它们所在的文件 git config --list --show-origin# 查看已设置的全局用户名/邮箱 git config --global --get user.name git config --global --get use…

GPG的使用

这里写自定义目录标题 安装加密程序生成加密密钥怎么备份自己的密钥就可以使用公钥加密邮件信息了 安装加密程序 下载gpg4win&#xff1a; https://www.gpg4win.org/index.html 免费的&#xff0c;如果使用的是苹果电脑&#xff0c;使用https://gpgtools.org/。 如果是linux&a…

【力扣】螺旋矩阵

59. 螺旋矩阵 II 刚开始遇到这道题目的时候相信没见过的同学多多少少都会有点懵圈&#xff0c;感觉题目有点无从下手&#xff0c;但其实只要抓住本质就行了&#xff0c;题目的最终目的就是返回一个二维数组的结果&#xff0c;这个二维数组的大小是的 int[n][n]&#xff0c;题目…

电商日志项目(一)

电商日志项目 一、项目体系架构设计1. 项目系统架构2. 项目数据流程二、环境搭建1. NginxLog文件服务1.1. 上传,解压1.2. 编译安装1.3. 启动验证2. Flume-ng2.1. 上传解压2.2. 修改配置文件2.3. 修改环境变量2.4. 验证3. Sqoop3.1. 上传解压3.2. 配置环境变量3.3. 修改配置文件…

有种预感,今年双11可能有点冷清,你们觉得呢?

一方面是各个电商平台把促销周期拉长了&#xff0c;不再盯着11.11这一天&#xff1b;另一方面大家的荷包也不是那么鼓了&#xff0c;什么原因都懂的&#xff0c;老铁们觉得呢&#xff1f;