黑马程序员-小程序

本文详细介绍了微信小程序的基础知识,包括快捷键、数据绑定、运算、列表渲染、条件渲染、事件绑定、样式、常见组件如view、text、image、swiper的使用,并探讨了小程序的生命周期和实用技巧。内容涵盖wxss样式、自定义组件以及页面和应用的生命周期方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

黑马程序员-小程序

前言

【WEB前端】零基础玩转微信小程序的网课笔记


一、快捷键

1.alt + shift:多行同时打字

2.ctrl + D :匹配相同的文本

3.shift + end : 选中光标所在位置后的所有文本

4.shift + alt + “↓”/“↑” : 向下/上复制

二、模块语法

1.数据绑定

<!--
  1.text相当于以前web中的span标签 行内元素 不会换行
  2.view相当于web的div标签 块级元素 会换行
  3.checkbox 以前的复选框标签
-->
<!--1.字符串-->
<view> {{msg}}</view>
<!--2.数字类型-->
<view> {{num}}</view>
<!--3.bool类型-->
<view> 是否是伪娘:{{isGirl}}</view>
<!--4.object类型-->
<view>{{person.age}}</view>
<view>{{person.height}}</view>
<view>{{person.weight}}</view>
<view>{{person.name}}</view>

<!--5.在标签的属性中使用-->
<view data-num="{{num}}">自定义属性</view>
<!--6.使用bool类型充当属性 checked
  1.字符串和花括号之间一定不要存在空格,否则会导致识别失败
  以下写法是错误的示范:
    <checkbox checked="      {{isChecked}}"> </checkbox>
-->
<view>
  <checkbox checked="{{isChecked}}"> </checkbox>
</view>
Page({
  /**
   * 页面的初始数据
   */
  data: {
    msg:"hello mina",
    num:10000,
    isGirl:false,
    person:{
      age:74,
      height:145,
      weight:200,
      name:"富婆"
    },
    isChecked:false,
  }
})

在这里插入图片描述

2.运算

<!--7.运算 => 表达式
  1.可以在花括号中加入表达式--“语句”
  2.表达式
    一般指的是一些简单 运算 数字运算 字符串 拼接 逻辑运算...
    1.数字的加减
    2.字符串的拼接
    3.三元表达式
  3.语句
    1.复杂的代码段
      1.if else
      2.switch
      3.do while
      4.for
-->
<view> {{1+1}}</view>
<view> {{'1'+'1'}}</view>
<view> {{10 % 2 == 0 ? "偶数" : '奇数'}}</view>

在这里插入图片描述

3.列表渲染

3.1 wx:for

<!--
  8.列表循环
    1.wx:for="{{数组/对象}}" wx:for-item="循环项的名称" wx:for-index="循环项的索引"
    2.wx:key="唯一的值"用来提高列表渲染的性能
      1.wx:key 绑定一个普通的字符串的时候 那么这个字符串的 名称 肯定是 循环数组 中的 对象的 唯一属性
      2.wx:key ="*this" 就表示你的数组是一个普通的数组 *this 表示是 循环项
        [1,2,3,44,5] ["1","222","asfds"]
    3.当出现数组的嵌套循环的时候 尤其要注意 以下绑定的名称不要重名
      wx:for-item="item" wx-for-index="index"
    4.默认情况下 我们不写
      wx:for-item="item" wx-for-index="index"
      小程序也会把循环项的名称 和 索引的名称 item 和 index
      只有一层循环的话(wx:for-item="item" wx:for-index="index") 可以省略

  9.对象循环
    1.wx:for="{{对象}}" wx:for-item="对象的值" wx:for-index="对象的属性"
    2.循环对象的时候 最好把 item 和 index 的名称都修改一下
      wx:for-item="value" wx:for-index="key"
-->
<view>
  <view wx:for="{{list}}" 
        wx:for-item="item" 
        wx:for-index="index"
        wx:key="id">
    索引:{{index}}
    --
    值:{{item.name}}
  </view>
</view>
<view>
  <view>对象循环</view>
  <view wx:for="{{person}}"
        wx:for-item="value" 
        wx:for-index="key">
    属性:{{key}}
    属性值:{{value}}
  </view>
</view>
Page({
  /**
   * 页面的初始数据
   */
  data: {
    person:{
      age:74,
      height:145,
      weight:200,
      name:"富婆"
    },
    list:[
      {
        id:0,
        name:"猪八戒"
      },
      {
        id:1,
        name:"天蓬元帅"
      },
      {
        id:2,
        name:"悟能"
      }
    ]
  }
})

