mirror of
				https://gitee.com/vant-contrib/vant.git
				synced 2025-11-04 12:52:08 +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);
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
  };
 | 
						|
}
 |