前言:

这是一个vue的电商项目,使用express后端提供数据。


1.filter()函数。

事情是这样的。我从数据库拿到了所有分类数据。

分类有三个等级。父类,子类,孙类这样。但它们都在同一张表里。

表是这样的:

我要把这样的表数据变成适合前端使用的数据结构。关键在于parent_id,通过parent_id来衔接上下级关系。

我想了很久,尝试了很多次,才想到一个比较合理的解决办法。

vue,数据,代码如下:

data () {
return {
categoryData: [
{
      cat_id: '',
      cat_name: '',
      cat_logo: '',
children: [
        {
          cat_id: '',
          cat_name: '',
          cat_logo: '',
          parent_id: '',
          children: [
            {
              cat_id: '',
              cat_name: '',
              cat_logo: '',
              parent_id: ''
            }
          ]
        }
      ]
}
]
}
},

获取接口数据并处理,代码如下:

created() {
this.$ajax.get('http://localhost:3000/category/').then((res) => {
const data = res.data
// 过滤出一级分类
let levelOne = data.filter((item) => {
return item.level === '1'
})
// 过滤出二级分类
levelOne.forEach((e) => {
let levelTwo = data.filter((item) => {
return item.parent_id === e.cat_id
})
e.children = levelTwo
levelTwo.forEach((f) => {
let levelThree = data.filter((item) => {
return item.parent_id === f.cat_id
})
f.children = levelThree
})
})
this.categoryData = levelOne
}).catch(function (error) {
console.log(error)
})
},

刚开始循环数组用的是for循环,一长串的代码,想想实在太low了。于是尝试了forEach()加filter()。

两个forEach(),三个filter()完美实现了三级分类的上下级关系的组织。ou耶!

2.better-scroll

今天遇到的最多的问题是better-scroll

不止第三次使用better-scroll了,每次的坑也都差不多,但为什么每次都掉进去。。。我得好好反思一下

今天的需求是这样的,我要做一个分类,左边是一级菜单,右边是二级和三级菜单。点击一级菜单,右边的容器内容切换成相应的内容。

在vue项目中使用better-scroll 问题总结:

(1)首先,稳妥起见,在dom数据渲染完毕再去初始化better scroll

this.$nextTick(() => {
this.rights = new BScroll(this.$refs.right, {
click: true
})
})

(2)数据(dom)更新后,better-scroll需要使用refresh()重载,查看手册:http://ustbhuangyi.github.io/better-scroll/doc/zh-hans/api.html#refresh


this.$nextTick(() => {
  this.rights.refresh()
}

(3)每次点击一级菜单,我发现二三级菜单内容的显示位置都不对,它貌似还停留在上一次的滚动位置。我得让它回到顶部,重新开始。

只要使用scrollToElement()方法,查看手册:http://ustbhuangyi.github.io/better-scroll/doc/zh-hans/api.html#scrolltoelementel-time-offsetx-offsety-easing

代码如下:

this.$nextTick(() => {
this.rights.refresh()
this.rights.scrollToElement(this.$refs.right, 300)
})

(4)最后遇到一个重量级问题。某个分类下面内容高度足够的,但滚动的效果却没有。哦不,有时候有,有时候没有。

举例说明:

当上一个点击的分类内容没有足够高度,并且没有触发滚动效果(这是没问题的,因为高度不够是不会触发滚动的),然后却导致了当前这个有足够高度的内容依然无法滚动。(说起来很绕,不知道有没有人能听懂)。

当上一个点击的分类有足够高度,并正常触发了滚动效果,那么当前这个也是可以的。

我查了很多别人的答案,有人说是没有重载,refresh(),这个可以排除,因为我确实重载过了。

有人说是图片没有加载完成,导致高度计算不准确。我一看图片俩字,我就跳过了。绕来绕去,找不到答案。最后处于无奈,死马当活马医,去尝试了一下这个方法。诶,竟然……

请看代码:

updated() {
// 高度问题
let img = this.$refs.right.getElementsByTagName('img')
let count = 0
let length = img.length
if (length) {
let timer = setInterval(() => {
if (count === length) {
this.rights.refresh()
clearInterval(timer)
} else if (img[count].complete) {
count++
}
}, 100)
}
}

竟然真是这个原因,233333

参考文章:解决better-scroll因为图片没有下载完导致滚动条高度不够

Better-scroll 中文手册: http://ustbhuangyi.github.io/better-scroll/doc/zh-hans/#better-scroll%20%E6%98%AF%E4%BB%80%E4%B9%88

最新文章

  1. 可爱的Python_课后习题_CDay0 时刻准备着!发布
  2. 加州大学伯克利分校Stat2.3x Inference 统计推断学习笔记: Section 4 Dependent Samples
  3. Problem A+B(Big Integer)
  4. bzoj1055
  5. JVM运行时内存结构
  6. Java提高学习之Object(3)
  7. sql存储过程的简单使用
  8. javascript图片延迟加载(转载)
  9. HDU5879(打表)
  10. 配置网络yum源
  11. 1.3 Windows注册表
  12. centos7 openssl 生成证书给自己使用
  13. [C# 基础知识系列]专题四:事件揭秘 (转载)
  14. LWIP之ARP协议
  15. Linux驱动之USB鼠标驱动编写
  16. Trap 冷启动与热启动告警
  17. 用jQuery和Json实现Ajax异步请求
  18. 小程序模板中data传值有无...
  19. Sublime Text Ctags 安装、使用、快捷键
  20. Apache的安装与卸载

热门文章

  1. JAVA基础实例(二)
  2. 74.QT窗口实现类的封装
  3. 【Python学习】爬虫报错处理bs4.FeatureNotFound
  4. 调用WCF出现的异常
  5. SSO 中间件 kisso
  6. Cookie应用--显示看过的商品
  7. [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.0:compile (default-compile) 问题解决
  8. 关于编译com工程的一些体会
  9. Javascript 继承和克隆
  10. C++ 与C# 对应的变量互转