Vue组件之间的数据共享

学习目标:
1、Vue组件的数据共享
2、Vue中 ref 的 引用

Vue组件之间的数据共享

1、组件之间的关系

  • 父子关系
  • 兄弟关系

2、父组件向子组件传值

父组件向子组件传值 使用自定义属性;

2-1、父组件绑定属性,提供数据
Left.vue

<template>
<div class="left">
  <p>我是Left组件</p>
  <MyCount :msg = "message"></MyCount>
</div>
</template>

<script>
export default {
name: "Left",
  data(){
  return {
    message:'床前明月光'
  }
  }
}
</script>

2-2、子组件通过props自定义属性接收数据
Count.vue

<template>
<div class="count">
  <p>count的值是:{{count}}</p>
  <p>Left父组件向count子组件传的值:{{msg}}</p>
  <button @click="add">+1</button>
</div>
</template>

<script>
export default {
  name: "Count",
  props:{
    init:{
      default:66
    },
    msg:{
      type:String
    }
  },
  data(){
  return{
    count:this.init
  }
  },
  methods:{
  add(){
    this.count +=1;
  }
  }
}
</script>

<style scoped>

</style>

3、子组件向父组件传值

子组件向传值 父组件使用自定义事件;

this.$emit('change',this,count)

this.$emit()方法的参数:

  • 第一个参数是 自定义事件名字
  • 第二个参数是 要传的新值

子组件 right.vue

<template>
<div class="right">
  <p>
    我是right组件
  </p>
  <button @click="addNum">+1</button>
  <p>number的值:{{number}}</p>
</div>
</template>

<script>
export default {
  name: "Right",
  data(){
    return {
    number:5
    }

  },
  methods:{
    addNum(){
      this.number+=1;
      this.$emit('change',this.number)
    }

  }
}
</script>

父组件接收数据

<Right @change="changeNumber"></Right>
  methods:{
    changeNumber(){
      console.log('555555555')
    }
  }

</script>

4、兄弟组件之间传值

兄弟组件之间传值 eventbus 方案;

1、创建 eventbus.js
import  Vue from 'vue';
export default new Vue();

2、兄弟组件数据发送方
<button @click="share">点击把数据发送给right.vue</button>


<script>
import bus from '../assets/eventBus';
export default {
name: "Left",
  data(){
  return {
    brother:'张永盛'
  }
  },
  methods:{
  share() {
    bus.$emit('share',this.brother)
  }
  }
}
</script>

3、兄弟组件数据接收方
<p>Left组件发送给right组件的数据:{{str}}</p>


<script>
import bus from '../assets/eventBus';
export default {
  name: "Right",
  data(){
    return {
      str:''
    }

  },
  created() {
    bus.$on('share',(val)=>{
     this.str = val;
    })
  },

兄弟组件传值:
1、创建eventBus.js,向外共享一个Vue实例对象;
2、数据发送方通过调用 bus.$emit(‘事件名称’,要发送的数据) 方法 触发自定义事件发送数据;

3、数据接收方通过调用 bus.$on(‘事件名称’,事件处理函数) 方法注册一个 自定义事件接收数据

ref 的引用

什么是 ref 引用?
ref 引用是指在不依赖jQuery的情况下,获取 DOM元素或组件的引用;

每一个Vue实例上,都包含一个 $ref 对象,里面储存着DOM元素或组件的引用;   
默认情况下,$ref 是一个空对象;
1、使用 ref 引用DOM

步骤一:
给要获取的元素添加ref;

 <p ref="p1">   我是right组件  </p>

步骤二:
//通过 this.$refs.p1可以操作DOM

 this.$refs.p1.style.color = 'red';
2、使用 ref 引用组件实例

步骤一:给组件添加ref属性

<Left ref = 'comLeft'></Left>

步骤二:
//通过 this.$refs.comLeft 可以操作组件中的数据

this.$refs.comLeft.message = "message的值被替换了!!!!"
thix.$nextTick(cb) 方法

thix.$nextTick(cb) 方法,会等DOM的组件更新完之后,再执行cb回调函数;从而保证cb回调函数可以操作到最新的DOM;

this.$nextTick(
()=>{
this.$refs.inputRef.focus();
}
)

错误
TypeError: Cannot read properties of undefined (reading ‘focus’)
指的是 focus 前的内容没有定义;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值