问题描述:
input标签中 :class=”{active=isActive}”的Boolean值没有效果的解决方法。
代码
<template>
<input v-bind:class="{ active: isActive }" name="asd" value="123">
</template>
<script>
export default {
data() {
return {
isActive: ture,
}
},
};
</script>
<style>
.active {
pointer-events: none;
opacity: 0.5;
}
</style>
想要的效果:
实际效果:
原因分析:
因为isActive的值默认为ture,所以input标签渲染出来后本应是
<input class="active" name="asd" value="123">
但实际上ture并没有起到作用。实际上渲染出来的是
<input name="asd" value="123">
由此可知是Boolean值出了问题,导致class=”active”没有渲染出来
解决方案:
只需要把ture改为!!+1就可以了。
同理,如果是false就改为!!+0。
<script>
export default {
data() {
return {
isActive: !!+1,
}
},
};
</script>
效果:
!!+1写法的相关知识
类型转换
快速转 Number
var a = '1'
console.log(typeof a)
console.log(typeof Number(a)) // 普通写法
console.log(typeof +a) // 高端写法
快速转 Boolean
var a = 0
console.log(typeof a)
console.log(typeof Boolean(a)) // 普通写法
console.log(typeof !!a) // 高端写法
混写
先转为 Number 再转为 Boolean
var a = '0'
console.log(!!a) // 直接转将得到 true,不符合预期
console.log(!!+a) // 先转为 Number 再转为 Boolean,符合预期
版权声明:本文为WineRice原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。