vue2.0传值

父传子
props
provide和inject

必须是两个存在关系的组件,不能在两个毫无关系的两个组件中传值,只能跨层级传值。
相关文章链接: 文章.

$attrs

例:
父组件中在这里插入图片描述
子组件中,如果没有在props中接收,那么就会在this.$attrs中,如果接收了的话就不会在this. $attrs
中,如下图所示
在这里插入图片描述
在这里插入图片描述

$listeners(传的是一个方法,可直接改变父组件中的值)

可以在子组件中自定义事件,在子组件没有分发事件的前提下,如下图所示

父组件中:
在这里插入图片描述
在这里插入图片描述

子组件中:
原理:调用this. $listeners.send传进去一个值,会传到父组件中send方法中,然后进行改变数据的操作
在这里插入图片描述
在这里插入图片描述

.sync(可直接改变父组件中的值)

需要在子组件中通过this. $emit分发事件方式第一个参数为事件名字,必须叫‘update:要修改的属性名’,第二个参数为修改的值
在这里插入图片描述

$parent(可直接改变父组件中的值)

子组件:

 click(){
    this.$parent.name='改变之后的值'  //parent后面跟传的值
}
子传父
1.ref(可直接修改子组件值)
<child  ref="child ></child>


 click(){
   console.log(this.$refs.child) 
}
2.this.$children (得到的为数组)(可直接修改子组件值)
3.$emit(分发事件形式)
4.通过插槽方式传给父组件

知识1 -----不给名字不给属性为匿名插槽,可以在父组件中直接写内容(不用template情况下),当插槽没有名字时候,在父组件中用的时候名字默认为default(使用template情况下)在这里插入图片描述
知识2 ----插槽不会在页面上生成实际的标签,需要在slot中使用标签包起来
知识3 ----如果想获得作用域插槽this.$scopedSlots.red() >>>用于封装组件

子组件中:(以作用于插槽为例)

在这里插入图片描述
父组件中:
在这里插入图片描述

$bus(两个组件中传值)

原理:利用创建一个空的Vue实例
在src文件下建立一个bus文件,然后在其下面创建一个index.js,index.js内容如下

 import Vue from 'vue'
 const bus = new Vue()
 Vue.prototype.$bus=bus

然后在main.js中

import './bus'

使用(传):

click(){
this.$bus.$emit('send',this.name) //第一个为事件名,第二个参数为要传的数据
}

使用(接收):

this.$bus.$on('send',data=>{
    console.log(data)
})
vuex
通过app.vue分发

在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Vue 2.0 中父子组件之间的传值可以通过属性(prop)和事件(event)实现。 1. 属性(prop)递值 父组件通过在子组件上定义prop属性,指定要递的值类型和字,然后将值递给子组件的prop属性。子组件通过props接收到父组件递的值,可以直接使用。 例如:父组件中定义一个为message的prop属性,值为字符串类型,在模板中通过子组件标签向子组件递值。 ``` // 父组件 <template> <div> <child-component :message="hello"></child-component> </div> </template> <script> import ChildComponent from './child-component.vue' export default { components: { ChildComponent }, data () { return { hello: 'hello, world' } } } </script> // 子组件 <template> <div>{{ message }}</div> </template> <script> export default { props: { message: { type: String, require: true } } } </script> ``` 2. 事件(event)递值 父组件通过定义一个事件,在子组件中触发该事件并递需要递的值。子组件在父组件中使用子组件自定义的事件,并获取到递的值。 例如:子组件定义一个自定义事件,触发时递一个字符串类型的值。父组件中使用子组件,同时监听子组件的自定义事件,在事件回调函数中获取到子组件递的值。 ``` // 子组件 <template> <button @click="changeMessage()">改变消息</button> </template> <script> export default { methods: { changeMessage () { this.$emit('change', '新消息') } } } </script> // 父组件 <template> <div> <child-component @change="handleChange"></child-component> <div>{{ message }}</div> </div> </template> <script> import ChildComponent from './child-component.vue' export default { components: { ChildComponent }, data () { return { message: '旧消息' } }, methods: { handleChange (newValue) { this.message = newValue } } } </script> ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值