在这里插入图片描述

3.2 Block

<!--
  10 block
    1.占位符一样的标签
    2.写代码的时候 可以看到这标签存在的
    3.页面渲染时 小程序会将它移除掉
-->
<view>
  <block wx:for="{{list}}" 
        wx:for-item="item" 
        wx:for-index="index"
        wx:key="id"
        class="my_list">
    索引:{{index}}
    --
    值:{{item.name}}
</block>
</view>
Page({
  /**
   * 页面的初始数据
   */
  data: {
    list:[
      {
        id:0,
        name:"猪八戒"
      },
      {
        id:1,
        name:"天蓬元帅"
      },
      {
        id:2,
        name:"悟能"
      }
    ]
  }
})

在这里插入图片描述

4.条件渲染

4.1 wx:if

4.2 Hidden

<!--
  11.条件渲染
    1.wx:if="{{true/false}}"
      1.if,else,if else
        wx:if
        wx:elif
        wx:else
      2.hidden
        1.在标签上直接加入属性 hidden
        2.hidden="true"
      3.什么场景下用哪个
        1.当标签不是频繁地切换显示 优先使用 wx:if
          直接把标签从页面结构给移除掉
        2.当标签频繁地切换使用时 优先使用hidden
          通过添加样式的方式来切换显示
          hidden属性不要和样式display一起使用
  -->
  <view>
  <view>条件渲染</view>
  <view wx:if="{{true}}">显示</view>
  <view wx:if="{{false}}">隐藏</view>
  <view wx:if="{{false}}">1</view>
  <view wx:elif="{{false}}">2</view>
  <view wx:else>3</view>
  <view>----------------------------</view>
  <view hidden="true">hidden</view>
  <view>--------000----------</view>
  <view wx:if="{{false}}">wx:if</view>
  <view hidden style="display : flex;">hidden</view>
  </view>

在这里插入图片描述

三、小程序事件的绑定

1.事件绑定

<!--
  1.需要给input标签绑定 input事件
    绑定的关键字 bindinput
  2.如何获取 输入框的值
    通过事件源对象来获取
    e.detail.value
  3.把输入框的值 赋值到 data中
    不能直接
      1.this.data.num = e.detail.value
      2.this.num = e.detail.value
    争取的写法:
      this.setData({
        num:e.detail.value
      })
-->
<input type="text" bindinput="handleInput"/>
<view>
  {{num}}
</view>
// pages/demo04/demo04.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    num:0
  },
  //输入框的input事件的执行逻辑
  handleInput(e){
   // console.log(e.detail.value);
    this.setData({
      num:e.detail.value
    })
  }
})

在这里插入图片描述

2.加减法

<!--
  1.需要给input标签绑定 input事件
    绑定的关键字 bindinput
  2.如何获取 输入框的值
    通过事件源对象来获取
    e.detail.value
  3.把输入框的值 赋值到 data中
    不能直接
      1.this.data.num = e.detail.value
      2.this.num = e.detail.value
    争取的写法:
      this.setData({
        num:e.detail.value
      })
  4.需要加入一个点击事件
      1.bindtap
      2.无法在小程序当中的 事情中 直接传参
      3.需要通过自定义属性的方式来传递参数
      4.事件源中获取自定义属性
-->
<input type="text" bindinput="handleInput"/>
<button bindtap="handletap" data-operation="{{1}}">+</button>
<button bindtap="handletap" data-operation="{{-1}}">-</button>
<view>
  {{num}}
</view>
// pages/demo04/demo04.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    num:0
  },
  //输入框的input事件的执行逻辑
  handleInput(e){
   // console.log(e.detail.value);
    this.setData({
      num:e.detail.value
    })
  },
  //加减按钮的事情
  handletap(e){
    //console.log(e);
    //1.获取自定义属性 operation
    //
    const operation = e.currentTarget.dataset.operation;
    this.setData({
      num:this.data.num+operation
    })
  }
})

在这里插入图片描述

四、样式wxss

1.尺寸单位

