有一个联系信息模块,小程序的所有页面都要显示,如果每个页面都添加一次,不仅消耗时间,也不利于后期维护。如果使用自定义组件components就可以实现一个模块全站统一调用,既便于管理也利于维护。
创建全局自定义组件
1、在项目的根目录下的components目录下新建组件(如果没有components目录则手动新建)
在HBuilder编辑器,右键components目录——新建组件,输入组件名称、勾选“创建同名目录”:
点击“创建”按钮后会生成一个包含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