黑马微信小程序入门

article/2025/10/1 4:46:11

文章目录

  • 1.环境准备
    • 1.1. 注册账号
    • 1.2 获取APPID
    • 1.3 下载开发工具
  • 2第一个微信小程序
    • 2.1. 打开微信开发者⼯具
    • 2.2. 新建⼩程序项⽬
    • 2.3 填写项目信息
  • 3.小程序的目录结构
    • 3.1. ⼩程序⽂件结构和传统web对⽐
    • 3.2. 基本的项⽬⽬录
  • 4.⼩程序配置⽂件
    • 4.1. 全局配置app.json
    • 4.2 tabbar
    • 4.3 页面配置
  • 5.模板语法
    • 5.1数据绑定
    • 5.2 基本运算
    • 5.3 列表渲染
      • 5.3.1 列表
      • 5.3.2 block标签
    • 7.4 条件渲染
    • 7.5 简易的双向绑定
    • 7.6 事件的绑定
  • 8.样式WXSS
    • 8.1. 尺⼨单位
    • 8.2 样式导入
    • 8.3. 选择器
  • 9.常见组件
    • 9.1 text
    • 9.2. image
    • 9.3 swiger
    • 9.4 navigator
    • 9.10 button按钮
    • 9.11 icon图标
    • 9.12 radio单选
    • 9.13 check多选
  • 10.自定义组件
    • 10.1 创建组件快速入门
    • 10.2组件-⾃定义组件传参
    • 10.2组件的其他属性
  • 11.小程序的生命周期
    • 11.1 应用生命周期(App.js)
    • 11.2 页面生命周期

1.环境准备

1.1. 注册账号

建议使用全新的邮箱,没有注册过其他小程序或者公众号的。地址为:https://mp.weixin.qq.com/wxamp/thirdtools/extend?token=461217894&lang=zh_CN

1.2 获取APPID

由于后期调⽤微信⼩程序的接⼝等功能,需要索取开发者的⼩程序中的 APPID ,所以在注册成功后, 可登录,然后获取APPID。 登录,成功后可看到如下界⾯ 然后复制你的APPID,悄悄的保存起来,不要给别⼈看到
点击开发管理,选择开发设置下面的appid
在这里插入图片描述

1.3 下载开发工具

选择开发工具下面的开发中工具

2第一个微信小程序

2.1. 打开微信开发者⼯具

注意 第⼀次登录的时候 需要扫码登录
在这里插入图片描述

2.2. 新建⼩程序项⽬

点击小程序选择添加
在这里插入图片描述

2.3 填写项目信息

在这里插入图片描述

3.小程序的目录结构

⼩程序框架的⽬标是通过尽可能简单、⾼效的⽅式让开发者可以在微信中开发具有原⽣的APP体验的服 务。
⼩程序框架提供了⾃⼰的视图层描述语⾔ WXML 和 WXSS ,以及 JavaScript ,并在视图层与逻 辑层间提供了数据传输和事件系统,让开发者能够专注于数据与逻辑。

3.1. ⼩程序⽂件结构和传统web对⽐

结构传统web微信⼩程序
结构HTMLWXML
样式CSSWXSS
逻辑JavascriptJavascript
配置JSON

通过以上对⽐得出,传统web 是三层结构。⽽微信⼩程序 是四层结构,多了⼀层 配置.json

3.2. 基本的项⽬⽬录

在这里插入图片描述

4.⼩程序配置⽂件

⼀个⼩程序应⽤程序会包括最基本的两种配置⽂件。⼀种是全局的 app.json 和 ⻚⾯⾃⼰的page.json

4.1. 全局配置app.json

app.json 是当前⼩程序的全局配置,包括了⼩程序的所有⻚⾯路径、界⾯表现、⽹络超时时间、底 部 tab 等。普通快速启动项⽬⾥边的 app.json 配置
在这里插入图片描述

字段的含义

  1. pages 字段⸺⽤于描述当前⼩程序所有⻚⾯路径,这是为了让微信客⼾端知道当前你的⼩程序 ⻚⾯定义在哪个⽬录。
  2. window 字段⸺定义⼩程序所有⻚⾯的顶部背景颜⾊,⽂字颜⾊定义等。
属性类型默认值描述最低版本
navigationBarBackgroundColorHexColor#000000导航栏背景颜色,如 #000000
navigationBarTextStylestringwhite导航栏标题颜色,仅支持 black / white
navigationBarTitleTextstring导航栏标题文字内容
navigationStylestringdefault导航栏样式,仅支持以下值:default 默认样式custom 自定义导航栏,只保留右上角胶囊按钮。iOS/Android 微信客户端 7.0.0,Windows 微信客户端不支持
backgroundColorHexColor#ffffff窗口的背景色
backgroundTextStylestringdark下拉 loading 的样式,仅支持 dark / light
backgroundColorTopstring#ffffff顶部窗口的背景色,仅 iOS 支持微信客户端 6.5.16
backgroundColorBottomstring#ffffff底部窗口的背景色,仅 iOS 支持
enablePullDownRefreshbooleanfalse是否开启当前页面下拉刷新。详见 Page.onPullDownRefresh
onReachBottomDistancenumber50页面上拉触底事件触发时距页面底部距离,单位为px。详见 Page.onReachBottom
pageOrientationstringportrait屏幕旋转设置,支持 auto / portrait / landscape详见 响应显示区域变化2.4.0 (auto) / 2.5.0 (landscape)
disableScrollbooleanfalse设置为 true 则页面整体不能上下滚动。只在页面配置中有效,无法在 app.json 中设置
usingComponentsObject页面自定义组件配置1.6.3
initialRenderingCachestring页面初始渲染缓存配置,支持 static / dynamic2.11.1
stylestringdefault启用新版的组件样式2.10.2
singlePageObject单页模式相关配置2.12.0
restartStrategystringhomePage重新启动策略配置2.8.0

