微信小程序(组件通讯和全局数据共享)

1.父子组件之间的通信

①属性绑定

用于父组件向子组件的指定属性设置数据,仅能设置JSON兼容的数据

②事件绑定

用于子组件向父组件传递数据,可以传递任意数据

③获取组件实例

父组件还可以通过 this.selectComponent() 获得子组件实例对象

这样就可以直接访问子组件的任意数据和方法

属性绑定

属性绑定用于实现父向子传值,而且只能传递普通类型的数据

html 复制代码
//父组件的 data 节点
data: {
  count:0
}
//父组件的 wxml 结构
<my-test3 count="{{count}}"></my-test3>
<view>~~~</view>
<view>父组件中,count值为:{{count}}</view>

事件绑定

事件绑定用于实现子向父传值,可以传递任何类型的数据。

① 在父组件的js中,定义一个函数,这个函数即将通过自定义事件的形式,传递给子组件

② 在父组件的wxml中,通过自定义事件的形式,将步骤 1 中定义的函数引用,传递给子组件

③ 在子组件的js中,通过调用this.triggerEvent('自定义事件名称',{/*参数对象*/}),将数据发送到父组件

④ 在父组件的js中,通过e.detail获取到子组件传递过来的数据。

html 复制代码
methods: {
    addCount() {
      this.setData({
        count: this.properties.count+1
      })
      //触发自定义事件,将数值同步给父组件
      this.triggerEvent('sync',{value:this.properties.count})
    }
  }

获取组件实例

可在父组件里调用this.selectComponent("id或class选择器"),获取子组件的实例对象,从而直接访问子组件的任意数据和方法。

2.behaviors

behaviors是小程序中,用于实现组件间代码共享的特性。

在组件中,使用require()方法导入需要的behavior,挂载后即可访问behavior 中的数据或方法

同名字段的覆盖和组合规则

组件和它引用的behavior中可以包含同名的字段,此时可以参考以下规则:

① 同名的数据字段(data)

② 同名的属性(properties)或方法(methods)

③ 同名的生命周期

3.定制全局样式

在app.wxss中,写入CSS变量即可对全局生效:

css 复制代码
page {
    /*定制警告按钮的背景颜色和边框颜色*/
    --button-danger-background-color: #C00000;
    --button-danger-border-color: #D00000;
}

API Promise化

定义:通过额外的配置,将官方提供的,基于回调函数的异步API,升级改造为基于Promise的异步API,从而提高代码的可读性。

实现:依赖于 miniprogram-api-promise这个第三方的npm 包。

css 复制代码
npm install --save miniprogram-api-promise@1.0.4

// 在小程序入口文件中(app.js),只需调用一次 promisifyAll() 方法
// 即可实现异步API
import {promisifyAll} from'miniprogram-api-promise'

const wxp- wx.p-{}
promisifyAll(wx.wxp)

4.全局数据共享

全局数据共享是为了解决组件之间数据共享的问题。

创建MobX的Store实例

javascript 复制代码
//在这个js文件中,专门来创建 Store 的实例对象
import {observable } from 'mobx-miniprogram'
export const store=observable ({
  //数据字段
   numA: 1,
   numB: 2,
  //计算属性
  get sum() {
    return this.numA+this.numB
  },
  // action函数,专门来修改store中数据的值
  updateNuml:action(function(step) {
    this.numA+=step
}),
  updateNum2:action(function(step) {
  this.numB+=step
}),
})

将Store中的成员绑定到页面中

javascript 复制代码
//pages/message/message.js
//引入方法
import {createStoreBindings} from''
import {store} from'../store/store'

Page({
  /**
   * 页面的初始数据
   */
  data: {

  },
  
})
Component({
  behaviors: [storeBingsBehavior],// 通过storeBingsBehavior实现自动绑定

  storeBingsBehavior: {
    store,  //指定要绑定的Store
    fields: {
      numA:(store)=>store.numA,  //绑定字段的第一种方式
       numB:(store)=>store.numB,  //绑定字段的第二种方式
       sum:sum                    //绑定字段的第三种方式
    },
    action:{ //指定要绑定的方法
      updateNum2:'updateNum2'
    }
  }
})

5.分包

分包指的是把一个完整的小程序的项目,按照需求划分为不同的子包,在构建时打包成不同的分包,用户在使用时按需进行加载。

