跳到主要内容

微信小程序

常用标签

  • <text>:相当于<span>标签,行内元素,不会换行

  • <view>:相当于<div>标签,块级元素,会换行

  • <block>:占位符标签,写代码的时候,可以看到这个标签存在,但在页面渲染的时候,小程序会将其移除

  • <image>:图片标签,且他存在默认的宽高:320*240

  • <navigator>:超链接标签,类似于a标签

  • <button>:按钮

  • <icon>:字体图标

  • <radio>:单选框,需要搭配父标签radio-group一起使用

  • <checkbox>:复选框标签,需要搭配父标签checkbox-group一起使用

  • <scroll-view>:局部滚动

常见事件

点击事件

bind/catch:bind是在冒泡阶段拿到事件,catch是在捕获阶段拿到事件

  • 点击事件:bindtap
  • 长按事件:bindlongpress

返回页面事件

  • wx.navigateTo

    • 这是最普遍的一种跳转方式,其官方解释为:“保留当前页面,跳转到应用内的某个页面”
    • 类似于html中的 window.location.href=" "
    • 小程序中左上角有一个返回箭头,可返回上一个页面
    • 也可以通过方法 wx.navigateBack 返回原页面
  • wx.redirectTo

    • 关闭当前页面,跳转到应用内的某个页面。
    • 左上角没有返回箭头,不能返回上一个页面
  • wx.switchTab

    • 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面
    • wx.navigateTo 和 wx.redirectTo 不允许跳转到 tabbar 页面,只能用 wx.switchTab 跳转到 tabbar 页面
  • wx.reLaunch

    • 关闭所有页面,打开到应用内的某个页面。

    • 跟wx.redirectTo 一样左上角不会出现返回箭头,但两者却不完全相同

    • 这里要提到小程序中的 getCurrentPages() 方法。在wx.navigateTo中,每跳转一个新的页面,其原始页面就会被加入堆栈,通过调用wx.navigateBack(OBJECT)可通过获取堆栈中保存的页面 返回上一级或多级页面,wx.redirectTo,方法则不会被加入堆栈,但仍可通过wx.navigateBack(OBJECT)方法返回之前堆栈中的页面。wx.reLaunch 方法则会清空当前的堆栈。

弹窗

第一种:弹出提示框,可以选择确定或者取消。

 wx.showModal({
title: '提示',
content: '这是一个模态弹窗',
success: function (res) {
if (res.confirm) {//这里是点击了确定以后
console.log('用户点击确定')
} else {//这里是点击了取消以后
console.log('用户点击取消')
}
}
})

第二种:不带确定和取消的,直接提示成功

wx.showToast({
title: '成功',
icon: 'success',
duration: 2000//持续的时间
})

第三种:提示等待中...

wx.showToast({
title: '加载中...',
icon: 'loading',
duration: 2000//持续的时间
})
// 关闭加载
wx.hideLoading();

第四种:提示文字,没有任何图标效果,但是文字可以写的很多。

wx.showToast({
title: '这里面可以写很多的文字,比其他的弹窗都要多!',
icon: 'none',
duration: 2000//持续的时间
})

第五种:弹窗提示选择,例如选择ABCD那种

wx.showActionSheet({
itemList: ['A', 'B', 'C'],
success: function (res) {
if (!res.cancel) {
console.log(res.tapIndex)//这里是点击了那个按钮的下标
}
}
})

第六种:多用于页面提示加载中

// 写在wxml中
<loading hidden="{{hidden}}">
加载中...
</loading>
hidden有两个值:false和true

生命周期

  • 生命周期中,onshow在onready之前执行

  • 网络请求推荐在onLoad中发送

  • 生命周期执行顺序:onLoad --> onShow --> onReady --> onHide

    • onLoad:页面加载时执行,只执行一次;
    • onShow:页面展示时执行,执行多次;
    • onReady:页面初次渲染时执行,只执行一次;
    • onHide:页面从前台进入后台时执行;
    • onUnload:页面卸载时执行;
  • 切换页面时触发的生命周期:

    • 当首次加载A页面,A触发的生命周期为:onLoad --> onShow --> onReady;
    • 从A页面切换到B页面时,A页面触发onHide,B页面触发的生命周期顺序与上面一致;
    • 当B页面返回到A页面时,触发onUnload,当不清缓存,再次进入A页面时,只触发onShow。

组件化

使用方法

  • 创建component,写文件
  • 然后是你需要使用的component的页面的json配置usingComponents和"component": true
  • 最后使用
  • 组件设置样式只能用class

组件传递数据

(组件也可以传递样式)

页面传给组件:在组件的properties中接收

//页面:
<one name="hhh"></one>

// one组件的js部分
properties: {
name:{
type:String,//【String、Number、Boolean、Object、Array、null(不限制类型)】
value:"默认数据,没传就展示默认的"
}
},


// one组价你的wxml部分:
<view>{{name}}</view>

组件传给页面:自定义事件

// one组价的wxml部分:
<view bindtap="clickInCpn">{{name}}</view>


// one组件的js部分
methods: {
clickInCpn(){
console.log("组件中被点击");
this.triggerEvent("clickToPage","数据发送给page");//这个click是你起一个自定义事件的名字
}
}


//页面:
<one bind:clickToPage="clickInPage"></one>

//页面js
clickInPage(e){
console.log("page");
console.log(e.detail);
},

组件生命周期

  • 最重要的生命周期是,,包含一个组件实例生命流程的最主要时间点
    • created【组件被创建】
    • attached【组件被添加到组件树中】
    • detached【组件从组件树中移除】
  • 组件的的生命周期也可以在lifetimes字段内进行声明(这是推荐的方式,其优先级最高)
  • 在组件里也可以监听页面的生命周期,在pageLifetimes字段内进行声明,可用的包括
    • show【组件所在的页面展示】
    • hide【组件所在的页面被隐藏】
    • resize【组件所在的页面发生变化】

组件监听数据变化

组件也可以监听数据变化,在observers中声明

网络请求

  • 网络请求推荐在onLoad中发送

插槽

使用<slot></slot>预留一个插槽。然后再你设置的组件中间加入你需要的就行。

多个插槽可以设置name。然后再组件js中设置options: { multipleSlots: true }。然后页面使用就是<my-slot solt="设置的name"></my-slot>

页面数据传递

传递给跳转页面

  • 方式一:路径拼接query参数

    • //跳转前页面
      wx.navigateTo({
      url:"/pages/detail/detail?name=jl&age=18",//写死开发中一般这样
      })

      const name = this.data.name
      const age = this.data.age
      wx.navigateTo({
      url:"/pages/detail/detail?name=${name}&age=${age}",
      })

      //跳转后页面
      onLoad(options){
      console.log(options)//就是我们传来的数据
      }
  • 方式二:eventChannel

传递给返回页面

返回页面使用wx.navigateBack()

  • 方式一:在onUnload中

    • onUnload(){
      const pages = getCurrentPages()
      const prePage = pages[pages.length - 2],//-1是当前页面,-2是上一个页面
      prePage.setData({
      message:"修改"
      })
      }
  • 方式二:eventChannel