Vue中子组件父组件相互调用的四种方法 props
子组件调用父组件的方法Vue中子组件调用父组件的方法,有三种方法:1. 直接在子组件中通过this.$parent.event来调用父组件的方法父组件<template><div><child></child></div></template><script>import child from '~/compone
·
子组件调用父组件的方法
Vue中子组件调用父组件的方法,有三种方法:
一. 直接在子组件中通过this.$parent.event来调用父组件的方法
父组件
<template>
<div>
<child></child>
</div>
</template>
<script>
import child from '~/components/dam/child';
export default {
components: {
child
},
methods: {
fatherMethod() {
console.log('测试');
}
}
};
</script>
子组件:
<template>
<div>
<button @click="childMethod()">点击</button>
</div>
</template>
<script>
export default {
methods: {
childMethod() {
this.$parent.fatherMethod();
}
}
};
</script>
二.vue父组件直接调用子组件里方法
父组件使用子组件,写上ref=""
<template>
<div>
//父组件点击事件
<el-button type="primary" @click="parentOpenDialog">打开弹窗</el-button>
<dialog ref="dialog"></dialog>
</div>
</template>
<script>
import dialog from "./components/dialog";
export default {
components: { dialog},
data() {
return {};
},
methods: {
//父组件methods
parentOpenDialog() {
this.$nextTick(() => {
this.$refs["dialog"].openDialog();
});
},
}
};
</script>
子组件代码
<template>
<div>
<el-dialog title="父组件调用子组件方法" :visible.sync="dialogVisible">
<div>父组件调用子组件方法</div>
</el-dialog>
</div>
</template>
<script>
export default {
data() {
return {
dialogVisible: false,
};
},
methods: {
openDialog() {
this.dialogVisible = true;
}
}
};
</script>
三. 在子组件里用$emit向父组件触发一个事件,父组件监听这个事件就行了。
父组件:
<template>
<div>
<child @fatherMethod="fatherMethod"></child>
</div>
</template>
<script>
import child from '~/components/dam/child';
export default {
components: {
child
},
methods: {
fatherMethod() {
console.log('测试');
}
}
};
</script>
子组件:
<template>
<div>
<button @click="childMethod()">点击</button>
</div>
</template>
<script>
export default {
methods: {
childMethod() {
this.$emit('fatherMethod');
}
}
};
</script>
四. 父组件把方法传入子组件中,在子组件里直接调用这个方法
父组件:
<template>
<div>
<child :fatherMethod="fatherMethod"></child>
</div>
</template>
<script>
import child from '~/components/dam/child';
export default {
components: {
child
},
methods: {
fatherMethod() {
console.log('测试');
}
}
};
</script>
子组件:
<template>
<div>
<child :fatherMethod="fatherMethod"></child>
</div>
</template>
<script>
import child from '~/components/dam/child';
export default {
components: {
child
},
methods: {
fatherMethod() {
console.log('测试');
}
}
};
</script>
props有两种接受方法,
1.用数组接收数据。不限制数据类型
props:['parentName'],
2.用对象接受数据。可以对数据类型进行限制;
props: {
// 基础的类型检查 (`null` 和 `undefined` 会通过任何类型验证)
propA: Number,
// 多个可能的类型
propB: [String, Number],
// 必填的字符串
propC: {
type: String,
required: true,
},
// 带有默认值的数字
propD: {
type: Number,
default: 100,
},
// 数组写法
propK: {
type: Array,
// 对象或数组默认值必须从一个工厂函数获取
default: function () {
return ["张三"];
},
},
// 带有默认值的对象
propE: {
type: Object,
// 对象或数组默认值必须从一个工厂函数获取
default: function () {
return { message: "hello" };
},
},
// 自定义验证函数
propF: {
validator: function (value) {
// 这个值必须匹配下列字符串中的一个
return ["success", "warning", "danger"].indexOf(value) !== -1;
},
}
}
更多推荐
已为社区贡献1条内容
所有评论(0)