博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
miniprogrampatch 提供 watch 和 computed 特性
阅读量:4869 次
发布时间:2019-06-11

本文共 2883 字,大约阅读时间需要 9 分钟。

推荐一个小程序补丁 ,为你的 PageComponent 增加 watchcomputed 特性。

安装

通过 npm 安装:npm install --save miniprogrampatch

或者直接拷贝 到项目中。

用法

miniprogrampatch.js 非常简单,它只有两个函数 patchPagepatchComponent

假定你的项目目录结构如下:

  • app.js
  • miniprogrampatch.js
  • pages/
    • index/index.js
  • components/
    • MyComponent/index.js

app.js 中:

const { patchPage, patchComponent } = require('./miniprogrampatch');App({    // 公共依赖通过 app.deps 来提供    deps: {        patchPage, patchComponent    }})

pages/index/index.js 中:

const { patchPage } = getApp().deps;patchPage(Page)({    computed: {        // 定义计算属性    },        watch: {        // 定义 watch 回调    }})

同理,在 components/MyComponents/index.js 中:

const { patchComponent } = getApp().deps;patchComponent(Component)({    computed: {        // 定义计算属性    },        watch: {        // 定义 watch 回调    }})

如果你想在已有项目中使用 miniprogrampatch,但又担心引入新的第三方代码影响整个项目,那么你可以通过以上方法为单个页面或组件增加新特性。

如果你想整个项目所有页面和组件都使用新特性,又不想在每个页面或组件逐个引用 patchPage 或 patchComponent,那么可以通过以下示例为整个项目添加补丁。

app.js 中:

const { patchPage, patchComponent } = require('./miniprogrampatch');// 让所有页面或组件都可以直接定义 watch 和 computedPage = patchPage(Page);Component = patchComponent(Component);App({})

定义 computed

Page({    data: {        count: 10    },    computed: {        /** 页面加载的时间戳(不依赖其他属性) */        timestamp() {            return Date.now();        },        /** count 乘以 10(依赖属性 count) */        countByTen: {            require: ['count'],            fn({ count }) {                return count * 10            }        },        /** count 乘以 100(依赖另一个计算属性 countByTen)*/        countByHundred: {            require: ['countByTen'],            fn({ countByTen }) {                return countByTen * 10;            }        },                /** 计算属性也可以是嵌套的路径 */        'x.y.z': {            require: ['countByHundred'],            fn({ countByHundred }) {                return countByHundred;            }        }    }});

在 computed 中通过 key:value 形式来定义计算属性。

  • key:计算属性名称或路径。
  • value
    • 如果 valuefunction,函数计算结果即为属性值。
    • 如果 valueplain object,它必须有一个名为 fn 字段作为计算函数。可选字段 require 必须是一个数组,数组内显式指定当前计算属性所依赖的其他属性名称或路径。

注意:

  • 所有没有指定依赖字段的计算属性(即未提供 require 字段),仅在初始化时求一次值,之后将不会有任何变化。
  • 计算属性非只读,它可以被 setData 方法赋值,但每次它依赖的属性发生变化,它会被重新计算赋值。
  • 计算属性在每次数据更新时检查是否要重新计算,计算结果和更新数据合并一起被设置到 this.data 中,这一过程是同步处理。

定义 watch

Page({    watch: {        // 嵌套路径监听        'x.y': function (value, old) {            console.log('x.y', value === old);         },        // 监听属性        x(value, old) {            console.log('x', value === old);         },    }})

watch 就比较简单了,定义你想要监听的属性名称或路径,如果被监听属性发生变化就触发回调函数。

$setData

别名:updateData

被 patch 过的 Page 或 Component 实例 this 拥有一个名为 $setData 的方法,用来设置 data 同时触发 computed 属性更新以及 watch 监听检查。

在微信小程序基础库 v2.2.2 以下版本,Page 或 Component 的 setData 方法由于会被定义为只读属性,无法覆写,因此必须使用 $setData 来触发数据更新检查。

在微信小程序基础库 v2.2.3 以上版本,Page 和 Component 的 setData 等效于 $setData,可以直接使用 setData 来触发数据更新。

转载于:https://www.cnblogs.com/ifantastic/p/9967753.html

你可能感兴趣的文章
多线程间通信之AutoResetEvent和ManualResetEvent的原理分析和开发示例
查看>>
新浪微博客户端(38)-显示键盘上的工具条
查看>>
NOIP前夕:codevs,解药还是毒药
查看>>
获取一个类的类名
查看>>
将远程mysql服务器数据导出 csv 并发送到我的本机
查看>>
python读取excel的行数
查看>>
hdu 1213
查看>>
常对象、对象的常引用与常指针访问类的成员函数与一般情况的不同之处
查看>>
[BZOJ4784][ZJOI2017]仙人掌(树形DP)
查看>>
第一个 Android 应用发布到 Google Market 中了
查看>>
贝叶斯网络(Bayesian network)
查看>>
VMware的Easy Install安装
查看>>
Linux/shell: Concatenate multiple lines to one line
查看>>
石墨烯的晶格和能带结构
查看>>
[STM32]HardFault 定位办法
查看>>
我的打车奇遇!一位出租车司机的互联网生活。本人原创,绝对真实!推荐互联网、移动互联网朋友们看看...
查看>>
优先队列(堆)
查看>>
超级方便的linux命令手册
查看>>
4.SoapUI接口测试--使用EXCEL参数化
查看>>
ASP.NET Page
查看>>