4.2 tabbar

如果小程序是一个多 tab 应用(客户端窗口的底部或顶部有 tab 栏可以切换页面),可以通过 tabBar 配置项指定 tab 栏的表现,以及 tab 切换时显示的对应页面。
在这里插入图片描述
配置项

属性类型必填默认值描述最低版本
colorHexColortab 上的文字默认颜色,仅支持十六进制颜色
selectedColorHexColortab 上的文字选中时的颜色,仅支持十六进制颜色
backgroundColorHexColortab 的背景色,仅支持十六进制颜色
borderStylestringblacktabbar 上边框的颜色, 仅支持 black / white
listArraytab 的列表,详见 list 属性说明,最少 2 个、最多 5 个 tab
positionstringbottomtabBar 的位置,仅支持 bottom / top
custombooleanfalse自定义 tabBar,见详情2.5.0

其中 list 接受一个数组,只能配置最少 2 个、最多 5 个 tab。tab 按数组的顺序排序,每个项都是一个对象,其属性值如下:

属性类型必填说明
pagePathstring页面路径,必须在 pages 中先定义
textstringtab 上按钮文字
iconPathstring图片路径,icon 大小限制为 40kb,建议尺寸为 81px * 81px,不支持网络图片。当 position 为 top 时,不显示 icon。
selectedIconPathstring选中时的图片路径,icon 大小限制为 40kb,建议尺寸为 81px * 81px,不支持网络图片。当 position 为 top 时,不显示 icon。
{"pages": ["pages/index/index","pages/img/img","pages/my/my","pages/search/search","pages/logs/logs","pages/one/one"],"window": {"backgroundTextStyle": "dark","navigationBarBackgroundColor": "#fff","navigationBarTitleText": "Weixin","navigationBarTextStyle": "black","enablePullDownRefresh":true},"tabBar": {"color": "#0094ff","selectedColor":"#009400","list": [{"pagePath": "pages/index/index","text": "首页","iconPath": "icon/_home.png","selectedIconPath": "icon/home.png"},{"pagePath": "pages/img/img","text": "图片","iconPath": "icon/_img.png","selectedIconPath": "icon/img.png"},{"pagePath": "pages/my/my","text": "我的","iconPath": "icon/_my.png","selectedIconPath": "icon/my.png"},{"pagePath": "pages/search/search","text": "搜索","iconPath": "icon/_search.png","selectedIconPath": "icon/search.png"}]},"style": "v2","sitemapLocation": "sitemap.json","lazyCodeLoading": "requiredComponents"
}

4.3 页面配置

每一个小程序页面也可以使用 .json 文件来对本页面的窗口表现进行配置。页面中配置项在当前页面会覆盖 app.json 的 window 中相同的配置项。文件内容为一个 JSON 对象,有以下属性:

配置项

属性类型默认值描述最低版本
navigationBarBackgroundColorHexColor#000000导航栏背景颜色,如 #000000
navigationBarTextStylestringwhite导航栏标题颜色,仅支持 black / white
navigationBarTitleTextstring导航栏标题文字内容
navigationStylestringdefault导航栏样式,仅支持以下值default 默认样式custom 自定义导航栏,只保留右上角胶囊按钮。iOS/Android 微信客户端 7.0.0,Windows 微信客户端不支持
backgroundColorHexColor#ffffff窗口的背景色
backgroundTextStylestringdark下拉 loading 的样式,仅支持 dark / light
backgroundColorTopstring#ffffff顶部窗口的背景色,仅 iOS 支持微信客户端 6.5.16
backgroundColorBottomstring#ffffff底部窗口的背景色,仅 iOS 支持微信客户端 6.5.16
enablePullDownRefreshbooleanfalse是否开启当前页面下拉刷新。
onReachBottomDistancenumber50页面上拉触底事件触发时距页面底部距离,单位为px。
pageOrientationstringportrait屏幕旋转设置,支持 auto / portrait / landscape详见 响应显示区域变化2.4.0 (auto) / 2.5.0 (landscape)
disableScrollbooleanfalse设置为 true 则页面整体不能上下滚动。只在页面配置中有效,无法在 app.json 中设置
usingComponentsObject页面自定义组件配置1.6.3
initialRenderingCachestring页面初始渲染缓存配置,支持 static /dynamic2.11.1
stylestringdefault启用新版的组件样式2.10.2
singlePageObject单页模式相关配置2.12.0
restartStrategystringhomePage重新启动策略配置2.8.0

5.模板语法

