• 全国 [切换]
  • 二维码
    爱农网

    手机WAP版

    手机也能找商机,信息同步6大终端平台!

    微信小程序

    微信公众号

    当前位置: 首页 » 行业新闻 » 热点新闻 » 正文

    vue组件的五种传值方法(父子\兄弟\跨组件)

    放大字体  缩小字体 发布日期:2020-01-14 15:24:38   浏览次数:1206  发布人:20ac****  IP:120.244.80.***  评论:0
    导读

    一、props/$emit父子组件传值: 父传子 (自定义属性 props) 父组件向子组件传参,通过自定义属性的方式进行传参,在子组件中使用prop定义自定义的属性,然后在父组件中通过v-bind指令把需要传递的数据绑定在子组件上,那在子组件中props里面的自定义属性可以直接使用。 //父组件代码 渲染子组件 <Son :name="name" />// 子组件代码,接受父参数 expo

    一、props/$emit父子组件传值:

    父传子 (自定义属性 props)

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

    //父组件代码 渲染子组件 <Son :name="name" /> // 子组件代码,接受父参数 export default { props: { name:{ type:String, default:"我是默认字符串"//定义参数默认值 required:false//定义参数是否必须值 } } }

    子传父 (自定义事件 this.$emit)

    子组件向父组件传数据使用自定义事件, vue 组件提供了一个emit(‘自定义事件名’, 传递的数据) ),子组件传递数据时,触发响应的事件函数,就会自动触发通过$emit给父组件绑定的自定义事件,自定义事件接受一个参数,参数就是子组件传递过来的数据。

    // 父组件代码,渲染子组件 <Son @setValue="valueFn" /> export default{ method:{ valueFn(value) {} } } // 子组件代码 this.$emit('setValue', this.say)

    二、ref与parent/children父子组件传值:

    父传子

    //父组件 <Home ref="home"></Home> <button @click="toValue">点击</button> methods:{ toValue(){ this.msg = "这是父组件的值"; this.$refs.home.setMsg(this.msg); } } //子组件 <div class="home"> {{msg}} </div> methods:{ setMsg(val){ this.msg = val; } }

    子传父(如果子组件是公共组件,需判断父组件是否具有该方法)

    //父组件 <Home ref="home"></Home> methods:{ toValue(val){ this.msg = val } } //子组件 <div class="home"> <button @click="setMsg">点击</button> </div> methods:{ setMsg(val){ this.$parent.toValue(this.msg); } }

    三、兄弟之间传参

    兄弟组件之间的数据传递,通过eventBus来做中间的桥梁,传输方通过中间组件调用 emit 传数据,接收方通过on 接受数据,两者之间的自定义属性名保持一致。

    // 传输方组件调用方式 import Bus from '@/EventBus.js' Bus.$emit('pass-value', this.say); // 接收方接受参数 import Bus from '@/EventBus.js' created() { Bus.$on('pass-value', val => { this.sibilingValue = val; }) }

    四 $attrs/$listeners隔代组件传值(爷孙组件参数互传)

    • $attrs
      1.包含了父作用域中不被 prop 所识别 (且获取) 的特性绑定 (class 和 style 除外);
      2.当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定 (class 和 style 除外),并且可以通过 v-bind=“$attrs” 传入内部组件。通常配合 interitAttrs 选项一起使用。
    • $listeners
      1.包含了父作用域中的 (不含 .native 修饰器的) v-on 事件监听器。
      2.它可以通过 v-on=“$listeners” 传入内部组件。
    • 简单来说:$attrs 与$listeners是两个对象,$attrs 里存放的是父组件中绑定的非 Props 属性,$listeners 里存放的是父组件中绑定的非原生事件。

    爷传孙($attrs)

    //爷组件 <div id="app"> <Home :msg="msg"></Home> </div> //父组件(父组件的操作最简单,但不做就会传不过去) <div class="home"> <Sun v-bind="$attrs"></Sun> </div> //孙组件 <div class="sun"> {{ msg }} </div> //props直接接受 props:{ msg:String, }

    孙传爷($listeners)

    //爷组件 <div id="app"> <Home @setVal="setVal">></Home> </div> methods:{ setVal(val){ this.msg = val; } } //父组件(父组件的操作最简单,但不做就会传不过去) <div class="home"> <Sun v-on="$listeners"></Sun> </div> //孙组件 <div class="sun"> <button @click="toVal">点我</button> </div> methods:{ toVal(){ this.$emit("setVal",this.msg) } }

    五、通过Vuex数据共享

    通过Vuex存储数据, Vuex是一个专为vue.js 应用程序开发的状态管理模式, 它采用集中式存储管理数据,以相应的规则保证状态以一种可预测的方式发生改变, 一变全变,同步更新数据。

    // 注册代码 const store = new Vue.Store({ state:{ count: 100 }, mutations: { addCount(state, val = 1) { state.count += val; }, subCount(state, val = 1) { state.count -= val; } } }) // 组件调用 this.$store.commit('addCount'); // 加 1 this.$store.commit('subCount'); // 减 1

    不推荐电脑端访问(用户少)
    请微信扫一扫,查看完整信息(记得微信收藏)
     
    (文/匿名(若涉版权问题请联系我们核实发布者) / 非法信息举报 / 删稿)
    打赏
    免责声明
    • 
    本文为昵称为 20ac**** 发布的作品,本文仅代表发布者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,发布者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们154208694@qq.com删除,我们积极做(权利人与发布者之间的调停者)中立处理。郑重说明:不 违规举报 视为放弃权利,本站不承担任何责任!
    有个别老鼠屎以营利为目的遇到侵权情况但不联系本站或自己发布违规信息然后直接向本站索取高额赔偿等情况,本站一概以诈骗报警处理,曾经有1例诈骗分子已经绳之以法,本站本着公平公正的原则,若遇 违规举报 我们100%在3个工作日内处理!
    0 条相关评论
     

    (c)2008-现在 ikai.naodi.com All Rights Reserved.