微信小程序如何封装自己的组件?

news/2024/7/19 13:32:20 标签: js, 组件化, 小程序, 面试, 前端

在现在前端领域,最常见的话语就是组件化、工程化的内容。所有的框架都在朝着这方面发展。作为前端生态中的新兴热人物小程序的出现,同样支持组件化开发

在我们的日常开发中,可以封装一些常用的组件达到复用效果,可以大大提高我们的工作效率。今天我们学习一下如何在微信小程序中封装自己的组件。

首先我们在app.json中新建一个页面,组件自己的结构普通页面的机构是一样的,同样由.js.json.wxmlwxss组成,所以我们像注册一个普通页面一样注册它。

我们来试着封装一个一键返回顶部的按钮。

首先进去页面的json文件,把component属性设置为true

json">{
  "component":true
}

wxml代码如下:

<view class="inner" bindtap="scrollTop">
  {{btnFont}}
</view>

wxss代码如下:

page {
  height: 2000rpx;
}
.inner {
  width: 160rpx;
  height: 160rpx;
  line-height: 160rpx;
  border-radius: 50%;
  background-color: rgb(45, 150, 233);
  text-align: center;
  font-weight: bold;
  position: fixed;
  right: 40rpx;
  bottom: 40rpx;
}

wxmlwxss的代码和普通页面的格式一模一样。

js内容如下:

Component({
  properties: {
    btnFont: {
      type: String,
      value: 'default value'
    }
  },
  data: {
    someData:{}
  },
  methods: {
    scrollTop() {
      if(wx.pageScrollTo) {
        wx.pageScrollTo({
          scrollTop:0
        })
      }else {
        wx.showModal({
          title:'提示',
          content:'当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试!'
        })
      }
   }
  },
  lifetimes: {

  },
})

我们来看一下它和普通页面的js结构上有什么区别?

普通的页面的js文件中是由Page({})涵盖的,而组件的js文件是由Component({})涵盖的。对象中的内容也略有不同。

Component对象中的全部属性如下:

定义段类型是否必填描述最低版本
propertiesObject Map组件的对外属性,是属性名到属性设置的映射表
dataObject组件的内部数据,和properties一同用于组件的模板渲染
observersObject组件数据字段监听器,用于监听propertiesdata的变化2.6.1
methodsObject组件的方法,包括事件响应函数和任意的自定义方法,关于事件响应函数的使用
behaviorsString Array类似于mixins和traits的组件间代码复用机制
createdFunction组件生命周期函数-在组件实例刚刚被创建时执行,注意此时不能调用 setData
attachedFunction组件生命周期函数-在组件实例进入页面节点树时执行
readyFunction组件生命周期函数-在组件布局完成后执行
movedFunction组件生命周期函数-在组件实例被移动到节点树另一个位置时执行
detachedFunction组件生命周期函数-在组件实例被从页面节点树移除时执行
relationsObject组件间关系定义
externalClassesString Array组件接受的外部样式类
optionsObject Map一些选项(文档中介绍相关特性时会涉及具体的选项设置,这里暂不列举)
lifetimesObject组件生命周期声明对象
pageLifetimesObject组件所在页面的生命周期声明对象
definitionFilterFunction定义段过滤器,用于自定义组件扩展

Component对象的属性有很多,最常用的就是propertiesdatamethods,lifetimes

其实properties,如果你学习过Vue的话,这个东西的作用和props是一模一样的,我们可以在这里设置组件属性的格式。比如我们这个按钮,我想让按钮的文字动态显示,在页面中使用的时候动态设置,所以我们在wxml中用{{}}设置内容为btnFont,在jsproperties中设置它的接收格式和默认值。

因为这个按钮的功能是返回顶部,所以我们在组件封装的时候就可以把事件绑定上,在scrollTop方法中,我们写入了返回顶部的代码。

到这里,我们就可以完成了一个组件的封装。

接下来就是引入了,首先我们要先进入引入页面的json文件中

json">{
  "usingComponents": {
    "ScrollTop":"../testDemo/testDemo"
  }
}

usingComponents属性就是用来挂载组件的,属性的key就是组件的名字,value就是组件的路径

