前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vue directive中修改v-model值

Vue directive中修改v-model值

作者头像
javascript.shop
发布2019-11-13 13:57:25
2.7K0
发布2019-11-13 13:57:25
举报
文章被收录于专栏:杰的记事本杰的记事本

最近在重构一个旧项目,这个项目用到了一些bootstrap的插件,我们想保留这些插件,就会遇到一些问题,比如我们把插件封装成了directive,在双向绑定方面需要做如下处理:

  1. <div v-custom= “customData”>Test</div> , 我们想要在directive中,对customData进行改变,可以使用 vnode.context[binding.expression]进行赋值即可,如下例子:
代码语言:javascript
复制
 Vue.directive("custom", {
  bind: function(element, binding, vnode) {
    $(element).on("click", function() {
      vnode.context[binding.expression] = false; // sync binding.value = false;
    });
  }
});

2. <input v-model=”customValue” v-custom= “customData”></> , 我们知道v-model其实是input事件改变value的语法糖,所以我们想要在directive中对v-model进行改变,可以使用dispatchEvent(‘input’)的方法,如下例子:

代码语言:javascript
复制
 // 这个函数是从vue.js源码中复制的,方便我们手动触发事件
function trigger(el, type) {
    var e = document.createEvent("HTMLEvents");
    e.initEvent(type, true, true);
    el.dispatchEvent(e);
  }
 Vue.directive("custom", {
  bind: function(element, binding, vnode) {
    $(element).on("focus", function() {
       element.value = 'FOCUS';
       trigger(element, "input");
    });
   }
});
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年11月13日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档