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 :

Vue 3 Mutualisation d'actions de type watch


Sujet :

VueJS

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2023
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2023
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Vue 3 Mutualisation d'actions de type watch
    Bonjour,
    Je migre une application de vue2 à vue3.
    J'ai un composant qui porte des fonctions de type watch sur différentes variables : lang, route.query, ...

    Ce composant est utilisé par 4 ou 5 pages vue qui vont afficher chacune des éléments spécifiques.

    J'utilise la composition API.
    J'ai essayer via extends, mais sans succès.

    Mon composant partagé est structuré comme suit
    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
    export default defineComponent({
    Name : "Base",
    Setup() {
         const languageStateStr = computed (() => getLocale(i18n as I18n)); 
          const routeQueryLang = computed (() => route.query.lang)
     
    const onLanguageChanged = () => { console.log("onLanguageChanged") }
     
       watch(routeQueryLang, onLanguageChanged, {immediate: true});
       watch(languageStateStr,onLanguageChanged);
     
     return { languageStateStr, 
                   routeQueryLang, 
                   onLanguageChanged
    };
     }
     });
    Je voudrais utiliser ce composant dans un composant du type
    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
    import { defineComponent } from "vue";
    import Base from "./base";
     
    export default defineComponent({
      name: "Rules",
      components: {
        Page,
        Rulebooks,
      },
      setup() {
        console.log("Rules: setup");
        const selectedType = MenuItemType.RULES;
     
        return {
          selectedType,
        };
      },
    });
    Comment peut-on faire pour avoir cette mutualisation ?

    Merci pour vos idées !

  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,

    je pense que ce que tu cherches à faire est expliqué ici https://vuejs.org/guide/reusability/composables.html

    dans ton cas, tu cherches probablement à faire quelque chose comme

    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
     
    // useBase.js
     
    export default function useBase() {
       const languageStateStr = computed (() => getLocale(i18n)); 
       const routeQueryLang = computed (() => route.query.lang)
     
       const onLanguageChanged = () => { console.log("onLanguageChanged") }
     
       watch(routeQueryLang, onLanguageChanged, {immediate: true});
       watch(languageStateStr, onLanguageChanged);
     
       return {
         languageStateStr, 
         routeQueryLang, 
      };
    }
    et dans tes composants qui en ont besoin
    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
     
    // Rules.vue
     
    import { defineComponent } from "vue";
    import useBase from "./useBase";
     
    export default defineComponent({
      name: "Rules",
      components: {
        Page,
        Rulebooks,
      },
      setup() {
        console.log("Rules: setup");
        const selectedType = MenuItemType.RULES;
     
        const {
          languageStateStr,
          routeQueryLang,
        } = useBase();
     
        return {
          languageStateStr,
          routeQueryLang,
          selectedType,
        };
      },
    });
    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

Discussions similaires

  1. [Débutant] Mutualiser les actions sur plusieurs Richtextbox
    Par IL-MAFIOSO dans le forum VB.NET
    Réponses: 14
    Dernier message: 01/02/2017, 14h45
  2. Action Bar type application LeMonde
    Par xavier1936 dans le forum Android
    Réponses: 2
    Dernier message: 10/04/2013, 14h38
  3. Deux classes action dans type.
    Par feldene dans le forum Struts 1
    Réponses: 1
    Dernier message: 21/04/2010, 15h32
  4. Vue et transaction : quelle type de table ?
    Par titoff002 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 08/09/2005, 17h12
  5. action reaction avec champs type="text"
    Par ericmart dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 13/04/2005, 17h00

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