问题

在基于mpvue+Vant Weapp组件库实战过程中,问题越来越多。网络上所谓的“坑”总结,仅仅不过是其开发中所遭所遇之“坑”而已——估计后面的“坑”还多着呢!根据本人粗浅分析,这些“坑”与微信官方格式有密切关系。另一方面,只有“不会导致内存泄漏”的坑,广大开发人员应该还是会体谅的。

言归正传,今天在使用card组件显示价格时出现问题了。问题的最初来由是我想把官方提供的H5版本转换成小程序版本,参考下图:

吸引人的是,在Vant 1.6.8版本中提供了如下图所示的示例页面:

够可以的吧,只要稍加修改,便可为我所用了!但是......

在分析其对应的github源码时,发现如下代码(为了便于参考,还是复制大部分吧):

class="card-goods__item"

v-for="item in goods"

:key="item.id"

:name="item.id"

>

:title="item.title"

:desc="item.desc"

:num="item.num"

:price="formatPrice(item.price)"

:thumb="item.thumb"

/>

:price="totalPrice"

:disabled="!checkedGoods.length"

:button-text="submitBarText"

@submit="onSubmit"

/>

import { Checkbox, CheckboxGroup, Card, SubmitBar, Toast } from 'vant';

export default {

components: {

[Card.name]: Card,

[Checkbox.name]: Checkbox,

[SubmitBar.name]: SubmitBar,

[CheckboxGroup.name]: CheckboxGroup

},

data() {

return {

checkedGoods: ['1', '2', '3'],

goods: [{

id: '1',

title: '进口香蕉',

desc: '约250g,2根',

price: 200,

num: 1,

thumb: 'https://img.yzcdn.cn/public_files/2017/10/24/2f9a36046449dafb8608e99990b3c205.jpeg'

}, {

id: '2',

title: '陕西蜜梨',

desc: '约600g',

price: 690,

num: 1,

thumb: 'https://img.yzcdn.cn/public_files/2017/10/24/f6aabd6ac5521195e01e8e89ee9fc63f.jpeg'

}, {

id: '3',

title: '美国伽力果',

desc: '约680g/3个',

price: 2680,

num: 1,

thumb: 'https://img.yzcdn.cn/public_files/2017/10/24/320454216bbe9e25c7651e1fa51b31fd.jpeg'

}]

};

},

computed: {

submitBarText() {

const count = this.checkedGoods.length;

return '结算' + (count ? `(${count})` : '');

},

totalPrice() {

return this.goods.reduce((total, item) => total + (this.checkedGoods.indexOf(item.id) !== -1 ? item.price : 0), 0);

}

},

methods: {

formatPrice(price) {

return (price / 100).toFixed(2);

},

onSubmit() {

Toast('点击结算');

}

}

};

注意其中这一段中的价格部分:

:title="item.title"

:desc="item.desc"

:num="item.num"

:price="formatPrice(item.price)"

:thumb="item.thumb"

/>

这里使用了v-bind方法显示价格,其中使用了带参数函数的计算方法。一切看似非常一般,但是问题就在这里!

测试结果是价格部分不显示。

初步答案

经过分析小程序版本的vant weapp组件card并结合进一步测试得到如下结论:

在mpvue+vant weapp小程序开发环境下,这里card组件的价格部分不能使用带参数的函数计算方式,具体结论见下表:

表达形式

结果:price="formatPrice(item.price)"

不显示

:price="Math.sin(1)+67"

不显示

:price="Math.PI"

不显示

:price="item.price"

显示正常

:price="item.price/100"

显示正常

:price="formatPrice()"

不显示 !

:price="formatPrice"

显示正常!

需要注意的是,表格中最后两行。其中,formatPrice()是函数形式,不可以,而且出现错误提示。但是,最后一行使用不带括号的formatPrice而且这个formatPrice放在计算属性(computed)中完全可以!

进一步分析

有关vue开发中computed段与methods段的区别在网络上有很多介绍,在此不赘述。但是,有一点需要明确,就是:

methods段中你可以根据需要创建任意形式的带参数或者不带参数的函数;但是,computed段中你只能创建不带参数的函数(不算setter函数)。上面表格最后一行中的formatPrice正是computed段中的一个无参数函数。

但是,在本文上面案例中,是要求以v-for循环指令方式显示每一件商品的价格的,因此,需要传递一个代表当前商品id的参数,但遗憾的是,这种带参数的函数是无法在computed段中表达的。

其实,进一步分析这个函数formatPrice的内容:

formatPrice(price) {

return (price / 100).toFixed(2);

}

也不过是对于传递的价格参数缩小了100倍(因默认单位是分),然后保留两位小数。于是,我推荐使用如下方案:

:price="item.price/100"

也就是说,把分转换成元单位即可,保留小数的任务可以交由服务端完成。

主要参考