/*1.小程序中不需要主动引入样式文件

  2.需要把页面中的某些元素的单位,由px改成rpx

	1.设计稿是750px

​      750px=750rpx

​      1 px = 1 rpx

​    2.把屏幕换成375px

​      375px=750rpx

​      1 px = 0.5 rpx

​    3.存在一个设计稿 宽度414 或者未知page

​      1.设计稿 page 存在一个元素 宽度100px

​      2.拿以上的需求,去实现不同宽度的页面适配

​      page px = 750 rpx

​      px = 750 rpx / page

​      100px = 750 rpx * 100 / page

​    4.利用一个属性 calc属性 css 和 wxss 都支持 一个属性

​      1.750和rpx中间不要留空格

​      2.运算符的两边也不要留空格

*/

 

view{

  width: 200prx;

  height: 200rpx;

  background-color: aqua;

  /*一下代码写法错误*/

  /*width: 750 rpx * 100 / 375;*/

  width: calc(750rpx * 100 / 375);

}
<view>
  rpx
</view>

在这里插入图片描述

2.样式导入

新建文件:
在这里插入图片描述

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

引入文件

/*
  1.引入的代码是通过 @import 来引入的
  2.路径 只能写相对路径
  */
  @import "../../styles/common.wxss";
<view>pages/demo06/demo06.wxml</view>

五、常见组件

1.view

代替html 的 div
在这里插入图片描述

2.text

\1. ⽂本标签
\2. 只能嵌套text
\3. ⻓按⽂字可以复制(只有该标签有这个功能)
\4. 可以对空格 回⻋ 进⾏编码
在这里插入图片描述
对字符进行编码
在这里插入图片描述

<!--
  1.长按文字复制 selectable
  2.对文本内容 进行解码
-->
<text selectable='{{true}}' decode="true">
  text
  &nbsp;123 &lt;
</text>

3.image

在这里插入图片描述

<!--
  1.image图片标签
    1.src 指定要加载的图片的路径
      图片存在默认的宽度和高度 320*240  原图大小是200*100
    2.mode 决定 图片内容 如何 和 图片标签 宽高 做适配
      1.scaleToFill 默认值 不保持纵横⽐缩放图⽚,使图⽚的宽⾼完全拉伸⾄填满 image 元素
      2.aspectFit 保持宽高比 确保图片的长边显示出来 页面轮播图 常用的
      3.aspectFill 保持纵横⽐缩放图⽚,只保证图⽚的 短边 能完全显⽰出来。 少用
      4.widthFix 相当于以前web图片的 宽度指定之后 高度 会自己按比例来调整 常用
      5.top 不缩放图⽚,只显⽰图⽚的顶部区域 类似于以前的背景图片位置
    3.小程序当中的图片 直接支持 懒加载
      1.lazy-load 会自己判断 当 图片 出现在 视口 上下三屏的高度之内 小程序会自己开始加载图片
-->
<image mode = "bottom" lazy-load src="../img/23.png">
</image>

image{
  box-sizing: border-box;
  border:1px solid red;
  width: 300px;
  height: 200px;
}

在这里插入图片描述

4.swiper

微信内置轮播图组件

4.1 swiper

4.2 swiper-item

在这里插入图片描述

<!--
  1.轮播图的外层容器 swiper
  2.每一个轮播项 swiper-item
  3.swiper标签 存在默认样式
    1.width 100%
    2.height 150px image存在默认宽度和高度 320*240
    3.swiper 高度 无法实现由内容撑开
  4.先找出原图的宽度和高度 再等比例地给swiper定宽度和高度
    原图:1920*1080
    swiper 宽度/swiper 高度 = 原图的宽度/原图的高度
    swiper 高度 = swiper 宽度 * 原图的宽度/原图的高度
    height:100vw * 1080 / 1920
  5.autoplay 自动轮播 一般是5s
  6.interval 修改轮播时间
  7.circular 衔接轮播
  8.indicator-dots 显示指示器 分页器
  9.indicator-color 未选中颜色 
    indicator-active-color 当前选中的指⽰点颜⾊
-->
<swiper autoplay interval="2000" circular indicator-dots indicator-color="#FFFFFF" 
indicator-active-color="#FF0000">
  <swiper-item><image mode="widthFix" src="../img/23.png"></image></swiper-item>
  <swiper-item><image mode="widthFix" src="../img/23.png"></image></swiper-item>
  <swiper-item><image mode="widthFix" src="../img/23.png"></image></swiper-item>
</swiper>
swiper{
  width: 100%;
  height: calc(100vw * 1080 / 1920);
}
image{
  width: 100%;
}

5.navigator

导航组件 类似超链接标签
open-type 有效值:
在这里插入图片描述

