本文发表于 529 天前,其中的信息可能已经事过境迁

数据的创建与修改 ​

使用 wx.setData() 方法修改数据,使用 this.data 方法获取数据。

js
page({
  data: {
    value: 1,
    obj: {
      a: 1,
    },
  },
  onLoad() {
    // 修改数据
    wx.setData({
      value: 2,
      "obj.a": 2,
    });
  },
  onReady() {
    console.log(this.data.value);
  },
});

点击事件 ​

触发方式 ​

微信小程序中的点击事件为 bindtap

传递参数 ​

微信小程序传递方法如下

index.wxml ​
html
<button class="right-btn" bindtap="open" data-id="{{info.id}}">查看详情</button>
index.js ​
js
open(e){
  console.log(e.currentTarget.dataset.id) // 获取到传递的参数
}

阻止事件冒泡 ​

使用 catchtap 阻止事件冒泡。

html
<view bindtap="open">
  <button class="right-btn" catchtap="open" bindtap="show">查看详情</button>
</view>

单向绑定 ​

html
<div class="{{1}}"></div>

双向绑定 ​

需要注意的是仅支持基本类型,类似于 data.value 是非法的。

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

子组件获取参数 ​

子组件通过 properties 获取参数。

父组件传参

index.wxml ​
html
<component value="1"></component>

子组件接收

component.js ​
js
Component({
  properties: {
    value: {
      type: Number,
      value: 0,
    },
  },
});

父组件调用子组件方法 ​

使用 selectComponent 获取子组件实例,调用子组件方法。

component.js ​
js
Component({
  methods: {
    open() {
      console.log("子组件方法被调用了");
    },
  },
});
index.wxml ​
html
<button bindtap="open">调用子组件方法</button> <component id="child"></component>
index.js ​
js
page({
  open() {
    const child = this.selectComponent("#child");
    child.open();
  },
});

子组件调用父组件方法 ​

子组件通过 this.triggerEvent 触发事件,父组件通过 bind 绑定事件。

component.js ​
js
Component({
  methods: {
    open() {
      this.triggerEvent("open", { a: "参数" });
    },
  },
});
index.wxml ​
html
<component bind:open="open"></component>
index.js ​
js
page({
  open(data) {
    console.log("父组件方法被调用了");
    console.log(data);
  },
});

路由跳转方法 ​

  1. wx.navigateTo() 保留当前页,跳转到应用内部某个页面。小程序中页面栈最多十层。
  2. wx.redirectTo() 关闭当前页面,跳转到应用内部某个页面。
  3. wx.switchTab() 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。
  4. wx.reLaunch() 关闭所有页面,打开到应用内的某个页面。
  5. wx.navigateBack() 关闭当前页面,返回上一页面或多级页面。

详情请查看 微信官方文档

页面下拉刷新 ​

在需要开启的页面 json 文件中添加 enablePullDownRefresh 属性,值为 true ,即可开启下拉刷新功能。

使用 wx.stopPullDownRefresh() 停止下拉刷新。

js
page({
  // 下拉刷新
  onPullDownRefresh() {
    console.log("下拉刷新");
    setTimeout(() => {
      // 停止下拉刷新
      wx.stopPullDownRefresh();
    }, 1000);
  },
});

本地存储 ​

  1. wx.setStorageSync() 设置本地存储
  2. wx.getStorageSync() 获取本地存储

wx:for ​

循环渲染列表,使用 wx:for 属性,值为 Array 。

html
<view wx:for="{{list}}" wx:for-item="item" wx:for-index="index">
  <view>{{item}}</view>
  <view>{{index}}</view>
</view>

wx:if ​

条件渲染,使用 wx:if 属性,值为 Boolean 。

html
<view wx:if="{{true}}">
  <view>条件渲染</view>
</view>
<view wx:else>
  <view>条件渲染</view>
</view>

数据监听器 ​

监听器使用 observers 属性 。

js
page({
  observers: {
    "numberA, numberB": function (numberA, numberB) {
      // 在 numberA 或者 numberB 被设置时,执行这个函数
      this.setData({
        sum: numberA + numberB,
      });
    },
  },
});

详情请查看 微信官方文档

页面通讯 ​

在打开新页面时,可使用 events 实现页面之间的通讯。

js
// index.js
page({
  open() {
    wx.navigateTo({
      url: "/pages/detail/detail",
      events: {
        // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据
        acceptDataFromOpenedPage: function (data) {
          console.log(data);
        },
        someEvent: function (data) {
          console.log(data);
        },
      },
      success: function (res) {
        // 通过eventChannel向被打开页面传送数据
        res.eventChannel.emit("acceptDataFromOpenerPage", { data: "test" });
      },
    });
  },
});
js
// detail.js
page({
  onLoad: function (option) {
    const eventChannel = this.getOpenerEventChannel();

    // 调用 index.js 中的 acceptDataFromOpenedPage 方法
    eventChannel.emit("acceptDataFromOpenedPage", { data: "test" });

    // 调用 index.js 中的 someEvent 方法
    eventChannel.emit("someEvent", { data: "test" });

    // 监听acceptDataFromOpenerPage事件,获取上一页面通过eventChannel传送到当前页面的数据
    eventChannel.on("acceptDataFromOpenerPage", function (data) {
      console.log(data);
    });
  },
});

手机上预览效果非常卡 ​

有时候会碰到,模拟器上很流畅,但是在移动端预览时,页面异常卡顿,以下是一些解决方法

  1. 尝试将真机调试更改为局域网模式
  2. 使用真机预览功能,而非真机调试
  3. 发布体验版再次查看是否卡顿

需要在体验版访问http域名? ​

上传至体验版后打开小程序调试模式即可不受域名限制

评论 隐私政策