vue瀑布流自适应高度(迭代总结)

1 篇文章 0 订阅

1.瀑布流自适应高度

效果图如下所示

在这里插入图片描述
Vue中使用vue-waterfall2瀑布流

下载安装:npm install --save vue-waterfall2

之后会在node_modules生成相应的文件,感兴趣的可以仔细看一下它的源码实现
在这里插入图片描述
注意package.json内自动生成的
在这里插入图片描述
引入vue-waterfall2,网上教程大多是在main.js中引入,但其实非常不必要,最好只在用到的vue文件内引用

// 引入瀑布流 vue-waterfall2
import Vue from 'vue';
import waterfall from 'vue-waterfall2';
Vue.use(waterfall)

在这里插入图片描述
vue-waterfall2api可参考文档vue-waterfall2 基于Vue.js 瀑布流组件
在这里插入图片描述
注意:
1.itemWidth需要与gutterWidth一起使用才会生效,否则会进行自适应宽度(使用rem布局时,需先计算出高度再传值)
2.使用了waterfall的组件不允许使用scoped,否则样式会有问题
col默认2列,但是waterfall必须绑定数据源,若数据源取不到可能导致如下报错:
Invalid default value for prop “slideItems”: Props with type Object/Array must use a factory function to return the default value.
在这里插入图片描述

(props 数组/对象的默认值应当由一个工厂函数返回),最好的解决方式就是v-if去判断

<waterfall v-if="list && list.length>0" :data="list">

另外,更改瀑布流样式时一定要注意谨慎使用!important(全局样式),避免给之后的维护修改造成麻烦,由于css内联样式高于外联,所以宽度,间距只能通过组件的api去修改

在这里插入图片描述
vue组件的样式修改可通用/deep/+.样式类名

/deep/.vue-waterfall{
  width: 726px;
}

2.!!强制转换布尔型踩坑

对于字符串而言毫无问题,可对于数组而言存在特殊情况,假若数组不存在,则!!undefined返回的是false

(
浏览器console打印结果)
假若数组存在但为空,则!![]返回的是true,

这就存在歧义,可能导致逻辑判断有遗漏,所以!!强制转换数组前一定要加上对数组长度的判断(list && list.length >0)

3.循环遍历对象内的数组

循环遍历对象内的数组,只取某一类型其中的对象属性值
如下,只需要拿到第一个promType为1的promInfo

"itemOut": {
        "itemName": "商品名称名称111", 
        "promList": [
          {
            "promInfo": "满100减10元",
            "promType": 1
          },
          {
            "promInfo": "满200减30元",
            "promType": 1
          }
        ]
}

可以使用find方法来实现,但是要注意它的用法和api
find() 方法返回通过测试(函数内判断)的数组的第一个元素的值。

find() 方法为数组中的每个元素都调用一次函数执行:

当数组中的元素在测试条件时返回 true 时, find() 返回符合条件的元素,之后的值不会再调用执行函数
如果没有符合条件的元素返回 undefined
注意: find() 对于空数组,函数是不会执行的。

注意: find() 并没有改变数组的原始值。
在这里插入图片描述
所以若promInfos未定义,则会导致出现promInfo of undefined报错,指向的就是promInfos undefined

4.金额小数点后的字体和前面的大小不同

实现效果如下图
在这里插入图片描述
对数据进行处理:裁剪分割不同样式显示

//1.分割价钱 
 let splitPrice = this.data.itemOut.finalPrice.split(".")
 //2.重新赋值
 this.price = `<span style="font-size:12px;">¥</span>${splitPrice[0]}.<span style="font-size:13px;">${splitPrice[1]}</span>`

在这里插入图片描述

这个需要v-html来进行解析,不然span标签会不生效

<div class="double__info__redprice" v-html="this.price">>{{this.price}}</div>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值