vue v-if v-show

1

使用 v-if 指令时,元素的插入和移除是动态的,当元素被移除时,与元素相关的对象和事件处理程序也会被销毁,包括 ACE 编辑器对象。因此,当再次插入元素时,相关的对象和事件处理程序需要重新初始化。
使用 v-show 可以在编辑器对象被创建后一直保持元素的显示状态,不会出现对象和事件处理程序被销毁的情况,因此可以正常工作。

2 v-if 导致错误 浏览器终端提醒没有dom 元素 --> 下面代码用v-show 可以

 <div class="editor-wrapper" v-if="editorVisible"><div  id="editor"> 
methods: {showEditor() {if (this.editorVisible) {// 如果编辑器已经打开,则关闭编辑器this.editorVisible = false;this.editor.destroy();this.editor = null;} else {// 如果编辑器未打开,则打开编辑器if (this.editor) {// 如果编辑器已经存在,则直接显示编辑器this.editorVisible = true;this.editor.focus();} else {// 如果编辑器不存在,则创建编辑器并显示const editor = ace.edit('editor');editor.setOptions({fontSize: '8pt',});editor.getSession().setMode('ace/mode/javascript');editor.setTheme('ace/theme/twilight');editor.setValue(this.code);editor.clearSelection();editor.focus();editor.$blockScrolling = Infinity; // 添加这句代码this.editor = editor;this.editorVisible = true;}}},

3 解决上面代码 使用v-if

Vue的v-if和v-show的区别是,v-if是按需渲染组件并且在切换时销毁和重新创建组件实例,而v-show是根据条件控制元素的显示和隐藏的。因此,在使用v-if时,如果元素在初始渲染时没有被渲染,那么在接下来的操作中就可能会出现找不到元素的情况。在你的代码中,当使用v-show时,元素会在初始渲染时就被渲染出来,因此ace.edit可以找到div #editor节点。但是,当你使用v-if时,div #editor元素在初始渲染时并没有被渲染出来,而是在showEditor方法中根据编辑器是否存在来创建或销毁元素。这个时候,如果你在创建编辑器之前就调用了ace.edit方法,就会报错找不到div #editor元素。解决方法有两种:使用v-show而不是v-if,因为v-show会在初始渲染时就将元素渲染出来。
将ace.edit方法的调用放在div #editor元素被创建后执行,可以在mounted钩子函数中添加一个this.$nextTick()方法来确保元素已经被渲染出来
data() {return {editorVisible: false,chart: null,editor: null,code: 'function funcSelfIndex() {\n  // 在这里输入自定义函数的代码\n\n\n\n\n\n\n\n\n}',};
},
mounted() {this.showEditor();
},
methods: {showEditor() {if (this.editorVisible) {this.editorVisible = false;if (this.editor) {this.editor.destroy();this.editor = null;}} else {this.editorVisible = true;if (!this.editor) {this.$nextTick(() => {const editor = ace.edit('editor');editor.setOptions({ fontSize: '8pt' });editor.getSession().setMode('ace/mode/javascript');editor.setTheme('ace/theme/twilight');editor.setValue(this.code);editor.clearSelection();editor.focus();editor.$blockScrolling = Infinity;this.editor = editor;});} else {this.editor.focus();}}},
}

4 总结

dom元素重新创建渲染,这个过程需要时间.导致代码执行时,
没有等待dom元素重新创建好就执行之后的代码
所以 v-if 重新创建dom元素,需要时间,并且代码执行时不等待dom元素是否创建成功
就执行之后的代码;导致可能找不到dom元素

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/870.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用EasyExcel读写Excel文件

笔者之前一直使用POI读写Excel文件&#xff0c;最近有个需求需要读取大概80万行数据的Excel&#xff0c;使用POI读取到10.2万行左右就卡死不动了&#xff0c;而且CPU占用直接拉满到100%&#xff0c;内存占用也很高。 查找资料后&#xff0c;发现POI提供了读取大量数据的方法&a…

手写对象浅比较(React中pureComponent和Component区别)

PureComponent和Component的区别 PureComponent会给类组件默认加一个shouldComponentUpdate这样的周期函数 //PureComponent类似自动加了这段shouldComponentUpdate(nextProps,nextState){let { props, state } this;// props/state:修改之前的属性状态// nextProps/nextState…

047、TiDB特性_TopSQL

TopSQL 之前 之前没有办法找单个TiKV Server的语句。只能查找整个集群的慢语句。 TopSQL之后 指定TiDB及TiKV实例正在执行的SQL语句CPU开销最多的Top 5 SQL每秒请求数、平均延迟等信息 TopSQL 使用 选择需要观察负载的具体TiDB Server或TiKV实例 观察Top 5 类SQL 查看某…

用IDEA写第一个Spring程序 HelloWorld

用IDEA写第一个Spring程序 HelloWorld 环境 Orcal JDK&#xff1a;1.8.0_341 maven&#xff1a;3.9.3 Spring&#xff1a;5.3.10 IDEA&#xff1a;2023.1.2 1. 安装JDK和IDEA 2. 安装maven并配置环境变量、换源 3. IDEA中maven属性配置&#xff0c;主要是版本和settings文件及…

python+selenium进行cnblog的自动化登录测试

Web登录测试是很常见的测试&#xff0c;手动测试大家再熟悉不过了&#xff0c;那如何进行自动化登录测试呢&#xff01;本文就基于pythonselenium结合unittest单元测试框架来进行一次简单但比较完整的cnblog自动化登录测试&#xff0c;可提供点参考&#xff01;下面就包括测试代…

python 调用百度文心一言接口开发聊天机器人

要使用Python调用百度文心一言接口开发聊天机器人&#xff0c;可以按照以下步骤进行&#xff1a; 注册百度智能云账号并创建一个API密钥。安装Python的requests库和BeautifulSoup库。可以使用以下命令进行安装&#xff1a; shellpip install requests beautifulsoup4 使用Pyt…

centos7 docker 安装sql server 2019

contos7安装sql server docker最低1.8或更高 卸载旧的docker sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine 装docker依赖包 #安装所需资源包 sudo yum install -…

【iOS】 各iPhone手机屏幕尺寸分辨率

机型物理像素逻辑像素规格对角线iPhone 14 Pro Max1290*2796px430*932pt3x6.7英寸iPhone 14 Pro1179*2556px393*852pt3x6.1英寸iPhone 14 Plus1284*2778px428*926pt3x6.7英寸iPhone 141170*2532px390*844pt3x6.1英寸iPhone 13 Pro Max1284*2778px428*926pt3x6.7英寸iPhone 13 P…

什么是暂时性死区?

1.定义&#xff1a; 暂时性死区&#xff08;Temporal Dead Zone&#xff0c;简称TDZ&#xff09;是指在 JavaScript 中使用 let 或 const 声明变量时&#xff0c;变量在其声明之前不能被访问或使用的特性。 在 JavaScript 中&#xff0c;变量声明提升是指在执行代码之前&…

rust学习-闭包

背景 模拟健康推荐算法&#xff0c;为前端提供高强度/低强度的训练app use std::thread; use std::time::Duration;fn simulated_expensive_calculation(intensity: u32) -> u32 {println!("calculating slowly...");thread::sleep(Duration::from_secs(2));int…

uniapp实现微信小程序自带的分享功能

定义 share.js 文件 export default {data() {return {// 默认的全局分享内容share: {title: 标题,path: /pages/index/index, // 全局分享的路径imageUrl: , // 全局分享的图片(可本地可网络)}}},// 定义全局分享// 1.发送给朋友onShareAppMessage(res) {return {title: this…

数据结构与算法——希尔排序(引例、希尔增量序列、原始希尔排序、代码、时间复杂度、Hibbard增量序列、Sedgewick增量序列)

目录 引例 希尔增量序列 原始希尔排序 代码&#xff08;C语言&#xff09; 时间复杂度 更多增量序列 Hibbard增量序列 Sedgewick增量序列 希尔排序&#xff08;by Donald Shell&#xff09; 引例 给以下序列进行排序&#xff1a; 先以5的间隔进行插入排序&#xff1a…

设计模式之桥接模式

写在前面 本文看下桥接设计模式。 1&#xff1a;介绍 1.1&#xff1a;什么时候桥接设计模式 当一个业务场景由多个变化维度组成&#xff0c;并且这多个变化的维度到底有多少种情况是不确定&#xff0c;比如现在我们要为瑞幸咖啡写一个系统&#xff0c;很自然的&#xff0c;…

2023.7.16 第五十九次周报

目录 前言 文献阅读:跨多个时空尺度进行预测的时空 LSTM 模型 背景 本文思路 本文解决的问题 方法论 SPATIAL 自动机器学习模型 数据处理 模型性能 代码 用Python编写的LSTM多变量预测模型 总结 前言 This week, I studied an article that uses LSTM to solve p…

【前端知识】React 基础巩固(二十三)——React 性能优化 SCU相关

React 基础巩固(二十三)——React 性能优化 SCU React 更新机制 React 的渲染流程 JSX -> 虚拟 DOM -> 真实 DOM React 的更新流程 props/state 改变 -> render函数重新执行 -> 产生新的DOM树 -> 新旧DOM树进行diff -> 计算出差异进行更新 -> 更新到真实…

Element分页组件自定义样式

样式效果 页面代码 <el-paginationsize-change"handleSizeChange"current-change"handleCurrentChange":current-page"page.page":page-sizes"[10, 20, 30, 40]":page-size"page.size"layout"total, sizes, prev, …

如何用https协议支持小程序

步骤一&#xff1a;下载SSL证书 登录数字证书管理服务控制台。在左侧导航栏&#xff0c;单击SSL 证书。在SSL证书页面&#xff0c;定位到目标证书&#xff0c;在操作列&#xff0c;单击下载。 在服务器类型为Nginx的操作列&#xff0c;单击下载。 解压缩已下载的SSL证书压缩…

Python中Threading对于TCP的使用

什么是多线程&#xff1f; 多线程类似于同时执行多个不同程序&#xff0c;多线程运行有如下优点&#xff1a; 使用线程可以把占据长时间的程序中的任务放到后台去处理。 用户界面可以更加吸引人&#xff0c;这样比如用户点击了一个按钮去触发某些事件的处理&#xff0c;可以弹…

springboot经典面试题2

问题&#xff1a;什么是Spring Boot的起步依赖&#xff08;Starter Dependencies&#xff09;&#xff1f;如何使用起步依赖&#xff1f; 答案&#xff1a;Spring Boot的起步依赖是一组预定义的依赖项&#xff0c;可以简化项目的配置和构建过程。可以通过在项目的构建配置文件…

[个人笔记] WinSrv批量添加DNS记录和条件转发器记录

Windows Server - 运维篇 第三章 WinSrv批量添加DNS记录和条件转发器记录 Windows Server - 运维篇系列文章回顾WinSrv批量添加DNS记录和条件转发器记录单条记录添加DNS条件转发器记录批量新增DNS条件转发器记录批量导出DNS条件转发器 参考来源 系列文章回顾 第一章 域控使用C…