范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

灵光一闪!帮你使用Vue,搞定无法解决的动态挂载

  在一些特殊场景下,使用组件的时机无法确定,或者无法在Vue的template中确定要我们要使用的组件,这时就需要动态的挂载组件,或者使用运行时编译动态创建组件并挂载。
  今天我们将带大家从实际项目出发,看看在实际解决客户问题时,如何将组件进行动态挂载,并为大家展示一个完整的解决动态挂载问题过程。
  无法解决的"动态挂载"
  我们的电子表格控件SpreadJS在运行时,存在这样一个功能:当用户双击单元格会显示一个输入框用于编辑单元格的内容,用户可以根据需求按照自定义单元格类型的规范自定义输入框的形式,集成任何Form表单输入类型。
  这个输入框的创建销毁都是通过继承单元格类型对应方法实现的,因此这里就存在一个问题——这个动态的创建方式并不能简单在VUE template中配置,然后直接使用。
  而就在前不久,客户问然询问我:你家控件的自定义单元格是否支持Vue组件比如ElementUI 的AutoComplete?
  由于前面提到的这个问题:
  沉思许久,我认真给客户回复:"组件运行生命周期不一致,用不了",但又话锋一转,表示可以使用通用组件解决这个问题。
  问题呢,是顺利解决了。
  但是这个无奈的"用不了",却也成为我这几天午夜梦回跨不去的坎。
  后来,某天看Vue文档时,我想到App是运行时挂载到#app上的。从理论上来说,其他组件也应该能动态挂载到需要的Dom上,这样创建时机的问题不就解决了嘛! 正式开启动态挂载
  让我们继续查看文档,全局APIVue.extend( options ) 是通过extend创建的。Vue实例可以使用$mount方法直接挂载到DOM元素上——这正是我们需要的。 // 创建构造器 var Profile = Vue.extend({   template: "

{{firstName}} {{lastName}} aka {{alias}}",   data: function () {     return {       firstName: "Walter",       lastName: "White",       alias: "Heisenberg"     }   } }) // 创建 Profile 实例,并挂载到一个元素上。 new Profile().$mount("#mount-point")   按照SpreadJS 自定义单元格示例创建AutoCompleteCellType,并设置到单元格中:function AutoComplateCellType() { } AutoComplateCellType.prototype = new GC.Spread.Sheets.CellTypes.Base(); AutoComplateCellType.prototype.createEditorElement = function (context, cellWrapperElement) { //   cellWrapperElement.setAttribute("gcUIElement", "gcEditingInput");   cellWrapperElement.style.overflow = "visible"   let editorContext = document.createElement("p")   editorContext.setAttribute("gcUIElement", "gcEditingInput");   let editor = document.createElement("p");   // 自定义单元格中editorContext作为容器,需要在创建一个child用于挂载,不能直接挂载到editorContext上   editorContext.appendChild(editor);   return editorContext; } AutoComplateCellType.prototype.activateEditor = function (editorContext, cellStyle, cellRect, context) {     let width = cellRect.width > 180 ? cellRect.width : 180;     if (editorContext) {       // 创建构造器       var Profile = Vue.extend({         template: "

