vue2中几种组件传值方法

这篇具有很好参考价值的文章主要介绍了vue2中几种组件传值方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.父子组件传值

父组件在子组件标签中传入fatherMess,在子组件使用$emit,约定子传父事件名,将子组件的数据传递到父组件.通过按钮修改,可以发现,这里的传值是响应式的
步骤:

​ 1.在父组件中给子组件标签添加属性

​ 2.在子组件中使用props接受数据

​ 3.子组件中使用数据,可以直接访问

父组件代码

<template>
    <div class="container">
        <div class="FaS">
            <div class="son">
           		 //将父组件值传入子组件
                <FaS @getSonMess="getSonMess" :fatherMess="fatherMess"></FaS>
            </div>
            <el-button size="mini" @click="FtoS">父传子</el-button>
        </div>
    </div>
</template>
<script>
//引入子组件
import FaS from './components/FaS.vue'
export default {
  //子组件注册
  components: {
    FaS
  },
  data () {
    return {
      fatherMess: 'hallo'
    }
  },
  created () {
  },
  computed: {
  },
  methods: {
    getSonMess (e) {
      this.fatherMess = e
      console.log(e, 'son to father')
    },

    FtoS () {
      this.fatherMess = 'fatherMess'
    }
  }
}
</script>
<style lang='scss'  scoped>
.container {
    width: 100%;
    height: 100vh;
}

.FaS {
    width: 100%;
    height: 200px;
    border: 1px solid black;
    background-color: gray;
    display: flex;
}

.son{
    width: 500px;
    height: 200px;
}
</style>

子组件代码

<template>
    <div class="container">
        {{ this.fatherMess }}//展示来自父组件的数据
        <el-button size="mini" @click="StoF">子传父</el-button>
    </div>
</template>
<script>
export default {
//子组件接收父组件的值
  props: ['fatherMess'],
  data () {
    return {

    }
  },
  created () {
  },
  computed: {
  },
  methods: {
    StoF () {
      this.$emit('getSonMess', 'SonMess')
    }
  }
}
</script>
<style lang='scss'  scoped>
.container {
    width: 100%;
    height: 100% !important;
    background-color: pink;
}
</style>

props的类型校验和默认值