<!--
  导航组件 navigator
  0.块级元素 默认会换行 可以直接加入宽度和高度
  1.url 要跳转的页面路径 绝对路径 相对路径
  2.target 要跳转到当前的小程序 还是 其他小程序页面 self/miniProgram
    self 默认值 自己的小程序页面
    miniProgram 其他的小程序页面
  3.open-type 跳转的方式
    1.navigate 默认值 | 保留当前⻚⾯,跳转到应⽤内的某个⻚⾯,但是不能跳到tabbar ⻚⾯
    2.redirect 关闭当前⻚⾯,跳转到应⽤内的某个⻚⾯,但是不允许跳转到tabbar ⻚⾯。
    3.switchTab 跳转到 tabBar ⻚⾯,并关闭其他所有⾮ tabBar ⻚⾯
    4.reLaunch 关闭所有⻚⾯,打开到应⽤内的某个⻚⾯
-->
<navigator url="/pages/demo10/demo10">轮播图页面</navigator>
<navigator url="/pages/index/index">直接跳转到tabBar页面</navigator>
<navigator open-type="redirect" url="/pages/demo10/demo10">轮播图页面 redirect</navigator>
<navigator open-type="switchTab" url="/pages/index/index">switchTab 跳转到 tabBar ⻚⾯</navigator>
<navigator open-type="reLaunch" url="/pages/index/index">reLaunch 可以随便跳</navigator>

6.rich-text

富文本标签 | 可以将字符串解析成 对应标签,类似 vue中 v-html 功能

<!--
  rich-text 富文本标签
  1.nodes属性来实现
    1.接收标签字符串
    2.接收对象数组
-->
<rich-text nodes="{{html}}"></rich-text>
// pages/demo12/demo12.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    //1.标签字符串 最常用的
    //    html:'<div class="sc-ifAKCX iLINIY"><a class="sc-EHOje jXFKFG" href="https://www.tmall.com/wow/z/heybox/heyboxrax/heybox?utparam=%7B%22ranger_buckets_native%22%3A%22tsp2584_31920%22%7D&amp;spm=a2141.1.iconsv5.1&amp;scm=1007.home_icon.tmallxp.d&amp;wh_biz=tm&amp;disableNav=YES"><img class="sc-bZQynM iEnsRn" src="https://gw.alicdn.com/tfs/TB1OIxTcLc3T1VjSZLeXXbZsVXa-183-144.png?getAvatar=1"><p class="sc-gzVnrw hKaypx">天猫新品</p></a><a class="sc-EHOje hrPgER" href="https://huodong.m.taobao.com/act/snipcode.html?utparam=%7B%22ranger_buckets_native%22%3A%22tsp2584_31920%22%7D&amp;spm=a2141.1.iconsv5.6&amp;scm=1007.home_icon.chongzzx.d&amp;_wml_code=Vfw8V4IdfflvFcsPv2fKDCLgFlhCoOQ406ZO9WKS70zNVh2FhuClrYZQHV%2BUj8rweMrPJgOrvqON3zeUHJMIALqc03AQZnf3hmtKmJM2g5PuR9UuzwivVDM%2Bil4nBDGBPXlfSqZZA3CdATGQpVOeZMO8SbyJvaZdoC89%2B2Gg8FZsD4wqDUKs7VcgTjZxbgdE&amp;subSource=stcz_1"><img class="sc-bZQynM iEnsRn" src="https://gw.alicdn.com/tfs/TB1llI3f4n1gK0jSZKPXXXvUXXa-183-144.png?getAvatar=1"><p class="sc-gzVnrw hKaypx">充值中心</p></a></div>'
    //2.对象数组
    html:[
      {
        //1.div标签 name属性来指定
        name:"div",
        //2.标签上有哪些属性
        attrs:{
          //标签上的属性 class style
          class:"my_div",
          style:"color:red"
        },
        //3.子节点 children 要接收的数据类型 和nodes第二种渲染方式的数据类型一致
        children:[
          {
            name:"p",
            attrs:{},
            //放文本
            children:[{
              type:"text",
              text:"hell"
            }]
          }
        ]
      }
    ]
  },

})

7.button

<!--
  外观的属性
    1.size 控制按钮大小
      default 默认大小
      mini 小尺寸
    2.type 用来控制按钮的颜色
      default 灰色
      primary 绿色
      warn 红色
    3.plain 按钮是否镂空,背景⾊透明
    4.loading 名称前是否带 loading 图标 是否等待
