- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想从商店获取复选框状态。我与复选框列表和“事件复选框”列表 ( inArray(checkList.value, activeFilters) ) 进行了比较,但我无法从 this.$store.getters.updateFilters 中获取值。这里的代码:
<template>
<li class="dropdown-child">
<label >
<input
type="checkbox"
:name="checkList.id"
:value="checkList.name"
:checked="inArray(checkList.value, activeFilters)"
@change="updateFilter"
>
<span>{{ checkList.name }}</span>
</label>
</li>
</template>
<script>
export default {
props: ['checkList'],
computed: {
inArray (filterValue, filterChecked) {
const intComparison = /^[+-]?\d+$/.test(filterValue)
for (let i = 0, l = filterChecked.length; i < l; i++) {
if ((intComparison && parseInt(filterChecked[i], 10) === parseInt(filterValue, 10)) || (filterChecked[i] === filterValue)) {
return true
}
}
return false
},
activeFilters(){
return this.$store.getters.updateFilters;
}
},
methods: {
updateFilter (evt) {
const elm = evt.target || evt.srcElement
const action = elm.checked === false
? this.removeFilter(elm) //elm.checked
: this.addFilter(elm)
const value = /^[+-]?\d+$/.test(elm.value)
? parseInt(elm.value)
: elm.value
},
addFilter(elm){
this.$store.dispatch('addFilter', elm);
},
removeFilter(elm){
this.$store.dispatch('removeFilter', elm);
}
}
}
</script>
最佳答案
我会这样编码:
:checked
绑定(bind),将当前选择的过滤器应用到您当前 activeFilters
Vuex 状态的下拉列表activeFilter
值在复选框更改时切换 Vuex 存储中的状态 - 无需从事件中检查当前的复选框状态。直接从组件改变存储是可以的,因为没有异步过程。请看下面的演示或这个 jsfiddle .
注意:演示中的过滤并不完美 - 只是有一些过滤器可以玩。
const filterItem = {
props: ['item', 'changed'],
computed: {
...Vuex.mapGetters(['activeFilters'])
},
template: `
<li class="dropdown-child">
<label >
<input
type="checkbox"
:name="item.id"
:value="item.name"
:checked="isActive()"
@change="emitChange"
>
<span>{{ item.name }}</span>
</label>
</li>
`,
methods: {
isActive() {
return this.activeFilters.indexOf(this.item.name) != -1;
},
emitChange() {
this.$emit('changed', {
item: this.item,
checkState: !this.isActive() // toggle current checkState
});
}
}
};
const filterMenu = {
template: `
<div class="dropdown">
<button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">Dropdown Example
<span class="caret"></span></button>
<ul class="dropdown-menu">
<filter-item v-for="checkItem in filterOptions" :item="checkItem" @changed="changedFilter"
:key="checkItem.id"></filter-item>
</ul>
</div>
`,
methods: {
changedFilter(option) {
this.$store.commit('updateFilters', option);
}
},
data() {
return {
filterOptions: [{
id: 0,
name: 'all',
checked: false
}, {
id: 1,
name: 'numeric',
checked: false
}, {
id: 2,
name: 'letters',
checked: false
}]
};
},
components: {
filterItem: filterItem
}
};
Vue.use(Vuex);
const store = new Vuex.Store({
getters: {
activeFilters: function(state) {
return state.activeFilters;
}
},
mutations: {
updateFilters(state, filter) {
console.log(filter);
// filter.checkState = true --> check if in activeFilters list
// filter.checkState = false --> remove filter from activeFilters
let index = state.activeFilters.indexOf(filter.item.name);
if ((index == -1) &&
filter.checkState) {
// item not in list && checked --> add to list
state.activeFilters.push(filter.item.name);
}
else {
// item in list & toggled to false
state.activeFilters.splice(index, 1); // remove from list
}
}
},
state: {
activeFilters: ['all']
}
});
new Vue({
el: '#app',
store: store,
computed: {
...Vuex.mapGetters(['activeFilters'])
},
data: function() {
return {
list: [{
id: 0,
title: 'First Item'
}, {
id: 1,
title: 'Second Item'
}, {
id: 2,
title: 'Third Item'
}, {
id: 3,
title: '1'
},
{
id: 4,
title: '2'
},
{
id: 5,
title: '3'
},
{
id: 6,
title: 'Test 1'
},
{
id: 7,
title: 'Test 2'
}
]
};
},
components: {
filterMenu: filterMenu
},
methods: {
applyFilter(orgList) {
// activeFilters = all, numeric, letters
let filtered = orgList;
if (this.activeFilters.indexOf('all') == -1) {
// all not included
let numericFiltered = [];
let letterFiltered = [];
if (this.activeFilters.indexOf('numeric') > -1) {
numericFiltered = orgList.filter((item) => {
console.log('check match', item.title.match(/^\d+$/), item);
return /^[\d+\s+]+$/.test(item.title);
});
}
if (this.activeFilters.indexOf('letters') > -1) {
letterFiltered = orgList.filter((item) => {
return /^[a-zA-Z\s+]+$/.test(item.title);
});
}
filtered = numericFiltered.concat(letterFiltered);
}
console.log('new filter', filtered);
return filtered;
}
}
});
<script src="https://code.jquery.com/jquery-2.2.4.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vuex/2.3.1/vuex.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.3.4/vue.js"></script>
<div id="app">
<filter-menu></filter-menu>
selected filters: {{$store.getters.activeFilters}}
<h1>
List to filter:
</h1>
<ul>
<li v-for="listItem in applyFilter(list)" :key="listItem.id"> {{listItem.title}}</li>
</ul>
</div>
关于checkbox - Vuejs + Vuex 获取复选框状态(选中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44800581/
在检查复选框时我发现有写 CheckBox checkbox = (CheckBox)sender 在 checkBox1_CheckedChanged 事件上。 请解释一下这是什么意思? 最佳答案
我正在使用来自命名空间 System.Windows.Forms 的 ToolTip 类编辑我的 Web 应用程序;我的代码中有几个复选框,因此显示此错误: 'CheckBox' is an ambi
我正在制作 Bootstrap 复选框下拉菜单,选项包含在 中。处理点击的标签,但我也有一个 在 a 标签内。 当用户按下实际复选框而不是仅按下 时,就会出现我的问题。元素。两者都被点击并且发生了
TLDR:使用defaultChecked而不是checked,工作jsbin . 尝试设置一个简单的复选框,在选中时会划掉其标签文本。由于某种原因,当我使用该组件时,handleChange 没有被
我想拥有它,所以如果复选框为 NULL 或 0,则它不像值为 1 时那样喜欢。另外,有没有办法将选中的框限制为 10 个? 当前代码: if(isset($_POST['submit'])){//to
如果我选中一个复选框,下拉列表应该只显示在该复选框旁边,但它会显示在它下面的所有其他复选框中。 这是我在 html 代码中使用的 css .sub-nav { display: none; } inp
我在警报对话框中有一个带有复选框的数据表,当我单击该复选框时,它没有选中(选中=选中)该框。我跟着这个video 这是我的尝试 import 'package:flutter/material.dar
如果单独使用,以下代码效果很好, Angular6.0 不允许 [(ngModel)] 与 FormGroup (Reactive Forms)。 As 在 angular 6.0 中已弃用,并将在
那么我应该使用哪个来选择元素?我仅使用复选框作为示例,这个问题涉及所有表单元素。 实际上,当我们这样做时,哪个更快: li:first 或 li:eq(0) ? 最佳答案 来自the document
问题 : 我有一个列表框,其中列表框是复选框。在第一次单击时,复选框被选中并选中。在第二次单击时,仅设置复选框。可以使用箭头键重新选择不同的复选框。我的目标是,首先选中该复选框,然后再检查(再次单击它
我似乎无法弄清楚如何让复选框和相关文本出现在一行上。文本很短,所以它似乎不是宽度问题。 我尝试在控件上设置 display:inline,但是当它呈现时,在输入和标签周围添加了一个跨度,并且具有 di
创建带有复选框列的 Table 非常容易,例如,使用 SWT.CHECK 标志。但是如何使某些表格行中的复选框不可编辑而其他行中的复选框保持可编辑? 最佳答案 我不知道这样做的简单方法。 但我看到了两
是否可以使用 TogglerBar 而不是 2 个复选框来显示或不显示不同的形状。 TogglerBar 的每个按钮中都写有绿色和红色? Manipulate[ Graphics[{If[thePin
我需要更改 Windows Phone 8 中 LongListMultiSelector 的复选框的颜色,因为我的背景是白色,这可能吗? 谢谢。 最佳答案 为此,您必须首先通过在 visual st
我有一个带有插件 Slick.CheckboxSelectColumn 的网格。 是否可以在没有 Jquery 的情况下隐藏某些行中的复选框?我想可以使用 Formatter。 这是带有 slickg
所以我有这个... 在这里,id 是有道理的值在引号中,因为它是一个字符串标识符。但是type呢?值(value)?不是 checkbox一种类型,例如 String 和 Boolean?为什么我总
问题: 如果用户选中了复选框,我将尝试验证下拉列表,如您在屏幕一中所见。 问题: 那么,如果用户选择了标题中的所有复选框,我该如何验证复选框呢?如您所见,屏幕二。如果我选中所有复选框,那么我希望启动验
我知道它有点重复,我正在尝试以不同的方式做到这一点,从而重新发布这个问题。 我想要实现的是,当有人“取消选中”OSPF 复选框时..被动接口(interface)检查也应该自动“取消选中”。我正在尝试
这是代码(是的,我使用的是基本的 reset.css): .checkbox { border: 1px solid black; width: 10px; height: 10px; }
我正在尝试显示多组带有标题复选框的复选框,如下图所示。 从数据库中我得到这样的数据, CODE SUBCODE DESCR DESCR
我是一名优秀的程序员,十分优秀!