mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-04-06 03:57:59 +08:00
49 lines
888 B
JavaScript
49 lines
888 B
JavaScript
function getElement(selector) {
|
|
if (typeof selector === 'string') {
|
|
return document.querySelector(selector);
|
|
}
|
|
|
|
return selector();
|
|
}
|
|
|
|
export function PortalMixin({ afterPortal }) {
|
|
return {
|
|
props: {
|
|
getContainer: [String, Function]
|
|
},
|
|
|
|
watch: {
|
|
getContainer() {
|
|
this.portal();
|
|
}
|
|
},
|
|
|
|
mounted() {
|
|
if (this.getContainer) {
|
|
this.portal();
|
|
}
|
|
},
|
|
|
|
methods: {
|
|
portal() {
|
|
const { getContainer } = this;
|
|
|
|
let container;
|
|
if (getContainer) {
|
|
container = getElement(getContainer);
|
|
} else if (this.$parent) {
|
|
container = this.$parent.$el;
|
|
}
|
|
|
|
if (container && container !== this.$el.parentNode) {
|
|
container.appendChild(this.$el);
|
|
}
|
|
|
|
if (afterPortal) {
|
|
afterPortal.call(this);
|
|
}
|
|
}
|
|
}
|
|
};
|
|
}
|