-->
<button>默认按钮</button>
<button size="mini"> mini默认按钮</button>
<button type="primary"> primary默认按钮</button>
<button type="warn"> warn默认按钮</button>
<button type="warn" plain> warn默认按钮</button>
<button type="primary" loading> primary默认按钮</button>
<!--
  button按钮的开放能力 open-type
    1.contact 直接打开 客服对话功能 要在微信小程序后台设置
    2.share 转发当前小程序 到微信朋友中 不能把小程序分享到朋友圈
    3.getPhoneNumber 获取当前⽤⼾⼿机号 结合一个事件来使用 不是企业的小程序账号 没有权限来获取用户的手机号码的
      1.绑定一个事件 bindgetphonenumber
      2.在事件的回调函数中 通过参数来获取信息
      3.获取到的信息 已经加密过了
        需要用户自己搭建一个小程序的服务器 在后台服务器中进行解析 手机号码 返回到小程序中 可以看到信息了
    4.getUserInfo 获取当前⽤⼾的个人信息 
      1.使用方法 类似 获取用户的手机号码
      2.可以直接获取 不存在加密的字段
    5.launchApp 在小程序中 直接打开app 
      1.需要先在app中 通过app 的某个链接 打开小程序
      2.在小程序中 再通过这个功能 重新打开app
    6.openSetting 打开小程序中内置的 授权页面 
      1.授权页面中 只会出现用户曾经点击过的权限
    7.feedback 打开小程序中内置的 意⻅反馈 ⻚⾯
      1.只能通过真机调试来打开
-->
<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>
// pages/demo13/demo13.js
Page({
  //获取用户的手机号码信息
  getPhoneNumber(e){
    console.log(e);
  },
  //获取用户个人信息
  getUserInfo(e){
    console.log(e);
  }
})

在这里插入图片描述

8.icon

<!--
  小程序中的字体图标
  1.type 图标的类型
    success, success_no_circle, info, warn, waiting, cancel, download, search, clear
  2.size 大小
  3.color 图标的颜色
-->
<icon type="cancel" size="60" color="#0094ff"></icon>

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

9.radio

单选框标签
可以通过 color属性来修改颜色
需要搭配 radio-group ⼀起使⽤

<!--
  radio 单选框
    1.radio标签 必须要和 父元素 radio-group来使用
    2.value 选中的单选框的值
    3.需要给 radio-group 绑定 change 事件
    4.需要在页面中显示选中的值
-->
<radio-group bindchange="handleChange">
  <radio color="red" value="male"></radio>
  <radio value="female"></radio>
</radio-group>

<view>您选中的是:{{gender}}</view>
// pages/demo15/demo15.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    gender:""
  },
  handleChange(e){
    //1.获取单选框中的值
    let gender = e.detail.value;
    //2.把值赋值给data中的数据
    this.setData({
      gender
      //gender:gender
    })
  }
})

在这里插入图片描述

10.checkbox

复选框标签

可以通过 color属性来修改颜色

需要搭配 checkbox-group ⼀起使⽤

<view>
  <checkbox-group bindchange="handleItemChange">
    <checkbox value="{{item.value}}" wx:for="{{list}}" wx:key="id">
      {{item.name}}
    </checkbox>
  </checkbox-group>
  <view>
    选中的水果:{{checkedList}}
  </view>
</view>
// pages/demo16/demo16.js
Page({
  data: {
    list:[
      {
      id:0,
      name:"苹果",
      value:"apple"
    },
    {
      id:1,
      name:"葡萄",
      value:"grape"
    },
    {
      id:2,
      name:"香蕉",
      value:"banana"
    }
  ],
  checkedList:[
  ]
  },
  //复选框的选中事件
  handleItemChange(e){
    //1.获取被选中的复选框的值
    const checkedList = e.detail.value;
    //2.进行赋值
    this.setData({
      checkedList
    })
  }, 
})

六、自定义组件

1.创建自定义组件

类似于页面,一个自定义组件由 json wxml wxss js 4个文件组成
在这里插入图片描述
1.1. 声明组件

⾸先需要在组件的 json ⽂件中进⾏⾃定义组件声明

{
  "usingComponents": {
    "Tabs":"../../components/Tabs/Tabs"
  }
}
Pages17:
<Tabs></Tabs>

1.2. 编辑组件