{{firstName}} {{lastName}} aka {{alias}}",         data: function () {           return {             firstName: "Walter",             lastName: "White",             alias: "Heisenberg"           }         }       })       // 创建 Profile 实例,并挂载到一个元素上。       new Profile().$mount(editorContext.firstChild);     } };   运行,双击进入编辑状态,结果却发现报错了   [Vue warn]: You are using the runtime-only build of Vue where the template compiler is not available. Either pre-compile the templates into render functions, or use the compiler-included build.   根据报错提示,此时我们有两种解决办法:开启runtimeCompiler,在vue.config.js中加入runtimeCompiler: true的配置,允许运行时编译,这样可以动态生成template,满足动态组件的需求提前编译模板仅动态挂载,autocomplete的组件是确定的,我们可以使用这种方法   新建AutoComplete.vue组件用于动态挂载,这样可以挂载编译好的组件。 import AutoComplate from "./AutoComplate.vue" AutoComplateCellType.prototype.activateEditor = function (editorContext, cellStyle, cellRect, context) {     let width = cellRect.width > 180 ? cellRect.width : 180;     if (editorContext) {       // 创建构造器       var Profile = Vue.extend(AutoComplate);       // 创建 Profile 实例,并挂载到一个元素上。       new Profile().$mount(editorContext.firstChild);     } };   双击进入编辑状态,看到组件中的内容   下一步,对于自定义单元格还需要设置和获取组件中的编辑内容,这时通过给组件添加props,同时在挂载时创建的VueComponent实例上直接获取到所有props内容,对应操作即可实现数据获取设置。   更新AutoComplate.vue,添加props,增加input用于编辑   通过this.vm存储VueComponent实例,在getEditorValue 和setEditorValue 方法中获取和给VUE组件设置Value。编辑结束,通过调用$destroy()方法销毁动态创建的组件。AutoComplateCellType.prototype.activateEditor = function (editorContext, cellStyle, cellRect, context) {     let width = cellRect.width > 180 ? cellRect.width : 180;     if (editorContext) {       // 创建构造器       var Profile = Vue.extend(MyInput);       // 创建 Profile 实例,并挂载到一个元素上。       this.vm = new Profile().$mount(editorContext.firstChild);     } };   AutoComplateCellType.prototype.getEditorValue = function (editorContext) {     // 设置组件默认值     if (this.vm) {         return this.vm.value;     } }; AutoComplateCellType.prototype.setEditorValue = function (editorContext, value) {     // 获取组件编辑后的值     if (editorContext) {       this.vm.value = value;     } }; AutoComplateCellType.prototype.deactivateEditor = function (editorContext, context) {     // 销毁组件     this.vm.$destroy();     this.vm = undefined; };   整个流程跑通了,下来只需要在AutoComplate.vue中,将input替换成ElementUI 的el- autocomplete并实现对应方法就好了。结果   让我们看看效果吧。   其实动态挂载并不是什么复杂操作,理解了Vue示例,通过vm来操作实例,灵活的运用动态挂载或者运行时编译的组件就不是什么难事了。   其实一切的解决方案就在Vue教程入门教程中,但是脚手架的使用和各种工具的使用让我们忘记了Vue的初心,反而把简单问题复杂化了。   今天的分享到这里就结束啦,后续还会为大家带来更多严肃和有趣的内容~   你有什么在开发中"忘记初心"的事情吗?   葡萄城微信号:"葡萄城社区"。


