欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 第二十四课 Vue中子组件调用父组件数据

第二十四课 Vue中子组件调用父组件数据

2025/9/15 3:05:03 来源:https://blog.csdn.net/weixin_44010641/article/details/145269144  浏览:    关键词:第二十四课 Vue中子组件调用父组件数据

Vue中子组件调用父组件数据

Vue是不建议在不同的组件直接传递值的,我们需要使用props方法来进行组件间的值传递

子组件调用父组件数据

父模板的数据,子组件是无法直接调用的

无法直接调用

1)组件调用顶级对象中的data

    <div class="vue"><per></per></div><script>new Vue({el: '.vue',data: {vals: 'Hello World !'},components: {'per': {template: '<span>嵌套组件父 {{vals}}</span>',}}});      </script>

2)子组件中调用父组件的数据

无法直接调用

    <div class="vue"><per></per></div><script>new Vue({el: '.vue',components: {'per': {data: function(){return {vals: "我是父组件中的数据"}},template: '<span>嵌套组件父 {{vals}} : <son></son></span>',components: { //嵌套子组件的根为 a'son': {template: '<strong>嵌套子组件</strong>'}    }}}});      </script> 

props接受数据

props类似于为子组件定义了属性名,用于接受父组件传递进来的值,通过v-bind将定义好的属性并绑定到子组件实例上进行参数绑定。

1)子组件接受父组件的传值

    <script>new Vue({el: '#app',components: {per: {data: () => ({val: 'Hello World !'}),template: `<div><h1>这是父组件的内容 {{val}}</h1><son :getVal="val"></son></div>`,components: {son: {props: ['getVal'],template: '<h1>这是子组件的内容 {{getVal}}</h1>'}} }}})</script>  

2)子组件介绍父组件的多值传递

props对应的数组对象,可以接受多值传递

    <div id="app"><per></per> </div><script>new Vue({el: '#app',components: {per: {data: () => ({val: 'Hello World !',nums: 1000}),template: `<div><h1>这是父组件的内容 {{val}}</h1><son :getVal="val" :getMore="nums"></son></div>`,components: {son: {props: ['getVal', 'getMore'],template: '<h1>这是子组件的内容 {{getVal}}  {{getMore}}</h1>'}} }}})</script>    

props数据过滤

props后的属性也可以是obj格式的对象,方便针对接受的参数进行过滤操作

1)字符过滤(接受的值是否为字符)

    <div id="app"><per></per> </div><script>new Vue({el: '#app',components: {per: {data: () => ({val: 'Hello World !'}),template: `<div><h1>这是父组件的内容 {{val}}</h1><son :getVal="val"></son></div>`,components: {son: {props: {'getVal': [String]},template: '<h1>这是子组件的内容 {{getVal}}</h1>'}} }}})</script>

2)多数据类型过滤

当前传递进来的数据,只允许是数值或者字符

    <div id="app"><per></per> </div><script>new Vue({el: '#app',components: {per: {data: () => ({val: 'Hello World !'}),template: `<div><h1>这是父组件的内容 {{val}}</h1><son :getVal="val"></son></div>`,components: {son: {props: {'getVal': [String, Number]},template: '<h1>这是子组件的内容 {{getVal}}</h1>'}} }}})</script>

3)多种过滤方式

a)为当前空值传递赋默认值
b)类型检测
c)自定义验证函数

官方示例:

Vue.component('example', {props: {// 基础类型检测 (`null` 意思是任何类型都可以)propA: Number,// 多种类型propB: [String, Number],// 必传且是字符串propC: {type: String,required: true},// 数字,有默认值propD: {type: Number,default: 100},// 数组/对象的默认值应当由一个工厂函数返回propE: {type: Object,default: function () {return { message: 'hello' }}},// 自定义验证函数propF: {validator: function (value) {return value > 10}}}
})

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词