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
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 36
    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.

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    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

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 36
    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

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