子组件接收父组件的传值,可以在props中用对象的方式对传递的数据进行校验和默认值设置

 props: {
	fatherMess:{
		type:String,//传值必须为字符串类型
		required:true,//fatherMess是必传值
		default:'hallo',//fatherMess如果传递为空,子组件默认接收为'hallo'
		validator(val){//对传入的值进行判断或者处理
			if(vla.length<1){
			//处理逻辑
		}
	}
},

除此之外,ref也可以实现父子双向通讯

父组件

<template>
    <div class="container">
        <div class="FaS">
            <div class="son">
                <FaS ref="son"></FaS>
            </div>
            {{ this.fatherMess }}
            <el-button size="mini" @click="FtoS">父传子</el-button>
        </div>
    </div>
</template>
<script>
import FaS from './components/FaS.vue'
export default {
  components: {
    FaS
  },
  data () {
    return {
      fatherMess: 'hallo'
    }
  },
  created () {
  },
  computed: {
  },
  methods: {
    FtoS () {
      this.$refs.son.mess = '父组件修改子组件的值'
    }
  }
}
</script>

子组件

<template>
    <div class="container">
        {{ this.mess }}
        <el-button size="mini" @click="StoF">子传父</el-button>
    </div>
</template>
<script>
export default {
  data () {
    return {
      mess: 666
    }
  },
  created () {
  },
  computed: {
  },
  methods: {
    StoF () {
      this.$emit('getSonMess', 'SonMess')
      this.$parent.fatherMess = '子组件修改父组件的值'
    }
  }
}
</script>

2.非父子组件传值

$Bus

需要在main.js中单独声明一个Vue实例

Vue.prototype.$Bus = new Vue()

传递

this.$Bus.$emit('mess', 66) // 第一个参数是事件名,第二个值是传递的数据

接收

this.$Bus.$on('mess', e => {
      console.log(e)
    })

注意

//注册的总线事件要在组件销毁时卸载,否则会多次挂载,造成触发一次但多个响应的情况
 beforeDestroy () {
  this.bus.$off('事件名', (e) => {
     console.log(e)
   })
}

3.后代组件传值

provide和inject传值不是响应式的,两种写法变成响应式的文章来源地址https://www.toymoban.com/news/detail-836412.html

箭头函数写法

爷组件
  data () {
    return {
      fatherMess: 'hallo'
    }
  },
  provide () {
    return {
      GtoSMess: () => this.fatherMess
    }
  },
孙组件
 computed: {
    SonMess () {
      return this.GtoSMess()
    }
  },

对象写法

爷组件
data() {
    return {
      obj: {
        name: "是是是"
      }
    }
  },
  provide: function() {
    return {
    // 传递一个对象
      obj: this.obj
    }
  },
孙组件
inject: ['obj'],
computed: {
	// 也可以不用计算属性重新定义
   objName() {
     return this.obj.name
   }
 }

到了这里,关于vue2中几种组件传值方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue父子组件之间传值的方法

    父传子 方式: props 效果: 把父组件的 fatherName 属性传入子组件,在子组件中使用 父组件代码: 子组件代码: 子传父 方式: $emit 效果: 在子组件触发事件,修改父组件的fatherName属性 父组件代码: 子组件代码: 兄弟传值 方式: eventBus.js 效果: 任意组件之间相互传值 代

    2024年02月09日
    浏览(46)
  • vue组件间传值的六种方法

    父组件代码: 子组件代码: 页面显示: 子组件代码: 父组件代码: 页面显示: 父子组件传值原理:父子组件的关系可以总结为 prop 向下传递,事件向上传递。父组件通过 prop 给子组件下发数据,子组件通过事件给父组件发送消息,如下图所示: ref:如果在普通的 DOM 元素

    2024年02月15日
    浏览(50)
  • Vue3中子组件向父组件传值的方法

    父组件可以通过props向子组件传值, 子组件可以用过 emits(‘update:prop’, propValue) 修改父组件绑定在此Prop上父组件的值 本文演示了一个可以缓存分页大小(每页显示几行数据)的分页组件的使用, 它是对el-pagination做了一个简单的封装 如下是一个分页组件 核心: 在换页时通过 emit

    2024年02月16日
    浏览(40)
  • Vue子组件向父组件传值(this.$emit()方法)

    首先必须在父组件中引用子组件,然后实现传值 第一步 在父组件中引入子组件 使用import引入组件 声明 使用 第二步 子组件向父组件传值 1.  在子组件中需要向父组件传值处使用this.$emit(\\\"function\\\",param);    //其中function为父组件定义函数,param为需要传递参数 2.  在父组件中子

    2024年02月10日
    浏览(32)
  • verilog中几种实现计数器的方法

    module counter ( input clk, output reg [3:0] count ); always @(posedge clk) begin if (count == 4’hF) begin count = 4’h0; end else begin count = count + 4’b1; end end endmodule integer      i ; reg [3:0]    counter2 ; initial begin     counter2 = \\\'b0 ;     for (i=0; i=10; i=i+1) begin         #10 ;         counter2 = coun

    2024年02月03日
    浏览(45)
  • vue组件之间的五种传值方法(父子\兄弟\跨组件)

    父传子 (自定义属性 props) 父组件向子组件传参,通过自定义属性的方式进行传参,在子组件中使用prop定义自定义的属性,然后在父组件中通过v-bind指令把需要传递的数据绑定在子组件上,那在子组件中props里面的自定义属性可以直接使用。 子传父 (自定义事件 this.$emit) 子组

    2023年04月08日
    浏览(79)
  • Matlab中几种关于如何求矩阵最大值并返回其行列号的方法

    几种关于如何求矩阵最大值并返回其行列号的方法: %     [r,c]=find(min(dis(:))==dis)%返回dis矩阵最小值的行和列 第一种: clear;clc; A=[0 17 50;-12 40 3;5 -10 2;30 4 3] [C,I]=max(A(:)) [m,n]=ind2sub(size(A),I) 第二种: clear;clc; A=[0 17 50;-12 40 3;5 -10 2;30 4 3] [M,I]=max(A) [N,J]=max(M) [I(J),J] 第三种: clear;

    2023年04月09日
    浏览(54)
  • vue2向springboot传值接收不到

    我们在开发项目时,经常会前后端分离,这样方便开发和测试。但是前后端分离也会导致许多的BUG出现。 这是一段vue2代码: 这是一个常见的axios方法,其作用是进行分页+条件查询。在这个方法中,我们需要向后端传的值有currentPage(当前页码)、pageSize(一页数据条数)和查

    2024年02月13日
    浏览(36)
  • vue3到vue2组件重构方法笔记

    这两天的任务是把一批做好的vue3组件放在vue2项目中使用,将组合式api分散开有一些零散的技巧,所以写一篇转化笔记以供大家参考 先上vue3一个组件的示例代码 上面是其中一个vue3组件样式表,在vue3的项目中展示效果为下图所示: 组件中还有一些其他的功能都要完整保留,

    2024年02月07日
    浏览(45)
  • 前端2023最全面试题(javaScript、typeScript、vue2、vue3、html、css、uniapp、webpack、vite、react)

    答案:JavaScript中的闭包是一种函数,它有权访问其词法环境的变量和其它函数。这意味着,即使其包含它的函数已经执行完毕,其词法环境仍然存在,因此可以访问其作用域内的变量。 答案:回调函数是在某个特定事件之后执行的函数。在JavaScript中,通常使用回调函数来处

    2024年02月06日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包