text标签和view标签

  1. text相当于web中的span标签 行内元素 不会换行
  2. view 相当于web中的div元素 块级元素 会换行
<!--1. text相当于web中的span标签 行内元素 不会换行2.view 相当于web中的div元素 块级元素 会换行
-->
<text>1</text>
<text>2</text>
<view>1</view>
<view>2</view>

5.1数据绑定

  1. 普通写法
    js中
  data:{msg:"hollow word",num:100,ju:true,per:{name:"smile",age:18},checked:true},

wxml中

<!-- 字符串类型 -->
<view>{{msg}}
</view>
<!-- 数字类型 -->
<view>{{num}}
</view>
<!-- 布尔类型 -->
<view>使用好用{{ju}}
</view>
<!-- 对象类型 --><view>{{per.name}}--{{per.age}}</view><view wx:if="{{ju}}"></view>
<view wx:else="{{ju}}"></view><!-- 使用bool类型充当属性check 字符串和花括号之间不要存在空格,否则会导致识别识别  -->
<checkbox checked="{ju}"></checkbox>

5.2 基本运算

  <!-- 算术运算 -->
<view>{{num+1+1}}</view>
<!-- 三元运算 --><view>{{num>100?'num大于100':'num小于100'}}</view><!-- 判断运算符 --><view wx:if="ju==true">判断为真
</view>
<view wx:else='ju==false'>判断为假
</view>   

5.3 列表渲染

5.3.1 列表

  1. wx:for="{{循环的数组或对象}}" wx:for-item="{{循环项的名称}}" wx:for-index="{{循环的索引}}"
  2. wx:key=“唯一值” 用来提高列表渲染的性能
    wx:key 绑定一个普通字符串的时候 最好为数组对象中的唯一属性
    wx:key="*this" 就表示数组为一个普通的数组 *this表示的是循环项
  3. 当出现嵌套循环的时候一定要注意 绑定的名称不要重名
  4. 默认情况下 小程序循环项的名称和索引的名称分别为 item、index
  student:[{name:'a',age:18},{name:'b',age:19},{name:'c',age:20}]
 <view><view wx:for="{{student}}" wx:for-item="item" wx:for-index="index" wx:key="*this">{{index}}--{{item.name}}--{{item.age}}</view></view>

5.3.2 block标签

  1. 占位符标签
  2. 写代码的时候可以看到这个标签存在
  3. 页面渲染的时候,小程序可以把他们移除掉

7.4 条件渲染

  • wx:if="{{true/false}}"
    if else else if 对应微信小程序分别为 wx:if wx:else wx:elif
  • hidden
    在标签上直接加属性hidden hidden="{{true}}"
  • 什么场景下使用哪一个
  1. 当标签不是频繁的切换显示 优先使用wx:if 直接把标签从页面结构给移除掉

  2. 当表示频繁的切换显示 优先使用hiddem 通过添加样式的方式来切换显示

7.5 简易的双向绑定

input输入的数据在页面上显示出来
wxml

<input model:value="{{num}}" />

js

  data: {num:0}

7.6 事件的绑定

⼩程序中绑定事件,通过bind关键字来实现。如 bindtap bindinput bindchange 等 不同的组件⽀持不同的事件,具体看组件的说明即可。
具体举例:通过按钮的加和减实现数字的加减同时可以在输入框内输入
wxml

<input type="text" bindinput="bindInput"/>
<button bindtap="add" data-operation="{{n}}">+</button>
<button bindtap="del" data-operation="{{n}}">-</button>
<view >{{num}}
</view>

js

Page({/*** 页面的初始数据*/data: {num:0},//输入框的input执行逻辑bindInput(e){console.log(e.detail.value)this.setData({num:e.detail.value})},add(e){console.log(e)console.log(e.target.dataset.operation)this.setData({num:this.data.num+e.target.dataset.operation.id  })},del(e){console.log(e)console.log(e.target.dataset.operation)this.setData({num:this.data.num-e.target.dataset.operation.id})}
})

8.样式WXSS

WXSS( WeiXin Style Sheets )是⼀套样式语⾔,⽤于描述 WXML 的组件样式。 与 CSS 相⽐,
WXSS 扩展的特性有:

  • 响应式⻓度单位 rpx
  • 样式导⼊

8.1. 尺⼨单位

rpx (responsive pixel): 可以根据屏幕宽度进⾏⾃适应。规定屏幕宽为 750rpx 。如在iPhone6 上,屏幕宽度为 375px ,共有750个物理像素,则 750rpx = 375px = 750物理像素 , 1rpx = 0.5px = 1物理像素 1rpx = 0.5px = 1物理像素 。

设备rpx换算px (屏幕宽度/750)px换算rpx (750/屏幕宽度)
iPhone51rpx = 0.42px1px = 2.34rpx
iPhone61rpx = 0.5px1px = 2rpx
iPhone6 Plus1rpx = 0.552px1px = 1.81rpx

建议: 开发微信⼩程序时设计师可以⽤ iPhone6 作为视觉稿的标准。
使⽤步骤:

  1. 确定设计稿宽度 pageWidth
  2. 计算⽐例 750rpx = pageWidth px ,因此 1px=750rpx/pageWidth。
  3. 在less⽂件中,只要把设计稿中的 px => 750/pageWidth rpx 即可

