uniapp小程序创建全局自定义组件并传递参数的方法

Web前端开发 / 10 次阅读

有一个联系信息模块,小程序的所有页面都要显示,如果每个页面都添加一次,不仅消耗时间,也不利于后期维护。如果使用自定义组件components就可以实现一个模块全站统一调用,既便于管理也利于维护。

创建全局自定义组件

1、在项目的根目录下的components目录下新建组件(如果没有components目录则手动新建)

在HBuilder编辑器,右键components目录——新建组件,输入组件名称、勾选“创建同名目录”:

uniapp-custom-components-01.jpg

点击“创建”按钮后会生成一个包含contact.vue文件的contact目录,contact.vue默认代码:

<template>
    <view>
        
    </view>
</template>

<script>
    export default {
        name:"contact",
        data() {
            return {
                
            };
        }
    }
</script>

<style>

</style>

2、编辑在main.js文件,添加以下代码:

import contact from 'components/contact/contact.vue' 
Vue.component('contact', contact)

作用是把contact组件自定义为全局组件,小程序所有页面都可以调用。

3、在pages目录下编辑文件(如首页index.vue),在<template></template>中间添加自定义组件调用代码:

<contact></contact>

自定义组件传递参数

1、把上面的自定义组件调用代码修改为:

<contact :isShow="true" :position="position" name="联系信息"></contact>

注意:

使用冒号表示绑定的是data里的变量,输出的是变量的数据,不使用冒号表示使用的是字符串,直接输出双引号里面的内容。

在HTML模板中,使用:前缀来表示绑定一个属性到一个表达式(即传递动态数据),如果不使用冒号,属性值将被视为字符串。例如,:position="position"会将变量position的数据绑定到position prop,而不是将字符串"position"作为值。

2、编辑components/contact/contact.vue文件,在data()上面添加props数组,作用是接收页面给组件传递的参数值,代码如下:

<template>
    <view>
        
    </view>
</template>

<script>
    export default {
        name:"contact",
        props:{
            isShow:{
                type:Boolean,
                default:true
            },
            position:{
                type:String,
                default:'right'
            },
            name:{
                type:Number,
                default:'联系信息'
            }
        },
        data() {
            return {
                
            };
        },
        mounted(){
            console.log(this.$props.name) //$props是Vue组件的一个内部属性,用于接收父组件传递给当前组件的所有props
        }
    }
</script>

<style>

</style>

注意:接收父组件传递给当前组件的props不能直接使用this,需要接一个内部属性$props,即this.$props.xxxx