Je travaillais avec select2 dans vuejs, j’ai constaté que vuejs ne fonctionnait pas avec jquery select2 car vuejs utilisait navite html.
J’utilise ce code
Vue.directive('select', { twoWay: true, bind: function () { $(this.el).select2() .on("select2:select", function(e) { this.set($(this.el).val()); }.bind(this)); }, update: function(nv, ov) { $(this.el).sortinggger("change"); } }); var app = new Vue({ el: '#app', data: { supplier_id: "niklesh" } }) $('#supplier_id').select2({});
{{ supplier_id }} Atul Niklesh Sachin
S’il vous plaît partagez votre réponse pour résoudre ce problème.
Pour que cela fonctionne avec une directive, nous devons comprendre le fonctionnement de v-model
. De la docs :
est juste du sucre syntaxique pour:
Dans le cas d’un élément select, v-model
écoutera l’événement change
(pas l’ input
). Ainsi, si la directive dissortingbue un événement change
lorsque l’élément change, alors v-model
fonctionnera comme prévu.
Voici une version mise à jour de votre code:
Vue.directive('select', { twoWay: true, bind: function (el, binding, vnode) { $(el).select2().on("select2:select", (e) => { // v-model looks for // - an event named "change" // - a value with property path "$event.target.value" el.dispatchEvent(new Event('change', { target: e.target })); }); }, }); var app = new Vue({ el: '#app', data: { supplier_id: "niklesh" }, }) $('#supplier_id').select2({});
{{ supplier_id }}
En affectant la valeur select2 aux données de vuejs, je peux résoudre ce problème. Je n’ai pas utilisé la directive personnalisée ici.
var app = new Vue({ el: '#app', data: { supplier_id: "niklesh" }, filters: { capitalize: function (value) { if (!value) return '' value = value.toSsortingng() return value.charAt(0).toUpperCase() + value.slice(1) } } }); $('#supplier_id').on("change",function(){ app.supplier_id = $(this).val(); console.log('Name : '+$(this).val()); }); $('#supplier_id').select2({});
Name : {{ supplier_id | capitalize }}