8.2 样式导入

使⽤ @import 语句可以导⼊外联样式表,只⽀持相对路径。
示例
common.wxss

view{color: aqua;font-size: 10px;
}

在demo.wxss中导入common.wxss

/* pages/demo/demo.wxss */
/*
通过@Import 引入 用的是相对路径
*/
@import "../../style/common.wxss"   

8.3. 选择器

特别需要注意的是 ⼩程序 不⽀持通配符 * 因此以下代码⽆效!

选择器样例样例描述
.class.intro选择所有拥有class=“intro” 的组件
#id#firstname选择拥有id=firstname的组件
elementview选择所有 view 组件
element, elementview,checkbox选择所有⽂档的 view 组件和所有的 checkbox 组件
nth-child(n)view:nth-child(n)选择某个索引的标签
::afterview::after在 view 组件后边插⼊内容
::beforeview::before在 view 组件前边插⼊内容

9.常见组件

9.1 text

  1. ⽂本标签
  2. 只能嵌套text
  3. ⻓按⽂字可以复制(只有该标签有这个功能)
  4. 可以对空格 回⻋ 进⾏编码
属性类型默认值必填说明
selectablebooleanfalse文本是否可选
user-selectbooleanfalse文本是否可选,该属性会使文本节点显示为 inline-block
decodebooleanfalse是否解码
<text  selectable decode>111&nbsp;222
</text>

9.2. image

  1. 图⽚标签,image组件默认宽度320px、⾼度240px
  2. ⽀持懒加载
属性名类型默认值说明
srcString图⽚资源地址
modeStringscaleToFill图⽚裁剪、缩放的模式
lazy-loadBooleanfalse图⽚懒加载

mode 有效值: mode 有 13 种模式,其中 4 种是缩放模式,9种是裁剪模式。
在这里插入图片描述
示例

<image src="/icon/home.png" mode="top"></image>

9.3 swiger

微信小程序内置的轮播图组件,其中默认的with为100%,height为150px

属性名类型默认值说明
indicator-dotsBooleanfalse是否显⽰⾯板指⽰点
indicator-colorColorrgba(0, 0, 0, .3)指⽰点颜⾊
indicator-active-colorColor#000000当前选中的指⽰点颜⾊
autoplayBooleanfalse是否⾃动切换
intervalNumber5000⾃动切换时间间隔
circularBooleanfalses是否循环轮播
currentnumber0当前所在滑块的 index
durationnumber500滑动动画时长
circularbooleanfalse是否采用衔接滑动
verticalbooleanfalse滑动方向是否为纵向

还有其他属性看官方文档
案例演示
wxml


<!--1. 轮播图外部容器swagger2. 每一个轮播项 swagger-item 3. swagger 标签存在默认样式with 100% height 150px image 存在默认宽度和高度 320*240swiper无法实现内容撑开4. 找出原图的宽和高  等比例给原图定宽高原图宽度和高度为200*200swiper 宽度/swiper高度 = 原图的宽度 /原图的高度swiper的高度= swiper的宽度 *原图的高度/原图的宽度height=100wx*200/200-->
<swiper autoplay interval="1000" 	circular 	indicator-dots 			bindtransition ><swiper-item > <image mode="widthFix"  src="/icon/home.png" > </image> </swiper-item><swiper-item > <image mode="widthFix"  src="/icon/my.png" > </image> </swiper-item><swiper-item > <image  mode="widthFix" src="/icon/search.png" > </image> </swiper-item>  
</swiper>

wxss

swiper{/* width: 100%;height: calc(100wx*200/200); */width: 100%;height: calc(720rpx*200/200)
}image{width: 100%;
}

9.4 navigator

导航组件 类似超链接标签

属性名类型默认值说明
targetStringself在哪个⽬标上发⽣跳转,默认当前⼩程序,可选值 self/miniProgram
urlString当前⼩程序内的跳转链接
open- typeStringnavigate跳转⽅式

open-type 有效值:

说明
navigate保留当前⻚⾯,跳转到应⽤内的某个⻚⾯,但是不能跳到tabbar ⻚⾯
redirect关闭当前⻚⾯,跳转到应⽤内的某个⻚⾯,但是不允许跳转到tabbar ⻚⾯。
switchTab跳转到 tabBar ⻚⾯,并关闭其他所有⾮ tabBar ⻚⾯
reLaunch关闭所有⻚⾯,打开到应⽤内的某个⻚⾯ navigateBack 关闭当前⻚⾯,返回上⼀⻚⾯或多级⻚⾯。可通过 getCurrentPages() 获取当 前的⻚⾯栈,决定需要返回⼏层
exit退出⼩程序,target="miniProgram"时生效

9.10 button按钮

属性类型默认值必填说明
sizestringdefault按钮的⼤⼩
typestringdefault按钮的样式类型
plainbooleanfalse按钮是否镂空,背景⾊透明
disabledbooleanfalse是否禁⽤
loadingbooleanfalse名称前是否带 loading 图标
form- typestring⽤于 组件,点击分别会触发 组件的 submit/reset 事件
open- typestring微信开放能⼒

size的合法值

说明
default默认⼤⼩
mini⼩尺⼨

type的合法值

