When you emit your directive, you emit an event from the root of the node ( context ). You must throw an event from the node itself. You do not have access to the $ emit event, but you can check the handlers that were bound to the node. In this case, v-model uses the change handler. Thus, if you write your directive like this, your code should work.
Vue.directive('chosen', { bind: function (el, binding, vnode, oldVnode) { Vue.nextTick(function() { $(el).chosen({ width:'100%' }).change(function(e){ vnode.data.on.change(e, $(el).val()) }); }); } });
Here is an example .
Bert
source share