2017-10-12 1 views
1

donc je viens d'une React fond et je me demandais comment je pouvais imiter cette ligne: var modal = <Login/>vuejs - composante d'économie à la variable

Voici ce que j'ai jusqu'à présent, mais la sortie de la variable est une chaîne à la place:

<template src="./App.html"></template> 

<script> 
    import 'jquery' 
    import 'uikit' 
    import 'uikit/dist/css/uikit.min.css' 

    import Login from '@/Login.vue' 
    import Register from '@/Register.vue' 

    export default { 
    name: 'app', 
    components: { 
     "Login": Login, 
     "Register": Register 
    }, 
    data: function() { 
     return { 
      message: "first", 
      modal: { 
       body: "test", 
       title: "body" 
      } 
     } 
    }, 
    methods: { 
     modal_open: function(type) { 
      if (type === "login") 
      { 
       this.modal = { 
        body: Login, 
        title: "login" 
       } 
      } 
      else 
      { 
       this.modal = { 
        body: Register, 
        title: "Register" 
       } 
      } 
     }, 
    } 
    } 
</script> 
+0

Quel est le modèle? – Bert

+1

@Bert Ah, j'ai découvert comment le faire. https://vuejs.org/v2/guide/components.html#Dynamic-Components Je ne sais pas pourquoi mais j'ai toujours l'air de trouver la réponse rapidement après avoir posté la question. Je vais y répondre moi-même. –

+0

C'est ce que je voulais savoir :) Je suis content que vous l'ayez trouvé. – Bert

Répondre

1

donc, dans c'est Vue apparemment appelé des composants dynamiques https://vuejs.org/v2/guide/components.html#Dynamic-Components

de la question donnée, vous devriez avoir <component :is="modal.body"></component> dans votre modèle. Et plutôt que d'affecter un objet, vous affectez la clé (chaîne) à partir de la variable components dans l'instance de Vue. Par exemple. modal.body = "Login"

+2

['is' ne doit pas nécessairement être une chaîne] (https://vuejs.org/v2/api/#component). En outre, une alternative à l'utilisation d'un composant dynamique utiliserait une fonction de rendu. – Bert

+0

@Bert Ah cool, pourriez-vous mettre à jour ma réponse (ou en faire une nouvelle, je vais le marquer). Vous semblez être bien plus au courant de cela que moi. –