I. Insert pictures in vue-multiselect.
The select tab is used to select, in some respects it is similar to the radio button, but the difference is that the select has a drop-down menu style. This card has many special restrictions, including not accepting the img tag in the option, which makes adding images to this tag quite difficult. There are some ways like using the background property of css but the most common way people use is to use jquery.
- Link jquery insert image in select option: http://www.devirtuoso.com/2009/08/styling-drop-down-boxes-with-jquery/
- This article is about vue.js, so I would like to introduce a vue-multiselect module to make things easier.
II. Install vue-multiselect.
- First of all, to use multiselect, you need to install it, you can view on the doc and follow the instructions for quick.
- Doc: https://vue-multiselect.js.org/
- How to install, please see here: https://www.npmjs.com/package/vue-multiselect
- Very detailed and simple people run npm and import following the instructions in the link above is ok.
III. Begin.
1. Create file
- Create file with Demo.vue name. I created the views folder in src and created the Demo.vue file in it. (path src / views / Demo.vue)
2. Router handling.
- In the index.js file in the router folder, add a new router as follows.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import Vue from <span class="token single-quoted-string string">'vue'</span> import Router from <span class="token single-quoted-string string">'vue-router'</span> import Multiselect from <span class="token single-quoted-string string">'@/views/Demo'</span> Vue <span class="token punctuation">.</span> <span class="token keyword">use</span> <span class="token punctuation">(</span> Router <span class="token punctuation">)</span> <span class="token keyword">const</span> router <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Router</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> mode <span class="token punctuation">:</span> <span class="token single-quoted-string string">'history'</span> <span class="token punctuation">,</span> routes <span class="token punctuation">:</span> <span class="token punctuation">[</span> <span class="token punctuation">{</span> path <span class="token punctuation">:</span> <span class="token single-quoted-string string">'/multiselect'</span> <span class="token punctuation">,</span> name <span class="token punctuation">:</span> <span class="token single-quoted-string string">'Multiselect'</span> <span class="token punctuation">,</span> component <span class="token punctuation">:</span> Multiselect <span class="token punctuation">}</span> <span class="token punctuation">]</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> |
3. Import multiselect.
- In the Demo.vue file you import vue-multiselect.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <span class="token operator"><</span> template <span class="token operator">></span> <span class="token operator"><</span> div <span class="token operator">></span> <span class="token operator"><</span> h1 style <span class="token operator">=</span> <span class="token double-quoted-string string">"color:white"</span> <span class="token operator">></span> Chèn ảnh vào multiselect <span class="token operator"><</span> <span class="token operator">/</span> h1 <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> template <span class="token operator">></span> <span class="token operator"><</span> script <span class="token operator">></span> import Multiselect from <span class="token single-quoted-string string">'vue-multiselect'</span> export <span class="token keyword">default</span> <span class="token punctuation">{</span> data <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">{</span> value <span class="token punctuation">:</span> <span class="token keyword">null</span> <span class="token punctuation">,</span> options <span class="token punctuation">:</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> components <span class="token punctuation">:</span> <span class="token punctuation">{</span> Multiselect <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token operator"><</span> <span class="token operator">/</span> script <span class="token operator">></span> |
- Test it up, we will get this:
4. Insert the image.
- This is also quite simple. You only need to insert your template into the multiselect module. Most vue modules allow us to revise their own template so that users can have a more comfortable look. Similarly you can customize the multiselect template to fit your own needs.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | <span class="token operator"><</span> template <span class="token operator">></span> <span class="token operator"><</span> div style <span class="token operator">=</span> <span class="token double-quoted-string string">"width: 100%; height: 500px"</span> <span class="token operator">></span> <span class="token operator"><</span> h1 style <span class="token operator">=</span> <span class="token double-quoted-string string">"color:white"</span> <span class="token operator">></span> Chèn ảnh vào multiselect <span class="token operator"><</span> <span class="token operator">/</span> h1 <span class="token operator">></span> <span class="token operator"><</span> multiselect v <span class="token operator">-</span> model <span class="token operator">=</span> <span class="token double-quoted-string string">"value"</span> <span class="token punctuation">:</span> placeholder <span class="token operator">=</span> <span class="token double-quoted-string string">"multiselect"</span> label <span class="token operator">=</span> <span class="token double-quoted-string string">"title"</span> track <span class="token operator">-</span> by <span class="token operator">=</span> <span class="token double-quoted-string string">"title"</span> <span class="token punctuation">:</span> options <span class="token operator">=</span> <span class="token double-quoted-string string">"options"</span> <span class="token punctuation">:</span> option <span class="token operator">-</span> height <span class="token operator">=</span> <span class="token double-quoted-string string">"100"</span> <span class="token punctuation">:</span> show <span class="token operator">-</span> labels <span class="token operator">=</span> <span class="token double-quoted-string string">"false"</span> <span class="token operator">></span> <span class="token operator"><</span> template slot <span class="token operator">=</span> <span class="token double-quoted-string string">"singleLabel"</span> slot <span class="token operator">-</span> scope <span class="token operator">=</span> <span class="token double-quoted-string string">"props"</span> <span class="token operator">></span> <span class="token operator"><</span> div <span class="token operator">></span> <span class="token operator"><</span> img <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token double-quoted-string string">"option__image"</span> <span class="token punctuation">:</span> src <span class="token operator">=</span> <span class="token double-quoted-string string">"props.option.img"</span> style <span class="token operator">=</span> <span class="token double-quoted-string string">"width:40px; height:40px"</span> <span class="token operator">></span> <span class="token operator"><</span> span <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token double-quoted-string string">"option__desc"</span> <span class="token operator">></span> <span class="token operator"><</span> span <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token double-quoted-string string">"option__title"</span> <span class="token operator">></span> <span class="token operator"><</span> a <span class="token operator">></span> <span class="token punctuation">{</span> <span class="token punctuation">{</span> props <span class="token punctuation">.</span> option <span class="token punctuation">.</span> title <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token operator"><</span> <span class="token operator">/</span> a <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> span <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> span <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> template <span class="token operator">></span> <span class="token operator"><</span> template slot <span class="token operator">=</span> <span class="token double-quoted-string string">"option"</span> slot <span class="token operator">-</span> scope <span class="token operator">=</span> <span class="token double-quoted-string string">"props"</span> <span class="token operator">></span> <span class="token operator"><</span> img <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token double-quoted-string string">"option__image pull-left"</span> <span class="token punctuation">:</span> src <span class="token operator">=</span> <span class="token double-quoted-string string">"props.option.img"</span> style <span class="token operator">=</span> <span class="token double-quoted-string string">"width:40px; height:40px"</span> <span class="token operator">></span> <span class="token operator"><</span> div <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token double-quoted-string string">"option__desc pull-left"</span> <span class="token operator">></span> <span class="token operator"><</span> span <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token double-quoted-string string">"option__title"</span> <span class="token operator">></span> <span class="token punctuation">{</span> <span class="token punctuation">{</span> props <span class="token punctuation">.</span> option <span class="token punctuation">.</span> title <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token operator"><</span> <span class="token operator">/</span> span <span class="token operator">></span> <span class="token operator"><</span> p <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token double-quoted-string string">"option__small"</span> <span class="token operator">></span> <span class="token punctuation">{</span> <span class="token punctuation">{</span> props <span class="token punctuation">.</span> option <span class="token punctuation">.</span> desc <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token operator"><</span> <span class="token operator">/</span> p <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> div <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token double-quoted-string string">"both-risk"</span> <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> template <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> multiselect <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> template <span class="token operator">></span> <span class="token operator"><</span> script <span class="token operator">></span> import Multiselect from <span class="token single-quoted-string string">'vue-multiselect'</span> export <span class="token keyword">default</span> <span class="token punctuation">{</span> data <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">{</span> value <span class="token punctuation">:</span> <span class="token punctuation">{</span> title <span class="token punctuation">:</span> <span class="token single-quoted-string string">'Explorer'</span> <span class="token punctuation">,</span> desc <span class="token punctuation">:</span> <span class="token single-quoted-string string">'Discovering new species!'</span> <span class="token punctuation">,</span> img <span class="token punctuation">:</span> <span class="token single-quoted-string string">'static/images/avatar.png'</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> options <span class="token punctuation">:</span> <span class="token punctuation">[</span> <span class="token punctuation">{</span> title <span class="token punctuation">:</span> <span class="token single-quoted-string string">'Space Pirate'</span> <span class="token punctuation">,</span> desc <span class="token punctuation">:</span> <span class="token single-quoted-string string">'More space battles!'</span> <span class="token punctuation">,</span> img <span class="token punctuation">:</span> <span class="token single-quoted-string string">'static/avatar.png'</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> title <span class="token punctuation">:</span> <span class="token single-quoted-string string">'Merchant'</span> <span class="token punctuation">,</span> desc <span class="token punctuation">:</span> <span class="token single-quoted-string string">'PROFIT!'</span> <span class="token punctuation">,</span> img <span class="token punctuation">:</span> <span class="token single-quoted-string string">'static/avatar.png'</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> title <span class="token punctuation">:</span> <span class="token single-quoted-string string">'Explorer'</span> <span class="token punctuation">,</span> desc <span class="token punctuation">:</span> <span class="token single-quoted-string string">'Discovering new species!'</span> <span class="token punctuation">,</span> img <span class="token punctuation">:</span> <span class="token single-quoted-string string">'static/avatar.png'</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> title <span class="token punctuation">:</span> <span class="token single-quoted-string string">'Miner'</span> <span class="token punctuation">,</span> desc <span class="token punctuation">:</span> <span class="token single-quoted-string string">'We need to go deeper!'</span> <span class="token punctuation">,</span> img <span class="token punctuation">:</span> <span class="token single-quoted-string string">'static/avatar.png'</span> <span class="token punctuation">}</span> <span class="token punctuation">]</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> components <span class="token punctuation">:</span> <span class="token punctuation">{</span> Multiselect <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token operator"><</span> <span class="token operator">/</span> script <span class="token operator">></span> |
5. The results
6. Note.
1 2 3 | - Việc gọi ảnh trong vue có đôi chút khác biệt khi bạn gọi trực tiếp và gián tiếp. - Cách gọi ảnh bạn có thể tham khảo ở đây nhé: https://stackoverflow.com/questions/42793292/how-to-load-image-and-other-assets-in-angular-an-project |
IV. Conclude.
- So I have introduced how to insert pictures into multiselect then, quite simple. With the html select tags, you can also add images in the style of adding icons, as follows: https://mdbootstrap.com/docs/jquery/forms/multiselect/