需要注意的是main.js里面需要取消vue-router的默认路由,src/main.js的router.replace(‘/goods’);需要去掉
原因是在添加了其他页面(原来路由只有一个页面goods,现在多了页面ratings)之后,在浏览器加载页面的时候:
- 首先会先加载所有页面
- 在各个页面都在加载的过程中,会跳到默认路由
- 然后这些页面被中断了加载,导致了页面内部的一些靠dom渲染的代码无法执行,例如bs-scroll
- 所以会出现一些报错,TypeError: Cannot read property ‘children’ of undefined
- 所以要做默认路由的时候,直接用url做,不用vue-router自己去跳转,直接写第一个url的地址
主体框架
1 | <div class="ratings" ref="ratings"> |
需要加一个ref,为了让bscroll可以初始化dom
ratings内容
html代码
1 | <div class="ratings-content"> |
- 三个一样的模块共用一套样式代码,分别代入不同的数据
- 这里的数据都是获取seller的数据,是父组件传入的props
js代码
1 | import star from '../star/star'; |
关于适配iphone5,因为设计稿是以iphone6为模板设计的,如果不适配一些小的屏幕的话,对于一些比较宽的div(例如overview-left,overview-right)就会出现换行,被挤压的显示清空,所以需要使用media query来做一些基本的适配,这里只是以iphone5为适配参考,具体做法就是针对不同的屏幕宽度做处理
ratingselect组件
这个引入类似ratingselect组件
html代码
1 | <!--引入split组件--> |
ratings列表
html代码
1 | <div class="rating-wrapper"> |
- 需要注意recommend的布局处理
- needShow和过滤时间类似food.vue组件里面使用九.商品详情页food.vue
js代码
1 | import BScroll from 'better-scroll'; |
css代码
1 | @import "../../common/stylus/mixin.styl" |
这里的flex布局是左边固定28px,然后右边占满剩下的空间
- flex: 0 0 28px 是flex-grow为0(项目不放大比例),flex-shrink为0(项目不缩小比例),flex-basis为28px(固定占用28px)
- flex: 1是flex 1 1 auto的缩写,就是会放大项目比例,并且剩余的项目空间也占有
参考:Flex 布局教程:语法篇
针对recommend的布局:
- 每一个内容都是一个span,span是行内元素,可以并列一行
- 设置外边距是为了span之间能够形成独立的间隙
- 设置内边距是为了让span和文字形成button的效果