.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;
}
.title_content{}
// components/Tabs/Tabs.js
Component({
  /**
   * 组件的属性列表
   */
  properties: {

  },

  /**
   * 组件的初始数据
   */
  data: {
    tabs:[
      {
        id:0,
        name:"首页",
        isActive:true
      },
      {
        id:1,
        name:"原创",
        isActive:false
      },
      {
        id:2,
        name:"分类",
        isActive:false
      },
      {
        id:3,
        name:"关于",
        isActive:false
      }
    ]
  },

  /**
   * 组件的方法列表
   */
  methods: {

  }
})
<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}}"
      wx:key="id"
      class="title_item {{item.isActive ? 'active' : ''}}"
      >
      {{item.name}}
    </view>
  </view>
  <view class="tabs_content"></view>
</view>

2.父向子传递数据 //没听懂

在这里插入图片描述

3.子向父传递数据 //没听懂

4.slot

Tabs.wxml
<view class="tabs_content">
    <!--
      slot 标签 其实就是一个占位符 插槽
      等到 父组件 调用 子组件时 再传递 标签过来 最终这些被传递的标签
      会就替换slot的位置
    -->
    <slot></slot>
  </view>
Pages14.wxml
<Tabs tabs="{{tabs}}" >
  <view>父组件传递过来的</view>
  <block wx:if="{{tab[0].isActive}}">0</block>
  <block wx:elif="{{tab[1].isActive}}">1</block>
</Tabs>

5.其他属性

七、小程序声明周期

1.应用生命周期

//app.js
App({
 //1.应用第一次启动就会触发的事件
 onLaunch(){
   //在应用第一次启动的时候 获取用户的个人信息
   console.log("onLaunch");
 },
 //2.应用被用户看到的时候触发的
 onShow(){
  console.log("onShow");
 },
 //3.应用 被隐藏了
 onHide(){
   console.log("Hide");
 },
 //4.应用的代码发生了报错的时候 就会触发
 onError(err){
   //在应用发生代码报错时,收集用户的错误信息 通过异步请求 将报错的信息发送到后台去
   console.log("onError");
   console.log(err);
 },
 //5.onPageNotFoundm 页面找不到就会触发
 //应用第一次启动的时候,如果找不到第一个入口页面 才会触发
 onPageNotFound(){
   console.log("onPageNotFound");
 }
})

2.页面生命周期

// pages/demo18/demo18.js
Page({

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

  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    //console.log("onLoad")
    //一般是在onLoad中发送一些异步请求来初始化页面数据 
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    console.log("onShow");
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {
    console.log("onHide");
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
    console.log("onUnload");
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
    console.log("onPullDownRefresh");
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    console.log("onReachBottom");
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {
    console.log("onShareAppMessage");
  },
  //onPageScroll function ⻚⾯滚动触发事件的处理函数
  onPageScroll:function(){
    console.log("onPageScroll");
  },
  //onResize function ⻚⾯尺⼨改变时触发,详⻅ 响应显⽰区域变化
  //当小程序发生了 横屏 竖屏 切换的时候触发
  onResize:function(){
    console.log("onResize");
  },
  /*onTabItemTap 
    1.必须要求当前页面 也是tabbar页面
    2.点击自己的tab item的时候才触发
  */
  onTabItemTap:function(){
    console.log("onTabItemTap");
  }
})

3.页面生命周期图解

八、实用小技巧

1.旋转屏幕

在手机上启用屏幕旋转支持

从小程序基础库版本 2.4.0 开始,小程序在手机上支持屏幕旋转。使小程序中的页面支持屏幕旋转的方法是:在 app.jsonwindow 段中设置 "pageOrientation": "auto" ,或在页面 json 文件中配置 "pageOrientation": "auto"

以下是在单个页面 json 文件中启用屏幕旋转的示例。

{
  "pageOrientation": "auto"
}

如果页面添加了上述声明,则在屏幕旋转时,这个页面将随之旋转,显示区域尺寸也会随着屏幕旋转而变化。

  onPullDownRefresh: function () {
    console.log("onPullDownRefresh");
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    console.log("onReachBottom");
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {
    console.log("onShareAppMessage");
  },
  //onPageScroll function ⻚⾯滚动触发事件的处理函数
  onPageScroll:function(){
    console.log("onPageScroll");
  },
  //onResize function ⻚⾯尺⼨改变时触发,详⻅ 响应显⽰区域变化
  //当小程序发生了 横屏 竖屏 切换的时候触发
  onResize:function(){
    console.log("onResize");
  },
  /*onTabItemTap 
    1.必须要求当前页面 也是tabbar页面
    2.点击自己的tab item的时候才触发
  */
  onTabItemTap:function(){
    console.log("onTabItemTap");
  }
})
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值