Cople
Cople
  • 发布:2022-12-29 16:23
  • 更新:2022-12-30 15:52
  • 阅读:548

【报Bug】computed 计算属性在元素属性上无法实时变化

分类:uni-app

产品分类: uniapp/小程序/微信

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: 10.15.7

HBuilderX类型: 正式

HBuilderX版本号: 3.6.15

第三方开发者工具版本号: 1.06.2212011

基础库版本号: 2.29.0

项目创建方式: HBuilderX

示例代码:
  <view>  
    <button :disabled="selected.length === 0">{{selected.length}}</button>  
    <button @click="toggle">toggle</button>  
  </view>  
</template>  

<script>  
export default {  
  data() {  
    return {  
      cart: [{ selected: false }],  
    };  
  },  
  methods: {  
    toggle() {  
      this.cart[0].selected = !this.cart[0].selected;  
    },  
  },  
  computed: {  
    selected() {  
      return this.cart.filter(c => c.selected);  
    },  
  },  
}  
</script>

操作步骤:

点击 toggle 按钮

预期结果:

第一个 button 的 disabled 属性发生切换

实际结果:

第一个 button 的 disabled 属性不会有任何变化

bug描述:

如果 computed 属性直接返回 boolean 类型的值,元素属性会发生相应变化。

<button :disabled="selected">{{selected.length}}</button>
computed: {  
    selected() {  
      return this.cart.filter(c => c.selected).length === 0;  
    },  
  },

但如果是在元素属性上间接设置一个返回 boolean 的语句,就无效了。

<button :disabled="selected.length === 0">{{selected.length}}</button>
computed: {  
    selected() {  
      return this.cart.filter(c => c.selected);  
    },  
  },
2022-12-29 16:23 负责人:无 分享
已邀请:
DCloud_UNI_GSQ

DCloud_UNI_GSQ

由于微信小程序有这样一个bug(多年前已经反馈给微信小程序团队确认):数组length无法观测

由于微信小程序多年未处理,后续框架将统一自动包装一下。

目前可以手动改变写法绕一下:

computed: {    
    selected() {    
      return this.cart.filter(c => c.selected);    
    },    
disabled(){return this.selected.length === 0}  
  },

要回复问题请先登录注册