vue组件传值有哪些?

本文详细介绍了Vue中12种组件间通信的方式,包括父子组件传值、eventBus、子传父、localStorage和sessionStorage、全局变量、$refs、$parent/$child、路由传值、Vuex以及Promise。讲解了每种方式的操作流程和应用场景。
摘要由CSDN通过智能技术生成

1:父子组件传值:

操作流程:

在父组件内的子组件上绑定一个自定义属性和变量;

<template>
    <div class="parent">
        <!-- 父组件 -->
        <List :parents="flag"></List>
    </div>
</template>
<script>
//引入组件
import List from '@/components/List.vue'
export default {
   
    name:'Parent',
    components:{
   List},//注册子组件
    data(){
   
        return{
   
            flag:12// 先给父组件的属性赋值一个默认值
        }
    }
}
</script>

在子组件内需要用props接收参数,然而接收参数的类型可写为:

props:["parents"];//数组类型
props:{
   "parents": Number};//对象形式声明当前传的值和类型

最后在dom内用差值表达式进行渲染数据:

<template>
   <div class="list">
       <!-- 子组件 -->
        <p>{
   {
   parents}}</p>
   </div>
</template>

2:eventBus/(兄弟组件)传值:

介绍:

eventBus又称为”事件总线",它是一种沟通的桥梁。桥梁的两端通过事件总线可以进行交互,传播数据。

操作流程:
  • 首先,我们需要在当前项目src文件下创建一个Bus.js文件,导出一个空实例;
import Vue from "vue"
export default new Vue({
   });
  • 然后,在传输的一方,导入Bus.js文件,在当前组件的方法中用Bus.$emit(“传递连通方法名”,参数)进行传参;
<template>
    <div class="elderBrother">
        <button @click="transmit">传输</button>
    </div>
</template>

<script>
//传输方引入Bus.js
import Bus from '../Bus'
export default {
   
    name:'ElderBrother',
    data(){
   
        return{
   
            name:"张三" //声明name赋值为一个随便的名称
        }
    },
    methods:{
   
        transmit(){
   
            Bus.$emit("connect",this.name)
            console.log(this.name);//传输的参数
        }
    }
}
</script>
  • 再然后,在接收的一方,导入Bus.js文件,在当前组件的方法中用Bus.$on(“传递联通的方法名”,(data)=>{//回调返回的参数信息})
<template>
    <div class="littleBrother">
        <span>{
   {
   value}}</span>
    </div>
</template>

<script>
//接收方引入Bus.js
import Bus from '../Bus'
export default {
   
    name:'LittleBrother',
    data(){
   
        return{
   
            value:''
        }
    },
    mounted(){
   
        Bus.$on("connect",(data)=>{
   
            console.log(data);
            this.value = data; //赋值传输的数据
        })
    }
}
</script>
  • 最后需要我们在dom内渲染传输的数据即可。

3:子传父组件传值:

操作流程:
  • 首先在父组件中把子组件导入进去并注册;
  • 在子组件写一个点击触发事件,和需要传递的值,在事件方法上以this.$emit(“传递方法”,需要传的值);
<template>
    <div class="person">
        <!-- 子组件区域 -->
        <button @click="like">子传事件</button>
    </div>
</template>

<script>
export default {
   
    name:'Person',
    data(){
   
        return{
   
            title:"李四"
        }
    },
    methods:{
   
        like(){
   
            // this.title 是子组件传输的值
            this.$emit("pass",this.title)
            console.log(this.title);
        }
    }
}
</script>
  • 在父组件上的子组件标签上需要定义一个子组件传递的方法和事件名,把子组件传的值当作父组件事件的实参,进行渲染;
<template>
    <div class="parent">
        <!-- 父组件区域 -->
        <p>{
   {
   name}}</p>
        <Person @pass="submit"></Person>
    </div>
</template>

<script>
import Person from '@/views/Person.vue'
export default {
   
    name:'Parent',
    components:{
   Person},
    props:[],
    data(){
   
        return{
   
            // 先给父组件的属性赋值一个默认值为空
            name:"",
        }
    },
    methods:{
   
        submit(data){
   
            this.name = data;
            console.log(this.name);
        }
    }
}
</script>
4:localStorage传值:
介绍:
localStorage 它是持久化的本地储存,除了我们手动删除,否则存入后依然存在;
操作流程:
  • 首先用JSON.stringify 就是把对象的类型转换为字符串类型 ,利用setItem()设置一个指针,存入到localStorage中:
<template>
    <div class="first">
        <!-- 组件一 -->
        <button @click="submit">提交数据</button>
    </div>
</template>

<script>
export default {
   
    name:'One',
    data(){
   
        return{
   
            list:[
                {
   "id":10,"name":"张三","age":18,"height":1.8},
                {
   "id":11,"name":"李四","age":28,"height":1.5},
                {
   "id":12,"name":"马武","age":38,"height":1.2},
                {
   "id":13,"name":"黑旋风","age":
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值