好处:

对小程序进行分包的好处主要有以下两点:

**·**可以优化小程序首次启动的下载时间

· 在多团队共同开发时可以更好地解耦协作

独立分包与普通分包的区别:

普通分包必须依赖于主包才能运行

独立分包可以在不下载主包的情况下独立运行

应用场景:

当小程序从普通分包页面启动时,需要首先下载主包

而独立分包不依赖主包即可运行,可以很大程度上提升分包页面的启动速度

引用原则:

① 主包无法引用独立分包内的私有资源

② 独立分包之间,不能相互引用私有资源

③ 独立分包和普通分包之间,不能相互引用私有资源

④ 特别注意:独立分包中不能引用主包内的公共资源

配置分包的的预下载

预下载分包的行为,会在进入指定的页面时触发。在app.json中,使用preloadRule 节点定义分包的预下载规则。

javascript 复制代码
"preloadRule":
  "pages/contact/contact": {
     //network 表示在指定的网络模式下进行预下载
     // 可选值为:sil 和 wifi
     // 默认值为:wifi
    "network":"all",
     //packages表示进入页面后,预下载哪些分包
     //可以通过root或name指定预下载哪些分包
    "packages":["pkgA"]
  }
 }
}

分包预下载的限制

6.自定义tabBar

实现步骤

自定义tabBar分为3步骤:

① 配置信息

② 添加tabBar 代码文件

③ 编写tabBar 代码

javascript 复制代码
<van-tabbar active="{{ active }}"bind:change="onChange">
  <van-tabbar-item wx:for="{{list}}" wx:key="index">
    <image slot="icon" src="{{item.iconPath}}" mode="aspectFit" style="width: 25px;height: 25px;"/>
    <image slot="icon-active" src="{{item.selectedIconPath}}"mode="aspectFit"
     style="width: 25px; height: 25px;"/>
     {{item.text}}
  </van-tabbar-item>
</van-tabbar>

效果:

Vant组件库+自定义组件+全局数据共享

APP.js文档中增加的标签如下:

javascript 复制代码
observers:{
    'sum':function(val) {
      this.setData({
        'list[1].info':val
      })
    }
  }

7. uni-app项目

目录结构

uni-app是一个使用Vue.js开发所有前端应用的框架

分支的提交与合并

1.将本地的tabbar分支进行本地的commit提交:

复制代码
git add
git commit -m "完成 tabBar的开发"

2.将本地的 tabbar 分支合并到本地的master 分支:

复制代码
git checkout master
git merge tabbar

3.将本地的 tabbar 分支推送到远程仓库进行保存:

复制代码
git push -u origit tabbar

4.删除本地的tabbar分支:

复制代码
git branch -d tabbar
相关推荐
小蒜学长1 天前
基于微信小程序的遇见咖啡店点餐系统设计与实现(代码+数据库+LW)
java·spring boot·后端·微信小程序·咖啡店点餐系统
今日热点1 天前
小程序主体变更公证线上办理教程|2026 最新材料规范与审核避坑
小程序
Ai-_Man1 天前
从聊天框到正式文档:AI导出鸭瞄准AI大模型应用的“最后一公里”
开发语言·前端·javascript·人工智能·小程序
省钱兄--zs1 天前
北京24小时自助健身房系统软件开发实战:从架构设计到部署指南
java·数据仓库·spring boot·小程序·需求分析
Ai-_Man2 天前
您您这可以把Grok的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。AI导出鸭
javascript·人工智能·ai·小程序·电脑
光影少年2 天前
Taro 是如何解析入口配置 app.config.ts 和页面配置的?
微信小程序·小程序·typescript·reactjs·百度小程序·taro
用户788477316342 天前
门店核销闭环:小程序扫码 + .NET 幂等接口 + WPF 看板,一天能跑通
微信小程序·c#
DS小龙哥2 天前
从呼吸心率到离床报警:60G雷达睡眠仪全栈开发实录(硬件+MQTT+小程序)DIY一台全功能睡眠监护仪
stm32·单片机·嵌入式硬件·物联网·小程序·智能家居
扶风ff2 天前
练题簿在线免费刷题:刷题、背题、错题复习,一个小程序安排日常备考
学习·小程序
扶风ff2 天前
练题簿在线免费刷题:共享题库、学习任务、在线考试,岗位培训更方便
学习·小程序