问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

vue父组件与子组件之间的传值

发布网友 发布时间:2022-10-16 07:31

我来回答

2个回答

懂视网 时间:2023-01-23 19:40

vue父组件怎么向子组件传递数据呢?不知道的小伙伴来看看小编今天的分享吧!

vue父组件向子组件传递数据的方法有四种:props和event、ref、provide和inject、vuex。

1、props和event

父组件向子组件传递props数据,子组件通过触发事件向父组件回传数据,代码如下:

//子组件 

<template>

<div @click="changeName('YYY')">{{name}}</div>

</template>

<script>

export default{

props:['name'],//or props:{name:{type:String,default:''}}

methods:{

//不能在子组件修改props数据,应触发事件让父组件处理

changeName(newName){

this.$emit('changeName',newName)

}

}

}

</script>

//父组件

<template>

<div>

<child-comp :name="name" @changeName="changeName"></child-comp>

</div>

</template>

<script>

import childComp from 'path'

export default{

data(){

return {name:'XXX'}

},

components:{

childComp

},

methods:{

changeName(newName){

this.name = newName;

}

}

}

</scritp>

以上就是一个完整的流程,父组件通过props将数据传递给子组件,子组件则触发事件,由父组件监听,并做相应处理。

2、ref

ref属性可定义在子组件或原生DOM上,如果在子组件上,则指向子组件实例,如果在原生DOM上,则指向原生DOM元素(可以用做元素选择,省去querySelector的烦恼)。

传递数据的思路:在父组件内通过ref获取子组件实例,然后调用子组件方法,并传递相关数据作为参数。代码如下:

//子组件 

<template>

<div>{{parentMsg}}</div>

</template>

<script>

export default{

data(){

return {

parentMsg:''

}

},

methods:{

getMsg(msg){

this.parentMsg = msg;

}

}

}

</script>

//父组件

<template>

<div>

<child-comp ref="child"></child-comp>

<button @click="sendMsg">SEND MESSAGE</button>

</div>

</template>

<script>

import childComp from 'path'

export default{

components:{

childComp

},

methods:{

sendMsg(){

this.$refs.child.getMsg('Parent Message');

}

}

}

</scritp>

3、provide和inject 

官方不推荐在生产环境使用

provide意为提供,当一个组件通过provide提供了一个数据,那么它的子孙组件就可以使用inject接受注入,从而可以使用祖先组件传递过来的数据。代码如下:

//child

<template>

<div>{{appName}}</div>

</template>

<script>

export default{

inject:['appName']

}

</script>

// root 

export default{

data(){

return {

appName:'Test'

}

},

provide:['appName']

}

4、vuex

vue官方推荐的全局状态管理插件。

以上就是小编今天的分享了,希望可以帮助到大家。


热心网友 时间:2023-01-23 16:48

好好生活 -- 即将拥有八块腹肌的程序员

1.父子组件的传值

        父传子通过props传递,子传父通过$emit

        还有兄弟传值公共的bus,夸组件传值vuex

传值的方式有很多种,这里就先介绍下简单的父子传值

父传子

通过在子组件上自定义属性,将data流入,子组件可以通过props来接受流入的值如图:

最后通过this.program的方式可以直接使用这个值

子传父

由于数据是单向流通的这里不能再通过props在子组件传值给父组件,需要通过$emit的方式去触发事件将子组件的值传递给父组件如图:

通过自定义方法在父组件methods中用于接收子组件传递的数据,子组件中通过this.$emit("weekFn", res.data.enable);语句,weekFn:在父组件中自定义的方法名,res.data.enable传递给父组件的数据,weekFn(value){value用于接收子组件传递过来的值}。

说到这其实这个也可以进一步简化,通过sync修饰符将自定义方法和自定义属性简化为,如图:

通过this.$emit('update:program', res.data.enable)语法可以直接修改data的值,为什么能修改呢 看下下面的图就知道了

    

sync其实就是一个语法糖,他将自定义方法这一步简化了,通过.sync直接将赋值这一步合并。

关于公共bus,感觉功能并不是很实用,vuex可以完全替代这个这里就不详细讲解了,下一章就详细讲解vuex中的值传递。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
什么时间试排卵纸最佳 排卵第十天排卵试纸弱阳怎么回事 手机app下载课后帮 课后帮点击了家长怎么改成学生的 课后帮绑定学生后还能绑定家长吗 课后帮怎么注册 课后帮注册教程 癫痫急救的正确方法 癫痫持续状态的抢救要点 小儿癫痫发作的急救措施 癫痫病急救常识有哪些要点 这个女孩子是是什么意思,是喜欢我吗 梦见去世父亲对我说话说明了什么 乡镇公务员调到县城难吗 乡镇公务员借调到县就业局写材料好吗 哮喘断根秘方用生姜的的方法 生姜治疗哮喘的秘方 命带两个正财的男人 命运如何 女孩八字中,两正财,两偏财什么意思? 请问苹果6手机内存sd卡下载不了是不是坏了可以换吗 上海虹桥新地中心停车场收费吗 猫耳不登陆可听漫播不 婚纱鱼是淡水鱼还是咸水鱼 婚纱鱼是不是保护动物 城建档案伴我行国际档案日主题征文 档案情怀征文 档案-我们的共同记忆主题征文? 国际档案日征文 档案-我们共同的记忆主题征文? 雷锋的故事作文550字 2018年7月22到2020年2月29几天? 雪花姐姐,冥人,谢灵灵,阴阳人是什么小说 有部仙侠小说主人公是冥人娶了个老婆是仙,不记得名字了 车已经6万多公里了,4s店建议加燃油添加剂,除积碳,这样有用吗? 各个国家都有什么国宝 我梦见我有上亿资产是好是坏 2023初级会计一年能考几次?考初级会计有什么优势? 电费缴费户号是什么意思(户号是什么意思在哪里) 前世爱人变成痴儿怎么办 寻书!一本言情小说,好像男主角是个皇帝,后来找到女主角是发现女主角变成了痴儿。请高手出手··· 被前世的爱人缠着的表现? 前世情人相遇怎么认出,如果人生重遇前世情人 梦见牙刷刷手 刷机大师,刷机精灵,甜辣椒刷机等一键刷机软件哪种好 竞选学生会干部工作设想 竞选部长工作计划 家里有隐翅虫怎么消杀? 昆虫专家 昆虫可以一直泡在酒精里吗 有害昆虫消杀规定 家里房顶子上好多这种虫子,白天没声,晚上听见噼里啪啦掉到顶子翅膀震动的声音,这是什么虫子,怎么办呢