小程序--自定义组件

一、创建自定义组件

.js中注册Component函数

.json使用**"component": true**

javascript 复制代码
Component({})
javascript 复制代码
{
  "component": true
}

二、使用自定义组件

全局配置、页面配置均可,全局配置就写在app.json中,页面配置就写在页面对应的json中。

配置之后,在页面中以组件形式引入。

html 复制代码
<page-search />
javascript 复制代码
{
  "usingComponents": {
    "page-search":"/components/my_search/my_search"
  }
}

三、自定义组件样式

小程序的样式是默认隔离(默认情况下页面的样式无法影响自定义组件的样式)的,允许外部文件修改组件样式的方法:

1、设置addGlobalClass

.js 文件中传入 options: { addGlobalClass: true }

注意:尽量不要使用标签、ID、属性选择器(会影响到全局)。

javascript 复制代码
// components/my-nav/my-nav.js
Component({
  // 小程序组件默认样式是隔离,addGlobalClass设置为true可允许外部修改样式
  options: {
    addGlobalClass: true
  }
})
html 复制代码
// 组件内容
<view class="navigation-bar custom-class">
  <view class="navigation-bar-title title-class">
    自定义标题
  </view>
</view>
html 复制代码
// 组件样式
.navigation-bar {
  background-color: #fff;
  height: 88rpx;
  /* 顶部刘海预留 */
  padding-top: 100rpx;
  display: flex;
  justify-content: center;
}
.navigation-bar-title {
  font-weight: 600;
}
html 复制代码
// 使用组件的页面
<app-nav></app-nav>

.navigation-bar {
  background-color: gold !important;
}
.nav_title {
  color: #fff !important;
}
javascript 复制代码
// 使用组件的js
{
  "navigationStyle": "custom"
}

2、设置externalClasses

.js 文件中传入 externalClasses: [ xxx, yyy]

javascript 复制代码
// components/my-nav/my-nav.js
Component({
  externalClasses: ["custom-class"],
})
html 复制代码
// 使用组件的页面
<app-nav custom-class="nav_title"></app-nav>

.navigation-bar {
  background-color: gold !important;
}
.nav_title {
  color: #fff !important;
}

四、自定义插槽

小程序默认只能使用一个slot,需要多个插槽或需要使用具名插槽的时候,需要传入**multipleSlots: true**。

创建插槽 :在组件的任一位置使用<slot />占位,slot一定要是闭合标签

javascript 复制代码
// components/my-nav/my-nav.js
Component({
  options: {
    // 只要使用到具名插槽,都需要将multipleSlots设置为true
    multipleSlots: true
  },
})
html 复制代码
<view class="navigation-bar custom-class">
  <view class="navigation-bar-title title-class">
    <slot name="left"></slot>自定义标题<slot name="right"></slot>
  </view>
</view>
html 复制代码
<app-nav custom-class="nav_title">
  <text slot="left">◀</text>
  <text slot="right">▶</text>
</app-nav>

五、组件生命周期

1、created

组件创建时触发,相当于vue的created,但是由于无法使用this.setData({}),所以,一般不用。

2、attached

组件初始完毕时触发,相当于vue的mounted,最常使用。

html 复制代码
<view class="navigation-bar custom-class" style="padding-top: {{statusBarHeight}}px;">
  <view class="navigation-bar-title title-class">
    <slot name="left"></slot>自定义标题<slot name="right"></slot>
  </view>
</view>
javascript 复制代码
// components/my-nav/my-nav.js
Component({
  options: {
    multipleSlots: true
  },
  data: {
    statusBarHeight: 0
  },
  // 生命周期
  lifetimes: {
    created(){},
    attached() {
      const { statusBarHeight } = wx.getSystemInfoSync()
      console.log(wx.getSystemInfoSync())
      console.log(statusBarHeight)
      this.setData({
        statusBarHeight: statusBarHeight
      })
    }
  }
})
相关推荐
庸俗今天不摸鱼16 分钟前
【万字总结】前端全方位性能优化指南(十)——自适应优化系统、遗传算法调参、Service Worker智能降级方案
前端·性能优化·webassembly
黄毛火烧雪下23 分钟前
React Context API 用于在组件树中共享全局状态
前端·javascript·react.js
曲江涛33 分钟前
微信小程序 webview 定位 并返回
微信小程序·小程序
Apifox34 分钟前
如何在 Apifox 中通过 CLI 运行包含云端数据库连接配置的测试场景
前端·后端·程序员
一张假钞36 分钟前
Firefox默认在新标签页打开收藏栏链接
前端·firefox
高达可以过山车不行36 分钟前
Firefox账号同步书签不一致(火狐浏览器书签同步不一致)
前端·firefox
m0_5937581038 分钟前
firefox 136.0.4版本离线安装MarkDown插件
前端·firefox
掘金一周41 分钟前
金石焕新程 >> 瓜分万元现金大奖征文活动即将回归 | 掘金一周 4.3
前端·人工智能·后端
三翼鸟数字化技术团队1 小时前
Vue自定义指令最佳实践教程
前端·vue.js
Jasmin Tin Wei1 小时前
蓝桥杯 web 学海无涯(axios、ecahrts)版本二
前端·蓝桥杯