L’événement Select2 on change ne fonctionne pas dans Vuejs

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 }}