“Composant sur une nouvelle fenêtre” Réponses codées

Composant sur une nouvelle fenêtre

<window-portal>
  I appear in a new window!
</window-portal>
Filthy Falcon

Composant sur une nouvelle fenêtre

<template>
  <div v-if="open">
    <slot />
  </div>
</template>

<script>
export default {
  name: 'window-portal',
  props: {
    open: {
      type: Boolean,
      default: false,
    }
  },
  data() {
    return {
      windowRef: null,
    }
  },
  watch: {
    open(newOpen) {
      if(newOpen) {
        this.openPortal();
      } else {
        this.closePortal();
      }
    }
  },
  methods: {
    openPortal() {
      this.windowRef = window.open("", "", "width=600,height=400,left=200,top=200");
      this.windowRef.addEventListener('beforeunload', this.closePortal);
      // magic!
      this.windowRef.document.body.appendChild(this.$el);
    },
    closePortal() {
      if(this.windowRef) {
        this.windowRef.close();
        this.windowRef = null;
        this.$emit('close');
      }
    }
  },
  mounted() {
    if(this.open) {
      this.openPortal();
    }
  },
  beforeDestroy() {
    if (this.windowRef) {
      this.closePortal();
    }
  }
}
</script>
Filthy Falcon

Réponses similaires à “Composant sur une nouvelle fenêtre”

Questions similaires à “Composant sur une nouvelle fenêtre”

Plus de réponses similaires à “Composant sur une nouvelle fenêtre” dans JavaScript

Parcourir les réponses de code populaires par langue

Parcourir d'autres langages de code