export function ChildrenMixin(parent, options = {}) { const indexKey = options.indexKey || 'index'; return { inject: { [parent]: { default: null, }, }, mounted() { this.parent = this[parent]; this.bindRelation(); }, // #ifdef VUE2 beforeDestroy() { if (this.parent) { this.parent.children = this.parent.children.filter( (item) => item !== this ); uni.$emit("childrenReady" + this.parent._uid, this); } }, // #endif // #ifdef VUE3 beforeUnmount() { if (this.parent) { this.parent.children = this.parent.children.filter( (item) => item !== this ); uni.$emit("childrenReady" + this.parent._uid, this); } }, // #endif methods: { bindRelation() { if (!this.parent || this.parent.children.indexOf(this) !== -1) { return; } const children = [...this.parent.children, this]; this.parent.children = children; this.index = this.parent.children.indexOf(this); uni.$emit("childrenReady" + this.parent._uid, this); }, }, }; } export function ParentMixin(parent) { return { provide() { return { [parent]: this, }; }, created() { this.children = []; }, // #ifdef VUE2 beforeDestroy() { uni.$off("childrenReady" + this._uid) }, // #endif // #ifdef VUE3 beforeUnmount() { uni.$off("childrenReady" + this._uid) }, // #endif }; }