为什么Vue的三元表达式切换Class失灵?

代码:

    <span class="send_box" :class=" isDisabled ? 'notSend' : 'send' " v-touch:tap="sendUserQuestion">发送</span>

    /**
    *   计算属性没有问题,能够正常返回 isDisabled 的 true or false, 但是 html class 没有实时切换为什么?
    */
computed:{
             isDisabled () {
         if (this.userQuestion !== '') {
             return false
         } else {
              return true
         }
      },
}

老哥们,方法都试了,都能正确响应可是问题是不能实时更新,一直按照一开始渲染的样式来的,摔~!

阅读 23.9k
10 个回答

是不是应该类似这样的?

:class="[isDisabled ? 'notSend' : 'send']"

class binding

vue语法设计时,为什么没有那样考虑我不太清楚,但是三元表达式在做两个值得切换比较容易,多个就显得很繁琐。vue提供了更加优雅的写法来切换class,数组语法。
假设我们有red,blue,green三个类需要切换,代码这样写就可以。

<!DOCTYPE html>
<html>
<head>
    <title>vue操作class</title>
    <style>
        .box{
            width:100px;
            height:100px;
            border:1px solid #ccc;
        }
        .red{
            background:red;
        }

        .blue{
            background:blue;
        }

        .green{
            background: green;
        }
    </style>
    <script src='//cdn.bootcss.com/vue/2.1.2/vue.js'></script>
</head>
<body>
<div id="app">
    <div class="box" :class='[myClass]'></div>
</div>
<script>
    var vm = new Vue({
        el:'#app',
        data:{
            myClass:'green'
        }
    });
</script>
</body>
</html>

需要切换的话,只用vm.myClass='blue',即切换myClass属性就可以达到切换类的目的。
对类(class)的操作,一般有增删改查四种。vue中,对于类的增删,用对象语法{active:isActive}来解决。isActive=true,就增,为false就删除。对于"改",也就是替换,用的是数组语法,即上列中的语法。数组语法更强大,可以同时切换多个,比如上列中的三个。

没仔细看你问题,不过三元表达式可以尝试写在一个数组里,官方Demo就是这样写的

我测试了下没问题呀,有没有完整代码

试了一下。用的Vue2.0吗?是不是el绑在body上了?

https://cn.vuejs.org/v2/guide...

<div v-bind:class="{ active: isActive }"></div>

<div v-bind:class="[activeClass, errorClass]">

举个例子,你这儿可以这么写

<span class="send_box" :class="{'notSend': isDisabled , 'send': !isDisabled}" v-touch:tap="sendUserQuestion">发送</span>
新手上路,请多包涵

:class="{isDisabled ? 'notSend' : 'send' } "

用一个对象包起来

写的不正确吧

表达式写错了。vue2.0的三元表达式:<div v-bind:class="[isActive ? activeClass : '']"></div>

因为你已经用了class这个属性了,你vue就得用:class1=" isDisabled ? 'notSend' : 'send' ",这样就不会冲突了。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