[英]How do I create a select all checkbox when I have an empty array as my checked.bind
我有一個帶有復選框的表格作為第一列。 我想在 header 中有一個 select all 復選框。 我不確定如何解決這個問題。
<template>
<table class="table table-hover">
<thead>
<tr>
<th><input type="checkbox" /></th>
<th>ID</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox" checked.bind="selected" model.bind="site" /></td>
<td>${site.id}</td>
</tr>
</tbody>
</table>
</template>
因此,解決此問題的最佳方法包括三個部分。 我們需要綁定checked
屬性和indeterminate
屬性,並且需要處理change事件。
首先,我們希望在所選數組包含items
數組中的所有項目時selected
復選框。 所以:
<input type="checkbox" checked.bind="selected.length === items.length" />
This checks the checkbox whenever all items are selected, but checking the checkbox has no effect on the selected
array yet.
接下來,只要selected
數組在items
數組中有一些但不是所有項,我們希望復選框是不確定的。 所以:
<input type="checkbox
checked.bind="selected.length === items.length"
indeterminate.bind="selected.length > 0 && selected.length < items.length" />
現在,該復選框完全反映了selected
陣列的 state,但仍然對selected
陣列沒有影響。
最后,我們可以在復選框被選中或取消選中時監聽復選框上的change
事件以更新selected
數組。 我在下面使用了一個內聯處理程序,在這個處理程序中$event.target
是復選框本身。
<input type="checkbox"
checked.bind="selected.length === items.length"
indeterminate.bind="selected.length > 0 && selected.length < items.length"
change.delegate="$event.target.checked ? selected = items.slice() : selected = []" />
此時,復選框工作正常。 Checked 通常是一種雙向綁定,但在我們上面的示例中,它只是單向操作。 我們可以做這個小優化:
<input type="checkbox"
checked.one-way="selected.length === items.length"
indeterminate.one-way="selected.length > 0 && selected.length < items.length"
change.delegate="$event.target.checked ? selected = items.slice() : selected = []" />
有關工作示例,請參閱此gist.run:https://gist.run/?id=61cc823708ff7f6ba195de9ff0353049
請注意,我通常發現創建一個封裝此行為的自定義元素很有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.