全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

vue2 如何实现div contenteditable=“true”(类似于v-model)的效果

发现问题

在 vue2 中对表单控件有着良好的双向数据绑定机制,但是对于要特定实现某些功能的输入时,我们就不得不使用到 contenteditable="true" 的 div ,而在这个 div 上是使用 v-model 是没有效果的。那么问题就来了,输入是非常需要双向绑定的,这里的双向数据绑定该如何实现?

解决思路一:自定义指令

当然,说在这一段的前面,这种解决方式在 vue2 中是不行的,为什么这么说,因为现在去搜索这个问题绝大多数的搜索结果是这个,所以放在前面。

实现的原理以及为什么不能用了

原理:自定义一个双向数据绑定的指令,代码如下:

Vue.directive('demo', {
 twoWay: true,
 bind: function () {
 this.handler = function () {
  this.set(this.el.innerHTML)
 }.bind(this)
 this.el.addEventListener('input', this.handler)
 },
 update: function (newValue, oldValue) {
 this.el.innerHTML = newValue || ''
 },
 unbind: function () {
 this.el.removeEventListener('input', this.handler)
 }
})

至于 this 下的这些方法,在 vue 官网上可能不太容易找到,因为这些是 vue1 中的内容,而在 vue2 中已经被移除了。所以在 vue2 中我们是不能这么干的,当然如果你使用的是 vue1 那么完全没问题,直接拿去用即可。

解决思路二:使用组件

单独声明一个组件,在组件内部处理数据(也就是innerHTML),并将数据返回给父组件。

代码如下:

<template>
 <div contenteditable="true"
  v-html="innerText"
  @input="changeText"></div>
</template>
<script>
 export default {
 props: ['value'],
 data(){
  return {innerText:this.value}
 },
 methods:{
  changeText(){
  this.innerText = this.$el.innerHTML;
  this.$emit('input',this.innerText);
  }
 }
 }
</script>

然后在父组件中直接使用 v-model 就可以了(这里我把组件名称定义成了 v-edit-div)。

<template>
 <div>
 <v-edit-div v-model='text'></v-edit-div>
 <span>{{text}}</span>
 </div>
</template>
<script>
 export default {
 data(){
  return {
  text:'改一下试一试',
  }
 }
 }
</script>

至于为什么可以直接用 v-model ,看官网的 API 吧。

v-model 传送门

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。


# vue  # contenteditable  # vue.js  # v  # model  # 在Vue2中v-model和.sync区别解析  # vue2和vue3组件v-model区别详析  # Vue2子组件绑定 v-model  # 实现父子组件通信方式  # vue2中如何自定义组件的v-model  # Vue ​v-model相关知识总结  # vue2 v-model/v-text 中使用过滤器的方法示例  # vue 2.0组件与v-model详解  # Vue2.0利用 v-model 实现组件props双向绑定的优美解决方案  # vue2与vue3双向数据绑定的区别说明  # vue 2 实现自定义组件一到多个v-model双向数据绑定的方法(最新推荐)  # 绑定  # 而在  # 自定义  # 的是  # 如果你  # 来了  # 成了  # 放在  # 在这  # 不太  # 这个问题  # 我把  # 用了  # 并将  # 可以直接  # 该如何  # 这篇文章  # 表单  # 中对  # 拿去 


相关文章: c++ stringstream用法详解_c++字符串与数字转换利器  Swift开发中switch语句值绑定模式  如何获取免费开源的自助建站系统源码?  ,有什么在线背英语单词效率比较高的网站?  存储型VPS适合搭建中小型网站吗?  如何批量查询域名的建站时间记录?  招商网站制作流程,网站招商广告语?  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  如何在云主机上快速搭建网站?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  如何在建站之星绑定自定义域名?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  如何通过VPS建站实现广告与增值服务盈利?  宝塔Windows建站如何避免显示默认IIS页面?  如何在新浪SAE免费搭建个人博客?  济南网站制作的价格,历城一职专官方网站?  建站与域名管理如何高效结合?  魔方云NAT建站如何实现端口转发?  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  如何高效完成自助建站业务培训?  广州营销型建站服务商推荐:技术优势与SEO优化解析  建站之星Pro快速搭建教程:模板选择与功能配置指南  专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?  成都响应式网站开发,dw怎么把手机适应页面变成网页?  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?  如何在云主机快速搭建网站站点?  建站之星CMS建站配置指南:模板选择与SEO优化技巧  如何获取开源自助建站系统免费下载链接?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  已有域名和空间如何快速搭建网站?  如何在云服务器上快速搭建个人网站?  如何构建满足综合性能需求的优质建站方案?  如何快速上传自定义模板至建站之星?  建站主机是否属于云主机类型?  c# 在高并发下使用反射发射(Reflection.Emit)的性能  内部网站制作流程,如何建立公司内部网站?  建站主机是否等同于虚拟主机?  建站之星各版本价格是多少?  高端云建站费用究竟需要多少预算?  在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  如何通过服务器快速搭建网站?完整步骤解析  微课制作网站有哪些,微课网怎么进?  如何快速搭建虚拟主机网站?新手必看指南  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  如何在自有机房高效搭建专业网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。