说明
primary绿⾊
default⽩⾊
warn红⾊

form-type 的合法值

说明
submit提交表单
reset重置表单

open-type 的合法值

说明
contact打开客服会话,如果⽤⼾在会话中点击消息卡⽚后返回⼩程序,可以从bindcontact 回调中获得具体信息
share触发⽤⼾转发,使⽤前建议先阅读使⽤指引
getPhoneNumber获取⽤⼾⼿机号,可以从bindgetphonenumber回调中获取到⽤⼾信息
getUserInfo获取⽤⼾信息,可以从bindgetuserinfo回调中获取到⽤⼾信息 launchApp 打开APP,可以通过app-parameter属性设定向APP传的参数
penSetting打开授权设置⻚
feedback打开“意⻅反馈”⻚⾯,⽤⼾可提交反馈内容并上传⽇志,开发者可以登 录⼩程序管理后台后进⼊左侧菜单“客服反馈”⻚⾯获取到反馈内容

具体案例
wxml

<button size="default" > 默认大小</button>
<button size="mini">小尺寸</button>
<button type="primary">绿色</button>
<button type="default" disabled>白色</button>
<button type="warn" >红色</button>
<button type="warn" plain>plain 红色</button>
<button loading type="primary">加载中</button>
<button plain type="warn">镂空</button><!--button开发open-typecontact:直接打开客服对话功能 需要的微信小程序后台配置share 转发当前的小程序要微信朋友中 不能大小程序分享到朋友圈getPhoneNumber 获取当前用户的手机号码信息 结合一个事件来使用  不是企业的小程序账号 没有权限获取用户的手机号码使用方式:1.绑定一个事件 bindgetphonenumber 2.在事件的回调函数中通过参数来获取信息 3.获取到的用户信息是加密过的 需要自己搭建后台服务器,在后台服务器中解析电话号码 返回到小程序中就可以看到消息了getUserInfo  获取当前用户的个人信息1. 使用方法类似于获取用户的个人信息2.可以直接获取 不存在加密字段 launchApp 在小程序中直接打开app1.需要在APP中通过APP的某个链接打开小程序2.在小程序中通过这个功能直接打开app举例 京东app和京东小程序 openSetting 打开小程序内置的授权页面授权页面中只会出现用户曾经点击过的页面feedback 打开小程序内置的意见反馈页面   只能通过真机调试的功能打开         
-->
<button open-type="contact">contact</button>
<button open-type="share">share</button>
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber" >getPhoneNumber</button>
<button open-type="getUserInfo" bindgetuserinfo="getUserInfo">getUserInfo</button>
<button open-type="launchApp">launchApp</button>
<button open-type="openSetting">openSetting</button>
<button open-type="feedback">feedback</button>

js

Page({//获取用户的手机号码getPhoneNumber(e){console.log(e)},//获取用户的信息getUserInfo(e){console.log(e)}
})

9.11 icon图标

属性类型默认值必填说明
typestringicon的类型,有效值:success, success_no_circle, info, warn, waiting, cancel, download, search, clear
sizenumber/string23icon的大小
colorstringicon的颜色,同css的color

样例

<icon type="success" size="23" color=""> </icon>
<icon type="info" size="13" color="green"> </icon>
<icon type="warn" size="40" color="red"> </icon>
<icon type="cancel" size="23" color="yellow"> </icon>
<icon type="download" size="23" color="pink"> </icon>
<icon type="clear" size="23" color=""> </icon>

9.12 radio单选

属性类型默认值必填说明
valuestringradio 标识。当该radio 选中时,radio-group 的 change 事件会携带radio的value
checkedbooleanfalse当前是否选中
disabledbooleanfalse是否禁用
colorstring#09BB07radio的颜色,同css的color

9.13 check多选

属性和单选radio大概一致
应用举例
wxml

<radio-group bindchange="change">
<radio value="" color="red"></radio>
<radio value="" color="red"></radio>    
</radio-group>
您的性别是:{{gen}}<checkbox-group bindchange="change1"><checkbox wx:for="{{list}}" wx:item="item" wx:key="id" value="{{item.name}}">{{item.name}}</checkbox></checkbox-group>您选择的水果是{{che}}

js文件

// pages/icon/icon.js
Page({/*** 页面的初始数据*/data: {gen:'',list:[{id:0,name:"苹果",value:"苹果"},{id:1,name:"香蕉",value:"香蕉"},{id:2,name:"梨",value:"梨"}],che:''},change(e){console.log(e)this.setData({gen:e.detail.value})},change1(e){console.log(e)this.setData({che:e.detail.value})}
})

10.自定义组件

⼩程序允许我们使⽤⾃定义组件的⽅式来构建⻚⾯。

10.1 创建组件快速入门

创建组件的三个步骤:

  1. 创建组件
  2. 什么组件
  3. 在页面中使用自定义组件
    1,创建组件
    类似于页面,一个自定义组件由 json wxml wxss js 4个文件组成
    可以在微信开发者⼯具中快速创建组件的⽂件结构,在创建组件的目录先选择创建component
    在这里插入图片描述
    创建好的目录结构
    在这里插入图片描述
    2.声明组件
    ⾸先需要在组件的 json ⽂件中进⾏⾃定义组件声明
    在Tabs.json文件中
    在这里插入图片描述
    标签文件中的内容,在tabs.wxml中
    在这里插入图片描述

