Maison > interface Web > Questions et réponses frontales > Quelles sont les différentes façons de transmettre des données dans vuejs

Quelles sont les différentes façons de transmettre des données dans vuejs

青灯夜游
Libérer: 2023-01-11 09:22:08
original
1895 Les gens l'ont consulté

Méthode de transmission : 1. Utilisez "props" dans le composant parent pour transférer les données vers le composant enfant ; 2. Le composant enfant utilise "this.$emit("event")" pour transférer les données vers le composant parent ; Utiliser des fichiers communs entre les composants frères Transmettre les données ; 4. Utilisez "ref/refs" pour transmettre les données entre les composants parents et enfants ; 5. Utilisez Vuex pour transmettre les données, etc.

Quelles sont les différentes façons de transmettre des données dans vuejs

L'environnement d'exploitation de ce tutoriel : système Windows 7, vue version 2.9.6, ordinateur DELL G3.

1. Transfert parent-enfant

(1) Liez une propriété sur l'étiquette du composant enfant du composant parent et montez les variables à transmettre

(2) Acceptez les données via des accessoires dans le composant enfant. be Les tableaux peuvent également être des objets, et les données reçues peuvent être directement utilisées props : ["property name"] props : {property name : data type}

Exemple de code :

//父组件
<template>
  <p>
    <i>父组件</i>
    <!--页面使用-->
    <son :data=&#39;name&#39;></son> 
  </p>
</template>

<script>
import son from "./son.vue";//导入父组件
export default {
  components: { son },//注册组件
  name: "父组件",
  data() {
    return {
      name: "Frazier", //父组件定义变量
    };
  },
};
</script>
Copier après la connexion
//子组件
<template>
  <p>{{data}}</p>
</template>

<script>
export default {
components: { },
  name: &#39;子组件&#39;,
  props:["data"],
};
</script>
Copier après la connexion

2.

(1) Personnalisez un événement sur l'étiquette du composant enfant du composant parent, puis appelez la méthode requise

(2) Utilisez this.$emit("event") dans la méthode du composant enfant pour déclencher l'événement défini dans le composant parent. Les données sont

Exemple de code passé sous forme de paramètres :

//父组件
<template>
  <p>
    <i>父组件</i>
    <!--页面使用-->
    <son @lcclick="lcclick"></son>//自定义一个事件
  </p>
</template>

