本示例基于vue2+element-ui,介绍vue中 $parent、$children、$refs关于父子组件传值的用法。
使用场景
$refs:父组件访问子组件
如果在普通的DOM元素上使用,引用指向的是DOM元素;如果用在子组件上,引用的是组件实例$parent:子组件访问父组件$children:父组件访问子组件
文件结构
示例一:$parent 子组件获取父组件的数据、调用父组件的方法
父组件
父组件-表格
:data="tableData" style="width: 100%"> prop="name" label="姓名" > prop="desc" label="内容" > prop="time" label="时间">
import MessageBox from '../components/message.vue';
export default {
data() {
return {
tableData: [],
};
},
methods: {
fun() {
console.log('父组件的方法!!!')
}
},
components: {
MessageBox
},
};
.about{
width: 50vw;
margin: auto;
}
子组件
export default {
name:'message',
data() {
return {
form:{
name:'',
desc:'',
}
};
},
methods: {
addMes(){
const obj = Object.assign(this.form,{time:this.getNowTime()});
this.$parent.tableData.push(obj);
// 获取父组件的数据
// this.$parent.tableData;
// 调用父组件的方法
// this.$parent.fun();
},
// 获取当前时间
getNowTime() {
let dtime = new Date();
let nian = dtime.getFullYear(),
yue = dtime.getMonth() + 1,
day = dtime.getDate(),
hours = dtime.getHours(),
fen = dtime.getMinutes(),
miao = dtime.getSeconds();
return nian + "-" + yue + "-" + day + " " + hours + ":" + fen + ":" + miao;
}
},
components: {
}
}
示例二:$children 父组件获取子组件的数据、调用子组件的方法
父组件
父组件-表格
:data="tableData" style="width: 100%"> prop="name" label="姓名" > prop="desc" label="内容" > prop="time" label="时间">
import MessageBox from '../components/message.vue';
export default {
data() {
return {
tableData: [],
};
},
methods: {
addMes() {
// 获取子组件的数据
const child_val = this.$children[0].form;
const obj = Object.assign(child_val,{time:this.getNowTime()});
this.tableData.push(obj);
// 调用子组件的方法
this.$children[0].fun();
},
// 获取当前时间
getNowTime() {
let dtime = new Date();
let nian = dtime.getFullYear(),
yue = dtime.getMonth() + 1,
day = dtime.getDate(),
hours = dtime.getHours(),
fen = dtime.getMinutes(),
miao = dtime.getSeconds();
return nian + "-" + yue + "-" + day + " " + hours + ":" + fen + ":" + miao;
},
},
components: {
MessageBox
},
};
.about{
width: 50vw;
margin: auto;
}
子组件
export default {
name:'message',
data() {
return {
form:{
name:'',
desc:'',
},
};
},
methods: {
fun() {
console.log('子组件的方法!!!')
}
},
components: {
}
}
示例三:$refs 父组件获取子组件的数据、调用子组件的方法
// 获取子组件的数据
const child_val = this.$refs.mes.form;
// 调用子组件的方法
this.$refs.mes.fun();
$ref的用法与$children的方法相同,只需要将 children[0] 换成 $refs.mes 即可。
注意:
根据动图可以看见一个现象,改变姓名(input)、内容(textarea) 的值,表格的值也跟随改变。
解决方法:将应用的值深拷贝
相关文章
发表评论