当前位置:   article > 正文

微信小程序中使用watch监听_小程序使用watch可以监听到数据,打包成app不可以

小程序使用watch可以监听到数据,打包成app不可以

想直接使用的走这边 https://blog.csdn.net/singlever/article/details/106276787

Vue里面的监听很方便,虽然很消耗资源,但确实有些时候极大提升了开发效率

我的案例是写在component组件里面的,当然page页面也是一样的,把 attached 换成 onload
把 watch 直接写入 Page 里面即可

注意,使用defineProperty重构get和set之后,一定要写入get,不然会出现数据监听后赋值正常,但访问为undefined的情况

  1. Component({
  2. properties: {},
  3. data: {
  4. // 这里是一些组件内部数据
  5. ze:'123',
  6. dd:'312'
  7. },
  8. methods: {
  9. watch(){
  10. return{
  11. ze:(val) => {
  12. console.log(val)
  13. }
  14. }
  15. },
  16. btns(){
  17. this.setData({ze:321})
  18. }
  19. },
  20. attached(){ //类似于beforeMounted 组件挂载前
  21. Object.keys(this.watch()).some(item => {
  22. Object.defineProperty(this.data,item,{
  23. set:this.watch()[item]
  24. })
  25. })
  26. }
  27. })

需要监听的变量,和vue的写法一样,写入watch中,不过,这里要加到 return 中即可 例如 例子 ze
如果监听需要调用到  this.setData()  把监听的函数结构换成箭头函数 例如 例子 ze

总的来说没有什么技术难点,主要依靠原生的Object APi   Object.defineProperty() 没有学过的可以看下

跟进:
如果直接在watch中直接把val赋值给变量,这里只在逻辑层发生了变化,如果要将数据同步到视图层,在watch中直接setData会报错例如:
 

  1. ze:(val) => {
  2. this.setData({ze:val})
  3. }
  4. //erorr

因为本质上watch中的ze函数是本质是个set,在一个变量的set中给自己赋值,这是个死循环,当然会报错,可能会有更好的办法
因为某些原因暂时没时间了,给出
方法1:
 

  1. Component({
  2. properties: {},
  3. data: {
  4. // 这里是一些组件内部数据
  5. ze:'123', //逻辑层数据
  6. dd:'312', //视图层数据
  7. },
  8. methods: {
  9. watch(){
  10. return{
  11. ze:(val) => {
  12. this.setData({dd:val})
  13. }
  14. }
  15. }
  16. }


通过监听ze去改变dd,dd就相当于ze在视图层的替身,问题:1.变量浪费  2.不好看(hhh)

// 2020 5.22
抽空封装了下 https://blog.csdn.net/singlever/article/details/106276787

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/1007578
推荐阅读
  

闽ICP备14008679号