京东刘强东将向慈善机构捐赠23。4亿美元股票用于教育环保,2003年已开始捐资助学36氪获悉,京东集团公告称,公司董事会主席兼首席执行官刘强东将向慈善机构捐赠62,376,643股B类普通股作慈善用途。公开资料显示,截至2月1日美股收盘,京东集团股价每ADS为7聚焦三条主线实现六大跃升北京科技工作总体思路公布市科委中关村管委会日前公布了2022年北京科技工作的总体思路。市科委中关村管委会表示,2022年全市科技工作将聚焦国际科技创新中心世界领先的科技园区和国家实验室建设三条主线,加快实iPhoneXR升级iOS15。4适合养老了iPhoneXR从iOS15。3升级到iOS15。4beta各方面都有提升,还是非常推荐升级的。1。从流畅度来说,iOS15。3已经足够优秀了,系统流畅度真心不错,滑屏很跟手,指哪谷歌A(GOOGL。US)2021年Q4财报实现营收753。25亿美元谷歌A(GOOGL。US)2021年Q4财报实现营收753。25亿美元,前值为568。98亿美元,预期值为721。3亿美元,超出市场预期4。43每股收益为30。69美元,前值为22李剑叶飞扬的设计将现代与传统深度融合来源人民网火炬是北京冬奥会理念和我国文化的重要载体,是北京冬奥会的愿景和精神的集中体现。北京冬奥会火炬设计者阿里巴巴首席工业设计师李剑叶1月25日在京参加非遗虎年大集活动时如是表示汽车行业总结2021之供应链篇汽车行业的发展离不开技术和供应链,随着传统燃油车市场化程度的进入蓝海,对于所有参与市场竞争的所有厂商来说,重点是还是供应链的坚韧程度,特别是后疫情时代带来的缺芯因素,对于电动化和智苹果和微软的仇,算是结下了不知道在座各位还有多少人记得苹果和Epic的纠纷,截至到目前为止,苹果算是取得了阶段性胜利,整个官司进程正在向苹果有利的方向发展,可只要还没到终审阶段,一切都还有变数,更何况等着看科技指南好物推荐4微软家Surface韩国迷你冰箱绿厂千元手机科技指南又来给大家推荐好物了,Windows界按道理只有微软Surface才可以称为真正的笔记本,其他品牌都是配菜,哈哈韩国国小房子也小,个性的卧室级小冰箱超可爱年轻人学生党考虑手美国联邦贸易委员会将审查微软(MSFT。US)收购动视暴雪(ATVI。US)交易智通财经APP获悉,知情人士透露,美国联邦贸易委员会(FTC)将对微软(MSFT。US)以687亿美元收购动视暴雪(ATVI。US)进行反垄断审查。此次将由联邦贸易委员会而不是司法对微软进行反击?索尼宣布36亿美元收购命运开发商Bungie21世纪经济报道记者白杨北京报道美国时间1月31日,索尼互动娱乐宣布将以36亿美元的价格收购游戏开发商Bungie,这也为1月份的游戏行业收购大戏画上了句号。此前1月11日,Tak高新技术介入教学过程的伦理评价对于我国大陆教师课堂教学方法信念支柱宣讲灌输,教育部前陈部长是否定的,并认为我国目前这种教学方法百分之九十是无效的,命令在每个教室里安装摄像头。最高领导的教育哲学观念也进行调整学生
重磅锂硫电池重大突破,世界知名科学期刊封面报道更多消息,请关注公众号康桥电池能源CamCellLab导读据外媒消息,锂硫电池是一种二次电池,也就是可充电电池。和现在广泛使用钴镍和其他高价稀土元素(如正极材料)的锂离子电池不同,京东又换logo,立体变扁平后,狗子还变白了今天,整个互联网圈最火的事情,那就是京东又换logo了。新图标造型和之前一样,但最大的区别就是弱化以前的3D感,立体变变扁平后,于是狗子变白了。说实话,看到这只变白的狗子的时候,我稳定神话破灭,复盘一天蒸发2000亿美元的币圈灾难上周虚拟货币LUNA与UST暴雷,搅动了整个虚拟货币市场。数据显示,5月12日全球虚拟货币总市值波动下跌,最大下跌幅度超2000亿美元。暴雷事件的影响也持续至今,有投资者难以忍受L什么是深度学习现在各种名词非常火,什么人工智能机器学习深度学习,那么我要学习它,当然是要在一个大的方向轮廓上看到它。比如爬一座山,先远远的看看,对它有一个大致的了解。好了,先上一张图,远远的看一永不失联!中国电信发布天地翼卡不换卡不换号,直拨卫星在世界电信和社会信息日当天,中国电信发布了天地翼卡产品,官方宣称无需换卡换号,同时可享受地面4G5G信号,也可连接天通一号卫星移动通信系统,即使在荒郊野外也可保持信号畅通。此项产品iOS15新版值得更新iPhone双卡信号偷偷优化了一直以来,用户对于iPhone信号不佳这个事实已经习惯了,但是不能说苹果没有努力,从英特尔换到高通基带,信号体验还是有所提升的。不过最近有不少用户反馈,苹果月初推送的iOS15。5以太坊巨鲸在稳定币崩盘中押注ShibaInu如果你认为以太坊鲸鱼在SHIB急剧下跌后放弃了它,那么你可能错了。加密货币ShibaInu是最富有的以太坊鲸鱼。鲸鱼加密货币是一个术语,用于描述持有大量某种加密货币硬币的个人或机构设计精湛,三星GalaxyZFlip35G展现折叠屏美学新风尚折叠屏手机经历了近一年的行业内卷,已经逐渐走向了普通人的消费领域。随着新品三星GalaxyZFlip35G的上市,不少中意掌心折叠屏手机的朋友有了新选择。作为一款折叠屏手机,三星G锁定你的粉嫩少女心,达尔优电竞装备套装上手体验,超萌超可爱哪个男士不爱机甲风,哪个女士不爱糖果粉。作为一名热爱电竞的游戏少女,粉色成为了我的最爱,我要打造一个属于自己的少女粉游戏世界。在电竞外设领域中,机甲风类型外设比较常见,糖果粉类型外OPPO和vivo没那么差劲,这三款放心入手,五月换新机正合适OPPO和vivo手机很长一段时间以来被人们叫做厂妹机,以及就是外观好看,但性能不行的低端机。但这几年,OPPO和vivo在不断积累自己的,厚积薄发开拓高端手机市场领域。现在的OP手机主板的质量好坏与颜色有关吗?文小伊评科技本文共722字预计阅读时长3分钟引言在早期的电脑主板业内确实是有用主板颜色来区分高中低档产品的说法或者说是一种墨守成规的潜规则。一般来说在PC主板领域,绿色PCB主板多