• 微信小程序实现数值监听(页面和组件属性)


    简介

    目前文章主要介绍对页面属性值的监听以及组件属性值的监听。需要异页面监听数据,请跳转至另一个文章介绍

    为什么需要监听属性值

    当需要通过一个属性变化时候,需要计算相应的方法等。pc网站经常需要监听属性,那么小程序应该怎么去实现?

    实现方法

    1、首先创建公共的watch.js

    1. export function setWatcher(page) {
    2. let data = page.data;
    3. let watch = page.watch;
    4. Object.keys(watch).forEach(v => {
    5. let key = v.split('.');
    6. let nowData = data;
    7. for (let i = 0; i < key.length - 1; i++) {
    8. nowData = nowData[key[i]];
    9. }
    10. let lastKey = key[key.length - 1];
    11. let watchFun = watch[v].handler || watch[v];
    12. let deep = watch[v].deep;
    13. observe(nowData, lastKey, watchFun, deep, page);
    14. })
    15. }
    16. function observe(obj, key, watchFun, deep, page) {
    17. var val = obj[key];
    18. if (deep && val != null && typeof val === 'object') {
    19. Object.keys(val).forEach(childKey => {
    20. observe(val, childKey, watchFun, deep, page);
    21. })
    22. }
    23. Object.defineProperty(obj, key, {
    24. configurable: true,
    25. enumerable: true,
    26. set: function(newVal) {
    27. watchFun.call(page, newVal, val);
    28. val = newVal;
    29. if (deep) {
    30. observe(obj, key, watchFun, deep, page);
    31. }
    32. },
    33. get: function() {
    34. return val;
    35. }
    36. })
    37. }
    38. module.exports = {
    39. setWatcher: setWatcher
    40. }

    2、在页面引用公共的watch.js。

    import { setWatcher } from '../../utils/watch';

    3、初始化监听方法

    setWatcher(this);//可以放进onload或者input里面等

    4、写入监听方法

    1. //page页面
    2. watch: {
    3. val(v) {
    4. console.log(v)
    5. },
    6. count: {//监听count属性值
    7. handler(v,o) {
    8. console.log('新值:'+v,'旧值:'+o)
    9. if(v!==o){
    10. console.log('被改了')
    11. }else{
    12. console.log('没改')
    13. }
    14. },
    15. deep: true
    16. }
    17. },
    18. //组件就调用observe方法

    小结

    微信小程序监听属性值非常的简单,只需要调用公共的js然后监听属性值即可。大大提高开发的效率。有不足之处望指正修改,一起探讨哦~!

  • 相关阅读:
    【SQL】数据库事务
    关于TCP建立连接时发送多次SYN的问题
    Nacos身份绕过漏洞复现(QVD-2023-6271)
    Python操作Excel表格
    如何运用3DGIS技术整合智慧社区综合管理解决方案
    docker+ros2+nav2初试
    Sentinel注解@SentinelResource详解
    React低代码平台实战:构建高效、灵活的应用新范式
    Kubernetes 通过 Deployment 部署Jupyterlab
    xCode14.3.1运行MonkeyDev出现“Executable Not Found“的解决办法
  • 原文地址:https://blog.csdn.net/weixin_43452154/article/details/132663097