card如何添加复选框 vant_Vant Weapp小程序蹲坑之使用card组件显示价格相关推荐

  1. vant weapp 下拉_Vant Weapp小程序蹲坑之使用submit-bar组件

    本文介绍在Vant Weapp小程序开发中使用submit-bar组件时需要注意的部分问题.坑来坑去,先上示例代码吧,由简单到复杂顺序. main.js代码 main.json代码 index.vue ...

  2. java 下拉复选框_JAVA个人小程序GUI篇-收银(标签、按钮、复选框、下拉标、文本域、表格······)...

    1 //导入包 2 importjava.awt.BorderLayout;3 importjava.awt.EventQueue;4 5 importjavax.swing.JFrame;6 imp ...

  3. Vant Weapp小程序蹲坑之使用card组件显示价格

    问题 在基于mpvue+Vant Weapp组件库实战过程中,问题越来越多.网络上所谓的"坑"总结,仅仅不过是其开发中所遭所遇之"坑"而已--估计后面的&quo ...

  4. html设置复选框图片,css实现图片右上角添加复选框的方法

    css实现图片右上角添加复选框的方法 发布时间:2020-06-15 10:59:23 来源:亿速云 阅读:221 作者:Leah 这篇文章给大家分享的是css实现图片右上角添加复选框的方法,相信大部 ...

  5. C#ListView控件添加复选框并获取选中的数目

    1.添加复选框:listView1.CheckBoxes = true; 2.选中listview并获取选中的数目: private void listView1_ItemChecked(object ...

  6. 中添加复选框_Word/excel中在方框中打钩/叉的符号,简单方便快捷

    方法1:插入特殊符号 将光标定位于需要打钩的地方,选择[插入]--[符号]--[其他符号]--更改字体为[Windings2] 方法2:使用快捷键 从上面的截图中可以看到设置快捷键,所以在插入特殊符号 ...

  7. QTableView添加复选框

    原文地址::http://blog.sina.com.cn/s/blog_a6fb6cc90101iang.html 相关文章 1.QtableView中添加复选框----https://www.cn ...

  8. 组合框里添加复选框的方法

    组合框可以看作是列表框和文本框的组合,因其占据的空间少,使用操作方便,常被界面设计人员用于界面开发设计中,在有限个输入的条件下,组合框常用来代替文本框,这样从用户使用角度来看,更趋人性化,所见即所得. ...

  9. excel添加复选框的两种做法

    内容提要:文章介绍excel添加复选框的方法,通过控件命令和VBA实现批量添加复选框.对Excel感兴趣的朋友可加Excel学习交流群:284029260(www.itblw.com) excel添加 ...

  10. MFC中CListCtrl添加复选框,实现单选

    记录MFC项目中CListCtrl添加复选框,实现单选步骤 添加复选框 绑定控件变量 CListCtrl m_ctrList; OnInitDialog函数中添加 m_ctrList.SetExten ...

最新文章

  1. 9/6字节校招研发岗位笔试
  2. composer 修改为 国内镜像
  3. 输出控制台传递的参数——小小实例。
  4. 复工后一次百万长连接压测Nginx与OOM的问题排查分析,我裂开了!
  5. 树莓派okdo_创客的AK47—树莓派4正式发布,性能大幅提升,售价仅为35美元。
  6. ubuntu软件(查看文件差异)
  7. LeetCode 999. 车的可用捕获量
  8. MySQL 事务(Transaction)篇
  9. Linux 下配置 node + mongodb 环境
  10. 开源论坛之discourse搭建
  11. DirectX SDK (June 2010)安装错误S1023,解决方法
  12. iPhone SDK开发基础之使用UITabBarController组织和管理UIView
  13. 3月3日 单灭点、双灭点、单应矩阵求解相机姿态,世界坐标-相机坐标-图像坐标-像素坐标四个坐标系的变换关系,通过Vanishing Points计算焦距和像心
  14. Comparator 实现集合中元素的比较.输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这321323
  15. php 网站的多语言设置(IP地址区分国内国外)
  16. 2021年黄石二中高考成绩查询,【黄石二中2018高考金榜】黄石二中2004届高考总结...
  17. Ubuntu18.04安装RTL8125/RTL8168等网卡驱动程序
  18. FTP服务器有时候连接超时的问题
  19. xgb.cv进行交叉验证
  20. 如何安装ubuntu kylin(优麒麟)?

热门文章

  1. linux 执行安装脚本,批量执行Linux安装程序和脚本
  2. java跳跳球代码,README.md
  3. Easy-rules使用介绍
  4. android:获取网络时间、文件路径,修改包名,发布release版本
  5. 青蛙学Linux—Zabbix Web使用之模板④基于触发器的动作和告警媒介
  6. 将Object对象转成 json串
  7. ssh无密码登录设置方法以及出现问题 ECDSA host key 和IP地址对应的key不同的解决...
  8. Eclipse快捷键与使用技巧总结
  9. 第十四章 深度确定性策略梯度(Deep Deterministic Policy Gradient Algorithms,DDPG)-强化学习理论学习与代码实现(强化学习导论第二版)
  10. 【从C到C++学习笔记】程序/结构化程序设计/面向对象的程序设计