然后直接去wxml中使用即可。

<ScrollTop btnFont="返回顶部" style="display:{{isHidden}}"></ScrollTop>

有部分js内容需要在使用页面中写,比如监听当前窗口距离顶部的高度。

  data: {
    isHidden:'none'
  },
  onPageScroll(e) {
    console.log(e);
    if(e.scrollTop !== 0) {
      this.setData({
        isHidden:'block'
      })
    }else {
      this.setData({
        isHidden:'none'
      })
    }
  },

在这里插入图片描述

这样我们就完成了封装自己的组件并且应用到实际场景中的内容。

有任何问题都可以联系我哦!
QQ:505417246
微信:18331092918
微信公众号:Code程序人生
个人博客:https://Creator12333.github.io

在这里插入图片描述


http://www.niftyadmin.cn/n/1576417.html

相关文章

盘点|最实用的机器学习算法优缺点分析,没有比这篇说得更好了

​推荐理由对于机器学习算法的盘点&#xff0c;网上屡见不鲜。但目前&#xff0c;还没人能结合使用场景来把问题说明白&#xff0c;而这一点正是本文的目的所在。在文章中&#xff0c;作者将结合他的实际经验&#xff0c;细致剖析每种算法在实践中的优势和不足。本文的目的&…

为什么typeof null是object?

最近在面试的时候遇到了一个好玩的问题&#xff0c;面试官问null是什么数据类型&#xff0c;我不假思索的回答null属于原始(基本)数据类型。接着面试官又问到&#xff0c;那为什么typeof null的结果是object。。。 说实话&#xff0c;我没有自己试过typeof null的结果&#xff…

python2 python3 字符串 编码格式 处理

使用python的ctypes调用c语言中的函数&#xff0c;传入字符串&#xff0c;打印输出异常。解决方法记录于此。 参考连接&#xff1a; http://blog.csdn.net/u011546806/article/details/44936303 主要原因是编码格式不同导致的。python2和python3采用的默认编码不同。 python2默…

JS实现数组去重的常见方法

数组去重在前端面试中遇到的频率非常非常高。解决的方法也有很多&#xff0c;今天给大家介绍三种最常见&#xff0c;最有用的数组去重方法。 下面我们对这个数组进行去重操作。 var arr [1,1,true,true,true,true,15,15,false,false, undefined, undefined, null,null, NaN…

SCO 和 IBM 之间关于 Unix 的诉讼又来了

https://yqfile.alicdn.com/35b8fd20a8cf98f0e7631f99b0ae16a616628098.png" >SCO 在四年前经历过一次不利的裁决后宣告破产&#xff0c;并且变卖了所有的资产&#xff0c;现在的存在只是作为一个对 IBM 挪用它的 UNIX 源代码而进行唐吉可德式法律诉讼的载体。显然&…

前端数据可视化之Echarts初体验

今天在面试的时候面试官问到了有没有Echarts的开发经验&#xff0c;后来了解到面试官所在的部门主要就是负责数据可视化平台的搭建&#xff0c;以Echart和HighCharts为基础。 虽然Echarts诞生的时间已经挺久了&#xff0c;但是随着最近数据分析等岗位越来越热门&#xff0c;很多…

openssl之EVP系列之6---EVP_Encrypt系列函数编程架构及样例

openssl之EVP系列之6---EVP_Encrypt系列函数编程架构及样例 ---依据openssl doc/crypto/EVP_EncryptInit.pod和doc/ssleay.txt cipher.doc部分翻译和自己的理解写成 作者&#xff1a;DragonKing, Mail: wzhah263.net , 公布于&#xff1a;http://openssl.126.com 版本号&…

你真的熟练运用 HTML5 了吗,这10 个酷炫的 H5 特性你会几个?

HTML5不是什么新鲜事。自初始版本&#xff08;2008 年 1 月&#xff09;以来&#xff0c;我们一直在使用它的几个功能。我再次仔细查看了 HTML5 功能列表。看看我发现了什么&#xff1f;到目前为止&#xff0c;我还没有真正使用过很多&#xff01; 在本文中&#xff0c;我列出…