vue中父子组件通过ref传值「dialog组件」_青梅主码
前言一个基于vue的项目,有可能会很多的组件,组件之间难免需要进行数据的传递,比如: 父组件 传数据 给子组件;子组件传数据给父组件等,需要用到组件之间的通信处理方式。项目中经常用到element中的dialog组件,现记录父子组件通过ref传值。操作流程:1.父组件中点击按钮吊起子组件模态框dialog进行内容设置,并给子组件传递idthis.$nextTick(() =&g......
前言
一个基于vue的项目,有可能会很多的组件,组件之间难免需要进行数据的传递,比如: 父组件 传数据 给子组件;子组件传数据给父组件等,需要用到组件之间的通信处理方式。
项目中经常用到element中的dialog组件,现记录父子组件通过ref传值。
操作流程:
1.父组件中点击按钮吊起子组件模态框dialog进行内容设置,并给子组件传递id
this.$nextTick(() => { //此函数执行时所有的DOM挂载和渲染都已完成
this.$refs.dialogRef.init(this.fatherId); //获取子组件中init方法并将父组件id传递给子组件
});
2.在子组件中需接收父组件传来的内容id并查询内容详情
init (val) {
this.activityId = val //接收父组件传递的id值
}
3.在子组件dialog中可以编辑内容,然后将数据通过$emit传递给父组件
this.$emit("setActivityBtn", this.SetForm); //setActivityBtn为父组件接收的方法,将参数传给父组件
4.父组件接收数据后提交到服务器
setActivityBtn(data) { //获取子组件传来的值
let params = data
},
以下为父子组件全部代码
子组件Dialog
<script>
export default {
name: '',
data () {
return {
id: '', //用来查询详情的id
dialogFormVisible: false, //模态框
SetForm: { }, //模态框数据
}
},
methods: {
// 初始化方法
init (val) {
this.activityId = val //接收父组件传递的值
this.dialogFormVisible = true;
this.getActivityInfo()
},
//获取内容详情
getActivityInfo () {
},
//模态框确定按钮
setActivityBtn () {
this.$emit("setActivityBtn", this.SetForm); //将参数传给父组件
this.dialogFormVisible = false;
},
}
</script>
父组件
<script>
import Dialog from '../components/Dialog'
export default {
name: '',
data () {
return {
fatherId:'', //详情id
dialogShow: false, //模态框
}
},
components: { // 组件的引用
Dialog
},
methods: {
//吊起模态框
activitySet() {
this.dialogShow= true;
this.$nextTick(() => { //此函数执行时所有的DOM挂载和渲染都已完成
this.$refs.dialogRef.init(this.fatherId); //获取子组件中init方法并将父组件id传递给子组件
});
},
//确定按钮
setActivityBtn(data) { //获取子组件传来的值
let params = data
XXXXXXXX(params).then(res => {
if (res.data.code == 0) {
this.dialogFormVisible = false
}
})
},
}
</script>
吊起模态框
<script>
import Dialog from '../components/Dialog'
export default {
name: '',
data () {
return {
fatherId:'', //详情id
dialogShow: false, //模态框
}
},
components: { // 组件的引用
Dialog
},
methods: {
//吊起模态框
activitySet() {
this.dialogShow= true;
this.$nextTick(() => { //此函数执行时所有的DOM挂载和渲染都已完成
this.$refs.dialogRef.init(this.fatherId); //获取子组件中init方法并将父组件id传递给子组件
});
},
//确定按钮
setActivityBtn(data) { //获取子组件传来的值
let params = data
XXXXXXXX(params).then(res => {
if (res.data.code == 0) {
this.dialogFormVisible = false
}
})
},
}
</script>
拓展
方式一、父子组件通过ref传值,然后在子组件中data函数直接return获得
父组件中:可以通过ref向子组件传值
this.$refs.dialogRef.name1=this.fatherName1
this.$refs.dialogRef.name2=this.fatherName2
子组件中:可以通过数组的形式向父组件传递多个参数
this.$emit("setActivityBtn", [this.SetForm,this.dialogFormVisible]);
方式二.v-bind绑定,子组件中props接受,return中定义要改变传给父组件的属性:
父组件
<script>
this.fatherName= this.detailData.name;
this.fatherSalePrice= this.detailData.salePrice;
</script>
子组件
<script>
export default {
props: {
sonName: {
type:String,
default:''
},
sonSalePrice: {
type:Number,
default:0
},
},
data:function () {
return {
cartName:this.sonName,
cartSalePrice:this.sonSalePrice
}
},
methods: {
addCart() {
this.$emit('confirmAddCart',[this.cartName,this.cartSalePrice]);
}
}
}
</script>
注:vue的思想是数据驱动视图,所以尽量少的用直接操作dom,当然一些需要获取元素宽高等场景时也会用到$refs
相关文章
- springcloud 入门2_chenzm666666
- 从零开始SpringCloud Alibaba实战(35)??引入服务网关Gateway_liuec1002_springcloudalibaba 网关怎么引入
- Spring Cloud Gateway 网关学习_?天微亮ミ夜微凉?
- Day 32 - 透过手机呼叫 Amazon API Gateway 上传图片到 S3_Yehchitsai
- SpringCloud?Gateway网关_BlogY
- GateWay网关笔记_小库抢板12_gateway 网关服务如何测试
- 5.服务网关:GateWay_二十六26
- 网关服务初识_KitonGao
- LIM 监控系统支持JAVA_Spring Cloud Gateway 原生支持接口限流该怎么玩_娜携年华
- GateWay_kaixin201505_gateway
- Gateway WebSSH_ejinxian
- Fizz企业级微服务API网关进阶系列教程-服务编排内置函数_api网关进阶功能_老夫黑鹰
- 12.10工作学习记录 swagger配置 安装echarts 腾讯云点播 nacos配置 gateway网关配置 网关配置一个跨域配置类就可以解决跨域问题 订单管理模块_隔江远岸
- java中http怎么搭建_如何在Spring集成中使用JAVA配置创建http outbound-gateway?_yangyang0508
- Spring-Cloud-Gateway基于服务发现的动态路由源码分析-1_SIGN-zxd
- 谷粒商城-day04-完成递归查询分类和gateway转发实战_周周写不完的代码