UNPKG

@minix-iot/ui

Version:

基于Vue的移动端轻量级UI组件库

81 lines (78 loc) 2.03 kB
import Icon from '../icon/icon.jsx'; import { Namespace } from '../../utils/namespace'; const namespace = Namespace.Create('tab-bar-item'); export default { name: namespace.name, components: { Icon }, props: { name: { type: String, default: '' }, icon: { type: String, default: '' }, iconPrefix: { type: String }, dot: { type: Boolean, default: false }, badge: { type: Number | String }, size: { type: Number, default: 48 } }, computed: { cls () { return namespace.derive({ active: this.active }); }, style () { return { color: this.active ? this.$parent.activeColor : this.$parent.inactiveColor } }, textCls () { return namespace.derive('text') }, index () { return this.$parent.$children.indexOf(this); }, active () { return this.$parent.value === (this.name || this.index); } }, methods: { onClick (e) { this.$parent.setActive(this.name || this.index); this.$emit('click', e); } }, render () { const renderIcon = () => { if (this.$scopedSlots.icon) { return this.$scopedSlots.icon({ active: this.active }) } if (this.icon) { return <Icon classPrefix={this.classPrefix} name={this.icon} size={this.size} badge={this.badge} dot={this.dot} offset={[0, 5]} /> } } return ( <div class={this.cls} style={this.style} onClick={this.onClick}> {renderIcon()} <div class={this.textCls}> {this.$slots.default} </div> </div> ) } };