<script>
import son from "./son.vue"; //导入父组件
export default {
  components: { son }, //注册组件
  name: "父组件",
  data() {
    return {};
  },
  methods: {
    lcclick(){
      alert(&#39;子传父&#39;)
    }
  },
};
</script>
Copier après la connexion
//子组件
<template>
  <p>
    <button @click="lcalter">点我</button>
  </p>
</template>

<script>
export default {
components: { },
  name: &#39;子组件&#39;,
  methods: {
    lcalter(){
      this.$emit(&#39;lcclick&#39;)//通过emit来触发事件
    }
  },
};
</script>
Copier après la connexion

3. Communication du composant Brother (bus)

(1) Créez un nouveau fichier Bus.js dans src, puis exportez un instance de vue vide

(2) Introduisez Bus.js du côté qui transmet les données, puis envoyez les événements via Bus. e m i t ("nom de l'événement", "paramètre") Les données sont distribuées par submit ("nom de l'événement", "paramètre). "). , les données sont distribuées à l'aide d'emit("event name", "parameter"), et les données sont transmises sous forme de paramètres d'emit()
(3) Introduisez Bus.js du côté qui accepte les données puis utilisez Bus.$ on("event name", (data) =>{data is the accept data})

Exemple d'image :

Quelles sont les différentes façons de transmettre des données dans vuejs

Quelles sont les différentes façons de transmettre des données dans vuejs

Quelles sont les différentes façons de transmettre des données dans vuejs

IV.ref/ refs (communication de composant parent-enfant)

(1) Si ref est utilisé sur un élément DOM normal, la référence pointe vers l'élément DOM ; si elle est utilisée sur un sous-composant, la référence pointe vers l'instance du composant

(2. ) Vous pouvez appeler directement la méthode du composant ou accéder aux données via l'instance. Cela peut également être considéré comme un moyen pour les composants enfants de transférer des valeurs aux composants parents

Exemple de code :

//父组件
<template>
  <p>
    <button @click="sayHello">sayHello</button>
    <child ref="childForRef"></child>
  </p>
</template>
<script>
import child from &#39;./child.vue&#39;
  export default {
    components: { child },
    data () {
      return {
        childForRef: null,
      }
    },
    mounted() {
      this.childForRef = this.$refs.childForRef;
      console.log(this.childForRef.name);
    },
    methods: {
      sayHello() {
        this.childForRef.sayHello()
      }
    }
  }
</script>
Copier après la connexion
//子组件
<template>
  <p>child 的内容</p>
</template>
<script>
export default {
  data () {
    return {
      name: &#39;我是 child&#39;,
    }
  },
  methods: {
    sayHello () {
      console.log(&#39;hello&#39;);
      alert(&#39;hello&#39;);
    }
  }
}
</script>
Copier après la connexion

5. Les composants de communication Vuex sont répartis vers les actions via la répartition, les actions sont des opérations asynchrones, puis s'engager dans les mutations dans les actions, et les mutations puis passer L'opération logique change l'état, le synchronisant ainsi avec le composant et mettant à jour son statut de données

Exemple de code :

//父组件
template>
  <p id="app">
    <ChildA/>
    <ChildB/>
  </p>
</template>
<script>
  import ChildA from &#39;./ChildA&#39; // 导入A组件
  import ChildB from &#39;./ChildB&#39; // 导入B组件
  export default {
    components: {ChildA, ChildB} // 注册组件
  }
</script>
Copier après la connexion
//子组件A
<template>
 <p id="childA">
   <h1>我是A组件</h1>
   <button @click="transform">点我让B组件接收到数据</button>
   <p>因为点了B,所以信息发生了变化:{{BMessage}}</p>
 </p>
</template>
<script>
 export default {
   data() {
     return {
       AMessage: &#39;Hello,B组件,我是A组件&#39;
     }
   },
   computed: {
     BMessage() {
       // 这里存储从store里获取的B组件的数据
       return this.$store.state.BMsg
     }
   },
   methods: {
     transform() {
       // 触发receiveAMsg,将A组件的数据存放到store里去
       this.$store.commit(&#39;receiveAMsg&#39;, {
         AMsg: this.AMessage
       })
     }
   }
 }
</script>
Copier après la connexion
//子组件B
<template>
 <p id="childB">
   <h1>我是B组件</h1>
   <button @click="transform">点我让A组件接收到数据</button>
   <p>点了A,我的信息发生了变化:{{AMessage}}</p>
 </p>
</template>

<script>
 export default {
   data() {
     return {
       BMessage: &#39;Hello,A组件,我是B组件&#39;
     }
   },
   computed: {
     AMessage() {
       // 这里存储从store里获取的A组件的数据
       return this.$store.state.AMsg
     }
   },
   methods: {
     transform() {
       // 触发receiveBMsg,将B组件的数据存放到store里去
       this.$store.commit(&#39;receiveBMsg&#39;, {
         BMsg: this.BMessage
       })
     }
   }
 }
</script>
Copier après la connexion
//vuex
import Vue from &#39;vue&#39;
 import Vuex from &#39;vuex&#39;
 Vue.use(Vuex)
 const state = {
   AMsg: &#39;&#39;,
   BMsg: &#39;&#39;
 }
 
 const mutations = {
   receiveAMsg(state, payload) {
     // 将A组件的数据存放于state
     state.AMsg = payload.AMsg
   },
   receiveBMsg(state, payload) {
     // 将B组件的数据存放于state
     state.BMsg = payload.BMsg
   }
 }
 
 export default new Vuex.Store({
   state,
   mutations
 })
Copier après la connexion
6.$parent

Vous pouvez obtenir. l'instance du composant parent via parent, puis vous pouvez accéder aux propriétés et propriétés du composant parent via cette méthode d'instance, il a également un parent frère qui peut obtenir l'instance du composant parent, puis vous pouvez accéder aux propriétés et méthodes de. le composant parent via cette instance. Il a également un parent frère qui peut obtenir l'instance du composant parent, puis vous pouvez accéder aux propriétés du composant parent via cette instance. Il a également une racine frère, qui peut obtenir la racine. instance de composant.

Exemple de code :

// 获父组件的数据
this.$parent.foo

// 写入父组件的数据
this.$parent.foo = 2

// 访问父组件的计算属性
this.$parent.bar

// 调用父组件的方法
this.$parent.baz()

//在子组件传给父组件例子中,可以使用this.$parent.getNum(100)传值给父组件。
Copier après la connexion
7.sessionStorage value transmission

sessionStorage est un objet global du navigateur, et les données qui y sont stockées seront effacées à la fermeture de la page. Grâce à cette fonctionnalité, nous pouvons partager une copie des données sur toutes les pages.

Exemple de code :

// 保存数据到 sessionStorage
sessionStorage.setItem(&#39;key&#39;, &#39;value&#39;);

// 从 sessionStorage 获取数据
let data = sessionStorage.getItem(&#39;key&#39;);

// 从 sessionStorage 删除保存的数据
sessionStorage.removeItem(&#39;key&#39;);

// 从 sessionStorage 删除所有保存的数据
sessionStorage.clear();
Copier après la connexion
Remarque : il stocke des paires clé-valeur, qui ne peuvent être que des types de chaîne. Si vous souhaitez stocker des objets, vous devez utiliser let objStr = JSON.stringify(obj) pour les convertir en. chaînes puis Storage (lorsqu'il est utilisé, laissez obj = JSON.parse(objStr) l'analyser en un objet).

Recommandez une bibliothèque good-storage, qui encapsule sessionStorage, et vous pouvez directement utiliser son API pour stocker des objets

//localStorage
 storage.set(key,val) 
 storage.get(key, def)
//sessionStorage
 storage.session.set(key, val)
 storage.session.get(key, val)
Copier après la connexion

8 Transfert de valeur de routage

Utilisez un point d'interrogation pour transférer la valeur

Utilisez-le lorsque la page A passe à la page A. page B. router.p u s h ( ' / B ? n a m e = d a n s e e k ' ) La page B peut utiliser ceci router.push('/B?name=danseek') La page B peut utiliser this.router.push('/B?name =danseek' )La page B peut utiliser this.route.query.name pour obtenir la valeur transmise par la page A

Veuillez noter la différence entre le routeur et la route ci-dessus

Utilisez deux points pour transmettre la valeur

Configurez la route suivante :

{
    path: &#39;/b/:name&#39;,
    name: &#39;b&#39;,
    component: () => import( &#39;../views/B.vue&#39;)
 },
Copier après la connexion

Sur la page B Vous pouvez obtenir la valeur du nom transmis par la route via this.$route.params.name

Utilisez le composant parent-enfant pour transmettre la valeur

Puisque la vue du routeur elle-même est également une composant, nous pouvons également utiliser le composant parent-enfant pour transmettre la valeur, puis ajouter des accessoires à la sous-page correspondante. Étant donné que la route n'est pas actualisée après la mise à jour du type, vous ne pouvez pas obtenir directement la dernière valeur de type dans le hook monté de. la sous-page, vous devez plutôt utiliser watch

.
<router-view :type="type"></router-view>

// 子页面
props: [&#39;type&#39;]
watch: {
       type(){
           // console.log("在这个方法可以时刻获取最新的数据:type=",this.type)
       },
},
Copier après la connexion

九.祖传孙 $attrs

正常情况下需要借助父亲的props作为中间过渡,但是这样在父亲组件就会多了一些跟父组件业务无关的属性,耦合度高,借助$attrs可以简化些,而且祖跟孙都无需做修改

祖组件:

<template>
    <section>
        <parent name="grandParent" sex="男" age="88" hobby="code" @sayKnow="sayKnow"></parent>
    </section>
</template>

<script>
    import Parent from &#39;./Parent&#39;
    export default {
        name: "GrandParent",
        components: {
          Parent
        },
        data() {
            return {}
        },
        methods: {
          sayKnow(val){
            console.log(val)
          }
        },
        mounted() {
        }
    }
</script>
Copier après la connexion

父组件

<template>
  <section>
    <p>父组件收到</p>
    <p>祖父的名字:{{name}}</p>
    <children v-bind="$attrs" v-on="$listeners"></children>
  </section>
</template>

<script>
  import Children from &#39;./Children&#39;

  export default {
    name: "Parent",
    components: {
      Children
    },
    // 父组件接收了name,所以name值是不会传到子组件的
    props:[&#39;name&#39;],
    data() {
      return {}
    },
    methods: {},
    mounted() {
    }
  }
</script>
Copier après la connexion

子组件

<template>
  <section>
    <p>子组件收到</p>
    <p>祖父的名字:{{name}}</p>
    <p>祖父的性别:{{sex}}</p>
    <p>祖父的年龄:{{age}}</p>
    <p>祖父的爱好:{{hobby}}</p>

    <button @click="sayKnow">我知道啦</button>
  </section>
</template>

<script>
  export default {
    name: "Children",
    components: {},
    // 由于父组件已经接收了name属性,所以name不会传到子组件了
    props:[&#39;sex&#39;,&#39;age&#39;,&#39;hobby&#39;,&#39;name&#39;],
    data() {
      return {}
    },
    methods: {
      sayKnow(){
        this.$emit(&#39;sayKnow&#39;,&#39;我知道啦&#39;)
      }
    },
    mounted() {
    }
  }
</script>
Copier après la connexion

十.孙传祖使用$listeners

文字内容同第九个

祖组件

<template>
  <p id="app">
    <children-one @eventOne="eventOne"></children-one>
    {{ msg }}
  </p>
</template>
<script>
import ChildrenOne from &#39;../src/components/children.vue&#39;
export default {
  name: &#39;App&#39;,
  components: {
    ChildrenOne,
  },
  data() {
    return {
      msg: &#39;&#39;
    }
  },
  methods: {
    eventOne(value) {
      this.msg = value
    }
  }
}
</script>
Copier après la connexion

父组件

<template>
  <p>
    <children-two v-on="$listeners"></children-two>
  </p>
</template>

<script>
import ChildrenTwo from &#39;./childrenTwo.vue&#39;

export default {
  name: &#39;childrenOne&#39;,
  components: {
    ChildrenTwo
  }
}
</script>
Copier après la connexion

子组件

<template>
  <p>
    <button @click="setMsg">点击传给祖父</button>
  </p>
</template>

<script>
export default {
  name: &#39;children&#39;,
  methods: {
    setMsg() {
      this.$emit(&#39;eventOne&#39;, &#39;123&#39;)
    }
  }
}
</script>
Copier après la connexion

十一.promise传参

promise 中 resolve 如何传递多个参数

//类似与这样使用,但实际上后面两个参数无法获取
promise = new Promise((resolve,reject)=>{
    let a = 1
    let b = 2
    let c = 3
    resolve(a,b,c) 
})
promise.then((a,b,c)=>{
    console.log(a,b,c)
})
Copier après la connexion

resolve() 只能接受并处理一个参数,多余的参数会被忽略掉。

如果想多个用数组,或者对象方式。。

数组

promise = new Promise((resolve,reject)=>{
    resolve([1,2,3]) 
})
promise.then((arr)=>{
    console.log(arr[0],arr[1],arr[2])
})
Copier après la connexion

对象

promise = new Promise((resolve,reject)=>{
    resolve({a:1,b:2,c:3}) 
})
promise.then(obj=>{
    console.log(obj.a,obj.b,obj.c)
})
Copier après la connexion

十二.全局变量

定义一个全局变量,在有值的组件直接赋值,在需要的组件内直接使用就可以了,具体的话看我这篇博客就可以,
博客链接点击就好 全局变量 篇

到此这篇关于vue传值方式的十二种方法总结的文章就介绍到这了,更多相关vue传值方式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关推荐:《vue.js教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal