最近刚接触 uni-app, 准备使用 ts 作为脚本语言,(毕竟代码提示比js要实用太多)。
没有意外,踩坑了。uni 为了在vue基础上兼容 微信小程序, 将小程序变量改写为 data(){ return {}; }. 导致 仅使用 @Prop(),无法正常更改变量值.
然后,花了点时间,扩展了两个vue装饰器,用来解决 成员变量写入data(), 用的话安装下 yarn add uni-property-decorator
. 用 @Data()
和 @DataInit
替换 @Prop()
注解.
原因: @Prop 是在 class实例化的时候将变量转化为vue变量的,监听的是成员变量本身的更新。不会触发data变动。而uni的逻辑额外将data中变量转化为可监听的vue变量,每次读写值的时候其实都相当与读写的data(){}中的变量. 两个作用对象不一样。
最后分享下,新增的装饰器源码,里面有实现逻辑。
github: https://github.com/a951055/uni-property-decorator
(麻烦看到点颗星,谢谢谢谢...)
1 个评论
要回复文章请先登录或注册
迟海