vue.js - Vue v-用于条件样式
问题描述
我v-for
用来创建按钮。isActiveButton()
如果返回 true ,我添加 .active 类:
<button
v-for="(text, index) in this.buttonOptions"
class="btn"
:class="{active: isActiveButton(text)}"
:value='text'
@mousedown.prevent @click="some_method">
{{text}}
</button>
如果全部isActive()
返回false
,将 .active 类添加到第一个按钮的最佳方法是什么?请注意,这是一个道具。 buttonOptions
buttonOptions
解决方案
计算属性将是要走的路!
var app = new Vue({
el: '#app',
data: {
buttonOptions: ['button1', 'button2', 'button3', 'button4']
},
methods: {
isActiveButton: function (text) {
return (text === text.toUpperCase());
},
some_method: function() {
console.log('Button clicked')
}
},
computed: {
shouldFirstBeActive: function () {
return (this.buttonOptions.filter(el => this.isActiveButton(el))).length === 0
}
}
});
.active {
background: #f00;
}
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<div id="app">
<section>
<button
v-for="(text, index) in buttonOptions"
class="btn"
:class="{active: isActiveButton(text) || (shouldFirstBeActive && index === 0)}"
:value='text'
@mousedown.prevent @click="some_method">
{{text}}
</button>
</section>
</div>
我不知道这些方法的isActiveButton
作用,所以我不得不即兴发挥:它检查字符串是否为大写。
诀窍是如果数组中的所有项目都未能通过该方法,则shouldFirstBeActive
返回计算属性: true
buttonOptions
isActiveButton
return (this.buttonOptions.filter(el => this.isActiveButton(el))).length === 0
例如,如果您将 更改button2
为 BUTTON2,则isActiveButton
返回true
该项目,这会将shouldFirstBeActive
计算属性呈现为false
var app = new Vue({
el: '#app',
data: {
buttonOptions: ['button1', 'BUTTON2', 'button3', 'button4']
},
methods: {
isActiveButton: function (text) {
return (text === text.toUpperCase());
},
some_method: function() {
console.log('Button clicked')
}
},
computed: {
shouldFirstBeActive: function () {
return (this.buttonOptions.filter(el => this.isActiveButton(el))).length === 0
}
}
});
.active {
background: #f00;
}
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<div id="app">
<section>
<button
v-for="(text, index) in buttonOptions"
class="btn"
:class="{active: isActiveButton(text) || (shouldFirstBeActive && index === 0)}"
:value='text'
@mousedown.prevent @click="some_method">
{{text}}
</button>
</section>
</div>
推荐阅读
- flutter - 当 ComboBox 更改时(在 Flutter 中),如何更改 TextFormField 中的文本?
- vue.js - 将路由器值作为道具传递
- redirect - 在 React App Router 中重定向页面后重新加载 URL
- python-3.x - 如何在不和谐机器人上使用斜杠命令?
- bash - 如何在 bash 中测试变量是否为关联数组?
- python - 如何将for循环更改为while循环
- python - 将 pandas DataFrame() 插入 MySQL 表会引发 ProgrammingError
- java - 无法使用 Java Spring 完成发布
- spring - 如何在spring data jpa派生查询中使用带有嵌入字段的order by子句?
- docker - 无法访问 kubernetes nodeport 服务