我正在使用可以打开模式的按钮。默认情况下,它应具有btn-primary-outline类(蓝色文本,透明背景,蓝色边框),单击时应具有btn-primary类(白色文本,蓝色背景,蓝色边框)。但是它不起作用,按钮保持透明,文本为蓝色,并且所有操作都是打开和关闭蓝色按钮的边框。
HTML:
<button v-on:click="settingsButtonIsActive = !settingsButtonIsActive"
class="btn margin-top-half center-block col-xs-12"
:class="[settingsButtonIsActive ? 'btn-primary' : '', 'btn-primary-outline']">
<strong>{{labels.lblButtonConfiguration}}</strong>
</button>
控制器:
data = {
settingsButtonIsActive: false
}
我觉得按钮不喜欢没有定义这两个类别,但我想不出其他任何方式。
答案 0 :(得分:1)
您的“错误”使用数组语法,但“ else”的逻辑为空''
(如果settingsButtonIsActive
为假render => ''
)+始终渲染{{1 }}(btn-primary-outline
索引内的The (ternary) operator-索引0
上的btn-primary-outline
)。
例如:
1
渲染:
:class="[settingsButtonIsActive ? 'btn-primary' : '', 'btn-primary-outline', 'hello', 'world']">
这不是您的逻辑:
<button class="btn-primary btn-primary-outline hello world">
这是正确的标记(对于-or- a -or- b)-“如果不是”的快捷方式:
var element = document.getElementById("myDIV");
if(settingsButtonIsActive){
element.classList.add("btn-primary");
}
else{
element.classList.add("");
}
element.classList.add("btn-primary-outline");
不需要她使用数组语法: https://vuejs.org/v2/guide/class-and-style.html#Array-Syntax
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator
class="settingsButtonIsActive ? 'btn-primary' : 'btn-primary-outline'">
var app = new Vue({
el: '#app',
data: {
msg: "settingsButtonIsActive",
settingsButtonIsActive: true,
isActive: "btn-primary",
hasError: "btn-primary-outline"
}
})
button{
padding: 5px;
cursor: pointer;
}
.btn-primary{
background: red;
border: 1px solid red;
}
.btn-primary-outline{
background: transparent;
border: 1px solid red;
}
答案 1 :(得分:1)
我建议稍微重写一下代码。
首先,您可以将类名开关写为计算属性:
// ... beginning of your .js code
computed: {
isButtonActive () {
return this.settingsButtonIsActive ? 'btn-primary' : 'btn-outline-primary'
}
}
// ... rest of your .js code
然后,您可以将两个类属性合并为一个,并像这样绑定它:
<button v-on:click="settingsButtonIsActive = !settingsButtonIsActive"
:class="['btn', 'margin-top-half', 'center-block', 'col-xs-12', isButtonActiveClass">
<strong>{{labels.lblButtonConfiguration}}</strong>
</button>
还有另一种选择,但是因为您在两个类之间进行了更改,所以我认为计算属性是一种更简洁的解决方案。但是,您也可以使用以下代码获得相同的结果:
<button v-on:click="settingsButtonIsActive = !settingsButtonIsActive"
:class="['btn', 'margin-top-half', 'center-block', 'col-xs-12', {'btn-primary': isButtonActiveClass}, {'btn-outline-primary': !isButtonActiveClass}">
<strong>{{labels.lblButtonConfiguration}}</strong>
</button>
请注意,当我想动态更改类时,我正在将一个对象传递给数组。
答案 2 :(得分:0)
我通过使用对象语法而不是数组语法来修复它。
<button v-on:click="settingsButtonIsActive = !settingsButtonIsActive"
class="btn margin-top-half center-block col-xs-12"
:class="{'btn-primary' : settingsButtonIsActive === true, 'btn-primary-outline' : settingsButtonIsActive === false}">
<strong>{{labels.lblButtonConfiguration}}</strong>
</button>