IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VueJS Discussion :

Partage de data entre component parent et component child


Sujet :

VueJS

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 35
    Points : 27
    Points
    27
    Par défaut Partage de data entre component parent et component child
    Bonjour,

    J'ai enfin commencé VueJs après 15 ans de Jquery.
    Puisque je n'utilise pas npm et pas de compilation, j'ai trouvé vue3-sfc-loader pour charger des fichiers .vue
    Par contre, comment interagir sur les data du parent à partir du child.

    Index.html
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <!DOCTYPE html>
    <html lang="fr">
      <head>
        <meta charset="UTF-8" />
        <title>Vue Test</title>
      </head>
      <body>
        <div id="app">
          <vue-main-component msg="Foobar"></vue-main-component>
          Mon info pere : <b>{{info}}</b>
        </div>
        <script src="https://unpkg.com/vue@latest"></script>
        <script src="https://cdn.jsdelivr.net/npm/vue3-sfc-loader"></script>
        <script src="./js/vue-app.js"></script>
      </body>
    </html>

    js/vue-app.js
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    const { createApp } = Vue;
    const { loadModule } = window['vue3-sfc-loader'];
    const options = {
      moduleCache: {
        vue: Vue,
      },
      getFile(url) {
        return fetch(url).then((resp) =>
          resp.ok ? resp.text() : Promise.reject(resp)
        );
      },
      addStyle(styleStr) {
        const style = document.createElement('style');
        style.textContent = styleStr;
        const ref = document.head.getElementsByTagName('style')[0] || null;
        document.head.insertBefore(style, ref);
      }
    };
    const app = createApp({
    	data() {
        return {
    			info:'Mon info'
    		}
    	},
     
      components: {
        VueMainComponent: Vue.defineAsyncComponent(() =>
          loadModule('js/vue-components/vue-main-component.vue', options)
        )
      },
    }).mount('#app');

    vue-main-component.vue
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <template>
        <h2>{{ headline }}</h2>
     
    	Dans le child : {{info}} ...<br>
    	Mon msg : {{msg}}<br>
     
    	<input type="text" v-model="info">
    </template>
     
    <script>
    export default {
      data() {
        return {
          headline: 'Vue Main Component Headline'
        };
      },
      props: {
        msg: String,
      },
    };
    </script>


    Mon erreur
    [Vue warn]: Property "info" was accessed during render but is not defined on instance.
    at <Anonymous msg="Foobar" >
    at <AsyncComponentWrapper msg="Foobar" >
    at <App>

    Je voudrai que "Dans le child : {{info}}" avoir la valeur info qui est dans vue-app.js
    Idem : la valeur info dans vue-app.js doit être modifiable dans vue-main-component.vue

    Est-ce possible en passant par vue3-sfc-loader ?
    Si non, vous avez des pistes ?

    Grand merci par avance.
    le problème avec les idées derrière la tete, c'est que l'on ne peux pas les voir

  2. #2
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    hello, comme l'erreur te l'indique, dans le composant enfant, tu n'as pas accès à info. tu as accès à headline via data et à msg via props.

    pour y avoir accès en lecture, tu dois passer en props du composant parent vers le enfant

    tu ne pourras pas modifier directement une valeur qui vient de props, tu devras passer par un évènement.

    ou alors... tu passes par un store, mais c'est encore autre chose
    on ne dit pas "ça ne marche pas" on dit "je suis incapable de faire fonctionner correctement les outils mis à ma disposition"
    Pas de question technique par MP

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 35
    Points : 27
    Points
    27
    Par défaut vue3-sfc-loader
    Bonjour,

    A l'aide de vue3-sfc-loader il met possible d'ajouter des components.
    J'ai remarqué également qu'il m'était possible de modifier les props

    Cordialement
    le problème avec les idées derrière la tete, c'est que l'on ne peux pas les voir

Discussions similaires

  1. Réponses: 12
    Dernier message: 19/04/2008, 16h19
  2. [VB.NET] Partager un dataset entre 2 windows forms ???
    Par kissskoool dans le forum Windows Forms
    Réponses: 11
    Dernier message: 26/07/2005, 11h34
  3. Partage de fichier entre Linux et Mac
    Par maddog2032 dans le forum Réseau
    Réponses: 3
    Dernier message: 14/04/2005, 08h32
  4. partager un schema entre plusieurs utilisateurs
    Par jrman dans le forum Oracle
    Réponses: 5
    Dernier message: 15/12/2004, 16h53
  5. Réponses: 3
    Dernier message: 30/03/2004, 09h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo