weex-tabbar
weex custom tabbar Component , Support children component and Label text(weex自定义tabbar组件,支持label文字显示)
安装
npm install weex-tabbar --save
再引用:
;
使用
注意:tabs
只有2~5个之间的tab才会显示正确,所以如果你tab大于5个或者少于2个,请自己手动调整样式.
tabbar有以下两个属性:
tabs
:一个包含了tab信息的数组.selected
:默认开始选中的tab.bgopacity
:背景透明度,值为0~1.
其中tabs
中的tab有以下几个属性:
title: "个人中心"//tab标签文字 defaultTitleColor: "#000"//标签未激活时显示的颜色 image: "http://gtms01.alicdn.com/tps/i1/TB1B0v5MpXXXXcvXpXX9t7RGVXX-46-46.png"//标签未激活时显示的图片 selectedImage: "http://gtms04.alicdn.com/tps/i4/TB1NxY5MpXXXXcrXpXX9t7RGVXX-46-46.png"//标签选中后的图片 activeTitleColor:"#db3652"//激活时的文字颜色 haslabel:true//是否有标签 labelName:"cart"//标签的名id(唯一) label:5//标签显示数字 labelColor:"#db3652"//标签背景色
上面中的labelName
属性是这个label的唯一值,所以不能与其它的label名字相同,后面我们会用到这个属性来更改属性label
的值.
切换页面
切换页面这个操作tabbar已经封装好了,剩下的是我们需要在父组件中和tabbar组件通信即可.
如果你已经下载了本库,你可以打开根目录下的index.we
文件,这是我们的父组件,而目录components
下的文件都是子组件,我们可以利用父组件和子组件来实现兄弟组件之间的通信(不懂为何weex中没有类似vuex的实现,而react-native都有redux的实现了).
打开index.we
文件看第五行:
这是我们第一个内容展示页,之前版本的tab1页面的显示与否都是由属性display
来控制的,现在由z-index
和if
控制,因为自从weex更新后发现display
属性被弃用.
对于html5来说建议不用if
来控制,实验中发现切换缓慢,所以如果是主要实现html5折这边的话请删掉这个,而手机端必须使用,否则无法实现切换效果.
感兴趣的同学可以打开在项目中的html5
文件地下的index.html
文件测试一下.
再看105行:
// 监听子组件tabbar发送过来的消息this;
这是tabbar通知父组件:你要换页了.
通信
这个大部分同学应该都知道,而tabbar页封装好了通信接口,只需要调用即可.
请看到第108行:
// 监听子组件index发送过来的消息this;
父组件监听其它子组件传递过来的信息,然后通过父组件分发tabbarAccept
到tabbar组件那里去,tabbar接受三个信息:
action
:需要执行的动作,有三个字段:"add","minus","set"target
:这是需要执行动作的对象,也就是上面开始说的labelName
.value
:数字类型,如果action
是"add",那么一次增加的值就是value
,同理"minus",而"set"的时候就是设置值为value
.
显示隐藏
不同于官方定死tabbar的位置,这里的tabbar可以隐藏和显示,和上面一样,需要你在自己组件中通信通知tabbar来执行动作:
请看到第119行:
// 隐藏tabbarthis;
这里的state有两个字段:"show"和"hide",表示当前需要显示还是隐藏,接下来还需要在其他组件中添加检测才能实现这个功能,比如在tab1.we
文件中:
<!-- 3行 -->{{text}}
// 79行{ this;}
为何造轮子
官方已经提供了wxc-tabbar
组件供我们使用,但是在我使用的过程中发现这个组件不支持子组件,对于组件需要通信的来说,这是一个致命的问题,比如我点击页面的一个按钮,需要增加tabbar上的一个数字显示,可是并没有这个功能和方法,即使我再构造一个父组件也无法实现父子组件间通信(也不清楚是否是我方法错了),所以只好自己重新实现这个组件了.