Bài viết này mình sẽ cùng bạn đi giải quyết 2 vấn đề đó là cách dùng select2 như thế nào trong vue js và cách khắc phục sự kiên @change không hoạt động khi dùng select2
1 2 |
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/select2.min.css" rel="stylesheet" /> |
Mỗi select2 sẽ cần 2 data: dự liệu được chọn và dữ liệu các option (được tổ chức gồm array các object)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
dataApprove: { selectedProvince: '1', province: [ { value: '1', name: 'Quảng nam' }, { value: '2', name: 'Hà nội' } ], selectedDistrict: '1', district: [ { value: '1', name: 'Quảng nam' }, { value: '2', name: 'Hà nội' } ], selectedWard: '1', ward: [ { value: '1', name: 'Quảng nam' }, { value: '2', name: 'Hà nội' } ], } |
Chúng ta sẽ sử dụng v-for để tạo các option từ dữ liệu
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<div class="row q-col-gutter-md q-mb-md"> <div class="col-4"> <select v-select2 @change="handleSelectedProvince" v-model="dataApprove.selectedProvince" class="approveShopProvince" id="approveShopProvince" v-if="dataApprove.province.length > 0"> <option v-for="(item, index) in dataApprove.province" :key="index" :value="item.value">{{item.name}} </option> </select> </div> <div class="col-4"> <select v-select2 @change="handleSelectedDistrict" v-model="dataApprove.selectedDistrict" class="approveShopDistrict" id="approveShopDistrict" v-if="dataApprove.district.length > 0"> <option v-for="(item, index) in dataApprove.district" :key="index" :value="item.value">{{item.name}} </option> </select></div> <div class="col-4"> <select v-select2 v-model="dataApprove.selectedWard" class="approveShopWard" id="approveShopWard" v-if="dataApprove.ward.length > 0"> <option v-for="(item, index) in dataApprove.ward" :key="index" :value="item.value">{{item.name}} </option> </select></div> </div> |
Tại function updated của vue js chúng ta gọi như bên dưới
1 2 3 4 5 6 7 |
updated(){ jQuery('#approveShopProvince').select2({}) jQuery('#approveShopDistrict').select2({}) jQuery('#approveShopWard').select2({}) } |
thêm một v-select2 để kích hoạt sự kiện change của select2
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Vue.directive('select2', { inserted(el) { jQuery(el).on('select2:select', () => { const event = new Event('change', { bubbles: true, cancelable: true }); el.dispatchEvent(event); }); jQuery(el).on('select2:unselect', () => { const event = new Event('change', {bubbles: true, cancelable: true}) el.dispatchEvent(event) }) }, }); |
Mọi sự sao chép xin ghi rõ nguồn là fcwordpress.net
Chuyên trang về wordpress: hướng dẫn thiết kế theme, plugin, thủ thuật wordpress