目次
vue-select-sidesとは
vue-select-sidesは、選択前・選択後の一覧コンポーネントでデータの移行を行って管理するマルチセレクトライブラリです。
グループモードなどが搭載されています。
【ファイル容量:63KB】
環境
Vue | 2.6.10 |
vue-select-sides | 1.1.1 |
インストール
以下のnpm、yarn、CDNを使ってインストールします。
npm
npm install --save vue-select-sides
yarn
yarn add vue-select-sides
CDN
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vueSelectSides.umd.min.js"></script>
gitリポジトリは以下から取得できます。
https://github.com/juliorosseti/vue-select-sides
導入手順
1. ライブラリの取り込み
(1)ES6等の場合 [注意]モジュール版は未検証です。
import vueSelectSides from "vue-select-sides"; @import "/node_modules/vue-select-sides/styles/themes/soft.scss";
(2)CDNの場合
const vueSelectSides = window['vueSelectSides'].default;
2.メソッドを設定
上記で取得したvueSelectSidesを Vue.use
と components
に取り込みます。
Vue.use(vueSelectSides, { locale: null }); new Vue({ el: '#app', components: { 'vue-select-sides':vueSelectSides }, data:{ selected: [], list: [ { value: "afghanistan", label: "Afghanistan" }, { value: "brazil", label: "Brazil" }, { value: "fiji", label: "Fiji" }, { value: "ghana", label: "Ghana" }, ] } });
3. テンプレートを準備
<vue-select-sides>
を設置します。
type
にmirrorとgroupedのどちらかを設定します。
[注意] サンプルはケバブケースで記載しています。
<div id="app"> <vue-select-sides type="mirror" v-model="selected" :list="list" :order-by="'asc'" :placeholder-search-left="'選択'" :placeholder-search-right="'選択済み'" :sort-selected-up="true" :search="true" :total="true" :toggle-all="true" ></vue-select-sides> </div>
スタイル
CDNにはスタイル用のファイルが無いので、下記を設定します。
.vss, .vss ul, .vss ul li { list-style-type: none; margin: 0px; } .vss ul ul { padding: 0px; } .vss, .vss *, .vss *::before, .vss *::after { box-sizing: border-box; } .vss { display: flex; align-items: stretch; align-content: stretch; justify-content: space-between; } .vss a { text-decoration: none; } .vss .vss-span, .vss .vss-list-ul li { user-select: none; } .vss .vss-span { width: 15%; display: flex; align-items: center; justify-content: center; } .vss .vss-list { width: 100%; } .vss .vss-list .vss-inner-list { height: 100%; display: flex; flex-direction: column; } .vss .vss-list .vss-inner-list .vss-list-search { width: 100%; } .vss .vss-list .vss-inner-list .vss-list-ul { overflow-y: auto; } .vss .vss-list .vss-inner-list .vss-list-ul li { line-height: 1.5; } .vss .vss-list .vss-inner-list .vss-list-ul li .vss-list-badge { display: flex; align-items: center; justify-content: center; } .vss * { font-size: 0.9rem; } .vss .vss-span { font-size: 1.3rem; color: #e1e1e1; } .vss .vss-list .vss-inner-list { box-shadow: 0px 0px 10px #e1e1e1; border-radius: 0.25rem; } .vss .vss-list .vss-inner-list .vss-list-search { border: none; padding: 12px 14px; border-bottom: 2px solid #f3f3f3; border-top-left-radius: 0.25rem; border-top-right-radius: 0.25rem; outline: none; } .vss .vss-list .vss-inner-list .vss-list-search:focus { border-color: #e1e1e1; } .vss .vss-list .vss-inner-list .vss-list-ul { padding: 8px 10px 10px 10px; } .vss .vss-list .vss-inner-list .vss-list-ul li span { display: flex; align-items: center; justify-content: space-between; border-radius: 0.25rem; color: #222; padding: 5px 12px; margin-top: 2px; } .vss .vss-list .vss-inner-list .vss-list-ul li span .vss-list-badge { font-size: 0.5rem; color: #fff; background-color: rgba(36, 41, 52, 0.15); padding: 2px 4px 0px 4px; border-radius: 20px; min-width: 14px; height: 14px; font-weight: bold; } .vss .vss-list .vss-inner-list .vss-list-ul li.active:not(.is-parent) > span { background-color: #e9e9e9; color: #6f6f6f; border-color: transparent; } .vss .vss-list .vss-inner-list .vss-list-ul li:not(.is-parent) > span { cursor: pointer; background-color: #fafafa; border: 1px solid whitesmoke; } .vss .vss-list .vss-inner-list .vss-list-ul li.no-results > span, .vss .vss-list .vss-inner-list .vss-list-ul li.no-selection > span { cursor: default; background-color: #fafafa; border-color: transparent; } .vss .vss-list .vss-inner-list .vss-list-ul > li.is-parent > span { font-weight: bold; padding-left: 0px; } .vss .vss-list .vss-inner-list .vss-footer { align-items: flex-end; display: flex; flex: 1 0 auto; } .vss .vss-list .vss-inner-list .vss-footer .vss-footer-bg { display: flex; justify-content: space-between; align-items: center; padding: 0px 12px; height: 2rem; width: 100%; background-color: #ededed; border-bottom-left-radius: 0.25rem; border-bottom-right-radius: 0.25rem; } .vss .vss-list .vss-inner-list .vss-footer .vss-footer-bg * { color: #484848; font-size: 0.7rem; } .vss .vss-list .vss-inner-list .vss-footer .vss-footer-bg > div { display: flex; } .vss .vss-list .vss-inner-list .vss-footer .vss-footer-bg > div .vss-footer-separator { margin: 0px 6px; } .vss .vss-list .vss-inner-list .vss-footer .vss-footer-bg > span { font-size: 0.6rem; font-weight: bold; color: #484848; background-color: white; padding: 1px 6px 0px 6px; border-radius: 20px; min-width: 14px; height: 14px; } .vss .vss-list .vss-total { font-size: 0.7rem; }
サンプル
さいごに
選択前・選択後の一覧コンポーネントでデータの移行を行って管理するライブラリでした。
今日はこの辺でー