66 lines
1.7 KiB
JavaScript
66 lines
1.7 KiB
JavaScript
import { VantComponent } from '../common/component';
|
|
VantComponent({
|
|
relation: {
|
|
name: 'tabbar-item',
|
|
type: 'descendant',
|
|
linked(target) {
|
|
this.children.push(target);
|
|
target.parent = this;
|
|
target.updateFromParent();
|
|
},
|
|
unlinked(target) {
|
|
this.children = this.children.filter((item) => item !== target);
|
|
this.updateChildren();
|
|
}
|
|
},
|
|
props: {
|
|
active: {
|
|
type: null,
|
|
observer: 'updateChildren'
|
|
},
|
|
activeColor: {
|
|
type: String,
|
|
observer: 'updateChildren'
|
|
},
|
|
inactiveColor: {
|
|
type: String,
|
|
observer: 'updateChildren'
|
|
},
|
|
fixed: {
|
|
type: Boolean,
|
|
value: true
|
|
},
|
|
border: {
|
|
type: Boolean,
|
|
value: true
|
|
},
|
|
zIndex: {
|
|
type: Number,
|
|
value: 1
|
|
},
|
|
safeAreaInsetBottom: {
|
|
type: Boolean,
|
|
value: true
|
|
}
|
|
},
|
|
beforeCreate() {
|
|
this.children = [];
|
|
},
|
|
methods: {
|
|
updateChildren() {
|
|
const { children } = this;
|
|
if (!Array.isArray(children) || !children.length) {
|
|
return Promise.resolve();
|
|
}
|
|
return Promise.all(children.map((child) => child.updateFromParent()));
|
|
},
|
|
onChange(child) {
|
|
const index = this.children.indexOf(child);
|
|
const active = child.data.name || index;
|
|
if (active !== this.data.active) {
|
|
this.$emit('change', active);
|
|
}
|
|
}
|
|
}
|
|
});
|