在要使用的组件中声明组件
假设我在demo1文件中使用Tabs组件,在demo1.json中声明使用的组件
在demo1.js声明使用的组件

{"usingComponents": {"Tabs":"../../component/Tabs/Tabs"}
}

在这里插入图片描述
在demo1.wxml使用组件

<Tabs></Tabs>

结果展示
在这里插入图片描述

10.2组件-⾃定义组件传参

  1. ⽗组件通过属性的⽅式给⼦组件传递参数
  2. ⼦组件通过事件的⽅式向⽗组件传递参数
    实例演示
    tabs.js
// component/Tabs/Tabs.js
Component({/*** 组件的属性列表* * 从父组件中接收的数据*/properties: {//要接收的数据名称Tabs:{// type 要接收数据的类型type:Array,// value 默认值value:''}},/*** 组件的初始数据*/data: {},/*** 组件的方法列表*//*** 页面.js文件中 存放事件的回调函数的时候 存放在data的统计目录下* 组件.js文件中 存放事件的回调函数的时候 必须要存放在methods中*/methods: {bindItemTip(e){/*** 1. 绑定回调事件 需要在methods中绑定* 2.获取被点击的索引* 3.获取原数组* 4.对数组循环*    每一个循环属性改为false*    给当前所以添加激活选中效果* * 5.点击触发事件的时候*   触发父组件中的自定义事件 同时传递数据给父组件*    this.triggerEvent{"父组件自定义组件的名称","要传递的参数"}*///获取索引const {index}=e.currentTarget.dataset;this.triggerEvent("itemChange",{index});//5.点击触发事件的时候 触发父组件中的自定义事件 同时传递数据给父组件// this.triggerEvent("itemchange",index);// data中的原数组// let {Tabs}=this.data; //相当于 let tabs=this.data.tabs        //循环数组// for(let i=0;i<this.data.Tabs.length;i++)// {//   if(i===index)//   {//     this.data.Tabs[i].isActive=true//   }//   else{//     this.data.Tabs[i].isActive=false//   }// }// this.setData({//   Tabs// })}}
})

tabs.wxss

.tabs{}
.tabs_title{display: flex;padding: 10rpx 0;
}
.title_item{flex: 1;display: flex;justify-content: center;align-items: center;
}
.active{color: red;border-bottom: 5rpx solid currentColor;
}
.tabs_cotent{}

tabs.wxml

<view class="tabs"><view class="tabs_title"><!-- <view class="title_item active">首页</view><view class="title_item">原创</view><view class="title_item">分类</view><view class="title_item">关于</view>   --><view wx:for="{{Tabs}}" class="title_item {{item.isActive?'active':' '}}" wx:key="id" bindtap="bindItemTip"data-index="{{index}}">{{item.name}}</view>
</view>      <view class="tabs_cotent"><!-- 内容 --><!--slot 标签 其实就是一个占位符 插槽等到父组件调用子组件的时候,在传递标签,最终通过标签传递过来,这些标签会替代搜了他插槽的位置--><slot></slot></view></view>

demo1.js

// pages/demo1/demo1.js
Page({/*** 页面的初始数据*/data: {Tabs:[{id:0,name:"首页",isActive:true},{id:1,name:"原创",isActive:false},{id:2,name:"分类",isActive:false},{id:3,name:"关于",isActive:false}]},//自定义事件 用来接收组件传递过来的数据bindItemChange(e){console.log(e.detail)const {index}=e.detailconsole.log(index)let {Tabs}=this.data; //相当于 let tabs=this.data.tabs        // 循环数组for(let i=0;i<this.data.Tabs.length;i++){if(i===index){this.data.Tabs[i].isActive=true}else{this.data.Tabs[i].isActive=false}}this.setData({Tabs})},/*** 生命周期函数--监听页面加载*/onLoad: function (options) {},/*** 生命周期函数--监听页面初次渲染完成*/onReady: function () {},/*** 生命周期函数--监听页面显示*/onShow: function () {},/*** 生命周期函数--监听页面隐藏*/onHide: function () {},/*** 生命周期函数--监听页面卸载*/onUnload: function () {},/*** 页面相关事件处理函数--监听用户下拉动作*/onPullDownRefresh: function () {},/*** 页面上拉触底事件的处理函数*/onReachBottom: function () {},/*** 用户点击右上角分享*/onShareAppMessage: function () {}
})

demo1.wxml

<!--1. 父组件(页面)向子组件传递数据 通过标签属性的方式进行1. 在子组件上进行接收2.把这个数据当成data中的数据直接用即可2.子向父传递对象 通过事件的方式在子组件的标签上加一个自定义事件    
-->
<Tabs Tabs="{{Tabs}}" binditemChange="bindItemChange"><!--solt标签 其实就是一个占位符 插槽等到父组件调用子组件的时候 在传递标签过来 最终这些被传递过来标签 会替代solt插槽的位置--><block wx:if="{{Tabs[0].isActive}}">1</block><block wx:if="{{Tabs[1].isActive}}">2</block><block wx:if="{{Tabs[2].isActive}}">3</block><block wx:if="{{Tabs[3].isActive}}">4</block></Tabs>

效果图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10.2组件的其他属性

Component 构造器可⽤于定义组件,调⽤ Component 构造器时可以指定组件的属性、数据、⽅法 等

定义段类型是否必填描述
propertiesObject Map组件的对外属性,是属性名到属性设置的映射表
dataObject组件的内部数据,和 properties ⼀同⽤于组件的模板渲 染
methodsObject组件的⽅法,包括事件响应函数和任意的⾃定义⽅法,关于 事件响应函数的使⽤
createdFunction组件⽣命周期函数,在组件实例刚刚被创建时执⾏,注意此 时不能调⽤ setData
attachedFunction组件⽣命周期函数,在组件实例进⼊⻚⾯节点树时执⾏
readyFunction组件⽣命周期函数,在组件布局完成后执⾏
movedFunction组件⽣命周期函数,在组件实例被移动到节点树另⼀个位置 时执⾏
detachedFunction组件⽣命周期函数,在组件实例被从⻚⾯节点树移除时执⾏

11.小程序的生命周期

小程序的生命周期分为应用生命周期和页面生命周期

11.1 应用生命周期(App.js)

属性类型必填说明
onLaunchfunction监听⼩程序初始化。 应用第一次启动时就会触发事件,一般用于获取用户的个人信息
onShowfunction监听⼩程序启动或切前台。 应用被用户看见时触发,对应用的数据或页面效果重置
onHidefunction监听⼩程序切后台。 应用被隐藏时触发,暂停或清除定时器
onErrorfunction错误监听函数。 应用发生错误时会被触发。在应用发生代码报错的时候,收集用户的错误信息,通过异步请求,将错误信息发送给后台
onPageNotFoundfunction⻚⾯不存在监听函数。应用第一次启动的时候,找不到第一个入口页面才会触发(如果页面不存在,可以通过js的方式重新跳转页面,跳转到第二个页面去)

11.2 页面生命周期

属性类型说明
dataObject⻚⾯的初始数据
onLoadfunction监听⻚⾯加载 ,onLoad发送异步请求来初始化页面数据
onShowfunction监听⻚⾯显⽰
onReadyfunction监听⻚⾯初次渲染完成
onHidefunction监听⻚⾯隐藏
onUnloadfunction监听⻚⾯卸载(关闭当前页面即可触发)
onPullDownRefreshfunction监听⽤⼾下拉动作
onReachBottomfunction⻚⾯上拉触底事件的处理函数,上拉加载下一页
onShareAppMessagefunction⽤⼾点击右上⻆转发
onPageScrollfunction⻚⾯滚动触发事件的处理函数
onResizefunction⻚⾯尺⼨改变时触发
onTabItemTapfunction当前是 tab ⻚时,点击 自己tab item时触发

http://chatgpt.dhexx.cn/article/S7RBtPLx.shtml

相关文章

【微信小程序】简洁好用的icon(94/100)

布局 <!--pages/icon/icon.wxml--> <icon class"icon-box-img" type"success" size"50"></icon> <view class"icon-box-title">成功</view> <icon class"icon-box-img" type"info&q…

【微信小程序】组件使用及属性参考

文章目录 3.1 视图容器组件3.1.1 视图容器view3.1.2 滚动视图scroll-view3.1.3 可移动视图movable-view3.1.4 覆盖视图3.1.5 滑块视图swiper 3.2 内容组件3.2.1 图标icon3.2.2 进度条progress3.2.3 文本text 3.3 导航组件3.4 小程序UI框架3.4.1 WeUI3.4.2 iView3…

微信小程序icon图标引入

一、iconfont-阿里巴巴矢量图标库 下载需要的图标 1.将想要的图标添加入库并下载代码 二、下载成功后&#xff0c;将得到一个名为 "download.zip" 的文件&#xff0c;然后解压得到这么一堆文件&#xff1a; 三、转换 ttf 文件为 base64 推荐去 https://transfonter…

关于微信小程序图标icon的五种实现方案

关于图标icon 微信小程序中的 icon 组件只有 9 种类型 success、success_no_circle、info、warn、waiting、cancel、download、search、clear。 只有9个类型的图标往往是不够的&#xff0c;需要拓展更多的icon组件图标。 第一种方案 直接使用图片&#xff08;简单粗暴&#xf…

微信小程序引入外部icon

微信小程序引入外部icon最详细介绍 1.获取图标 阿里矢量库&#xff1a;iconfont-阿里巴巴矢量图标库 选中相应的图标 添加图标到购物车&#xff08;多个图标&#xff09; ​​​​​ 添加项目 下载本地 解压转换—-》 转化网站&#xff1a;Online font-face generator…

如何在微信小程序中使用icon字体图表

1.首先我们需要去icon字体库中选中几个想要的图标加入购物车 2.点击右上角的购物车图标进入 3. 进入购物车&#xff0c;点击下载代码 4.下载好的文件夹进行解压 5.将.ttf后缀文件转化为base64格式的方式&#xff08;推荐网址&#xff1a;Online font-face generator — Transfo…

微信小程序添加icon图标教程

1 官方自带 样式基于 v2 “style”: “v2”, app.json设置的v2&#xff0c;删除这个就没有呢 icon 官方地址 https://developers.weixin.qq.com/miniprogram/dev/component/icon.html <view class"cu-list grid col-3"><view class"cu-item" wx:…

微信小程序使用iconfont在线icon

微信小程序可以使用外部icon&#xff0c;比较常用的就是iconfont&#xff0c;可以搜索想要的icon和选择想要的颜色然后png下载&#xff0c;然后放到小程序的images文件夹里本地使用。 为了节省空间&#xff0c;也可以在线使用 在iconfont官网中我的页面创建一个自己的项目 然后…

微信小程序icon图标怎么用

先看效果 有的图标weapp中没有就需要去阿里图标库找合适的,但是小程序不能直接引入图标的链接(不支持html) icon使用 1 先建空项目&#xff0c;2搜索想要的图标&#xff0c;3加入购物车&#xff0c;4生成代码 &#xff0c;5在项目里的index.html引入 使用 link-css标签 将复制生…

微信小程序中使用icon

一、挑选icon,生成文件 1、打开阿里icon https://www.iconfont.cn/ 选中图标 ,添加至购物车 2.将项目下载到本地 3.下载文件的目录结构 二、转换ttf文件&#xff08;原因: 小程序的wxss文件font-face的url不接受http地址作为参数,可以接受base64,因此可以先将字体文件下载后…

【愚公系列】2022年08月 微信小程序-icon图标详解

文章目录 前言一、自带图标二、实现图标的五种方案1.图片2.精灵图3.CSS绘图4.矢量字体4.1 使用步骤 5.SVG格式 前言 在小程序中经常会用到各种各样的图标&#xff0c;如果这些图标都使用图片的话&#xff0c;将会大大增加小程序打包后的体积&#xff0c;而小程序限制代码最大2…

微信小程序icon图标使用详解

也许你迷茫&#xff0c;但是我想说&#xff0c;在你迷茫的同时&#xff0c;保持本心&#xff0c;过好今天就好。 icon 在微信小程序中用来显示图标。 1 icon 图标的基本使用 <view class"container"><view class"icon-box"><icon class&quo…

内存控制器简介

CPU执行指令得到4个地址的数据&#xff0c;对于CPU&#xff0c;1个地址对应的数据是1字节。 &#xff08;例1&#xff09; CPU要读4字节数据&#xff0c;但是nor flash是以16位数据来访问的&#xff0c;一次只能提供2字节&#xff0c;那怎么办&#xff1f;谁来处理这个问…

CPU/寄存器/内存

因为要了解多线程&#xff0c;自然少不了一些硬件知识的科普&#xff0c;我没有系统学习过硬件知识&#xff0c;仅仅是从书上以及网络上看来的&#xff0c;如果有错误请指出来。 CPU&#xff0c;全名Central Processing Unit&#xff08;中央处理器&#xff09;。这是一块超大规…

(一)自动内存管理

自动内存管理 文章目录 自动内存管理Java 内存区域与内存溢出异常运行时数据区域垃圾收集器与内存分配策略怎么判断对象是否存活&#xff1f;垃圾回收算法经典的垃圾收集器 Java 内存区域与内存溢出异常 运行时数据区域 Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存…

内存控制器与SDRAM_内存接口概念

辅线1_硬件知识_内存接口概念 如图是S3C2440是个片上系统&#xff0c;有GPIO控制器&#xff08;接有GPIO管脚&#xff09;,有串口控制器 (接有TXD RXD引脚)。 配置GPIO控制器相应的寄存器&#xff0c;即可让引脚输出高低电平&#xff1b;配置UART控制器相应的寄存器&#xff0c…

内存分配器(Memory Allocator)

原文链接 &#xff1a; https://yq.aliyun.com/articles/254033 对于大多数开发者而言&#xff0c;系统的内存分配就是一个黑盒子&#xff0c;就是几个API的调用。有你就给我&#xff0c;没有我就想别的办法。来UC前&#xff0c;我就是这样认为的。实际深入进去时&#xff0c;…

C-内存管理

内存管理 堆,栈,静态区 c程序地址空间分布规则: 栈是从高地址向低地址延伸的,后创建的变量,后入栈,那么地址就越小. 静态变量,作用域不变,声明周期发生改变.本质原因是存储位置发生改变.编译器编译的时候放到了全局数据区. #include<stdio.h> #include<stdlib.h>…

内存控制器(以位宽为16的NOR FLASH举例)

CPU 执行的指令&#xff1a; “ldr r0,[某个地址 A]”&#xff0c;ldr 是装载 4个字节&#xff0c;这是从这个地址里读取某个数据存到 r0 里去。 A 地址的 1 字节数据。A1 地址的 1 字节数据。A2 地址的 1 字节数据。A3 地址的 1 字节数据。即&#xff0c; ldr 是得到 4 个地…

内存管理单元(MMU)与内存控制器

内存管理单元&#xff08;Memory Management Unit &#xff09; 内存管理单元是在CPU内部 内存管理单元的作用&#xff1a; 虚拟地址到物理地址映射 存储器访问权限控制 高速缓存支持 以下出自&#xff1a;https://blog.csdn.net/yetaibing1990/article/details/88344416 如…