广告
返回顶部
首页 > 资讯 > 前端开发 > 其他 >vue dom是什么意思啊
  • 102
分享到

vue dom是什么意思啊

Vuedom虚拟DOM 2023-05-14 21:05:45 102人浏览 独家记忆
摘要

本教程操作环境:windows7系统、vue3版,DELL G3电脑。什么是domdom是一种文档对象模型,同时也是用于html编程的接口,通过dom来操作页面中的元素。当html页面被实现加载的时候,浏览器会创建一个dom,给文档提供了一

vue dom是什么意思啊

教程操作环境:windows7系统、vue3版,DELL G3电脑。

什么是dom

dom是一种文档对象模型,同时也是用于html编程的接口,通过dom来操作页面中的元素。当html页面被实现加载的时候,浏览器会创建一个dom,给文档提供了一种新的逻辑结构,并且可以改变内容和结构。

DOM称为文件对象模型(DocumentObjectModel,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口

DOM是HTML文档的内存中对象表示,它提供了使用javascript与网页交互的方式。DOM是节点的层次结构(或树),其中document节点作为根。

实际上DOM是以面向对象的方式来描述的文档模型。DOM定义了表示和修改文档所需的对象和这些对象的行为和属性以及这些对象之间的关系。

通过JavaScript,我们可以重构整个HTML文档。比如添加、移除、改变或重排页面上的项目

要改变页面上的某个东西,JavaScript就需要获得对HTML文档中所有元素进行访问的入口。这个入口,连同对HTML元素进行添加、移动、改变或移除的方法和属性,都是通过文档对象模型来获得的。

什么是虚拟DOM

虚拟 DOM (Virtual DOM )这个概念相信大家都不陌生,从 ReactVue ,虚拟 DOM 为这两个框架都带来了跨平台的能力(React-Native 和 Weex)

实际上它只是一层对真实DOM的抽象,以JavaScript 对象 (Vnode 节点) 作为基础的树,用对象的属性来描述节点,最终可以通过一系列操作使这棵树映射到真实环境上

在Javascript对象中,虚拟DOM 表现为一个 Object对象。并且最少包含标签名 (tag)、属性 (attrs) 和子元素对象 (children) 三个属性,不同框架对这三个属性的名命可能会有差别

创建虚拟DOM就是为了更好将虚拟的节点渲染到页面视图中,所以虚拟DOM对象的节点与真实DOM的属性一一照应

在vue中同样使用到了虚拟DOM技术

定义真实DOM

<div id="app">
    <p class="p">节点内容</p>
    <h3>{{ foo }}</h3>
</div>

实例化vue

const app = new Vue({
    el:"#app",
    data:{
        foo:"foo"
    }
})

观察render的render,我们能得到虚拟DOM

(function anonymous(
) {
	with(this){return _c('div',{attrs:{"id":"app"}},[_c('p',{staticClass:"p"},
					  [_v("节点内容")]),_v(" "),_c('h3',[_v(_s(foo))])])}})

通过VNode,vue可以对这颗抽象树进行创建节点,删除节点以及修改节点的操作, 经过diff算法得出一些需要修改的最小单位,再更新视图,减少了dom操作,提高了性能。

Vue获取DOM的几种方法

虽然Vue实现了MVVM模型,将数据和表现进行了分离,我们只需要更新数据就能使DOM同步更新,但是某些情况下,还是需要获取DOM元素进行操作(比如引入的某个库要求传入一个根dom元素作为根节点,或者写一些自定义指令),本文主要介绍几种在Vue中获取DOM元素的方法。

使用DOM API直接找元素

<script>
	...
	mounted () {
		let elm = this.$el.querySelector('#id')
	}
</script>

这种方法足够简单直观,Vue组件在patch阶段结束时会把this.$el赋值为挂载的根dom元素,我们可以直接使用$elquerySelector, querySelectorAll等方法获取匹配的元素。

refs

<template>
	<div ref="bar">{{ foo }}</div>
	<MyAvatar ref="avatar" />
	...
</template>
<script>
	...
	mounted () {
		let foo = this.$refs['bar'] // 一个dom元素
		let avatar = this.$refs['avatar'] // 一个组件实例对象
	}
</script>

使用组件实例的$refs即可拿到组件上ref属性对应的元素。
如果ref属性加在一个组件上,那么拿到的是这个组件的实例,否则拿到的就是dom元素了。

值得注意的是包含v-for循环模板指令的情况,其循环元素和子元素上ref属性对应的都是一个数组(就算动态生成ref,也是数组):

<template>
	<div v-for="item in qlist" :key="item.id" ref="qitem">
		<h3>{{ item.title  }}</h3>
		<p ref="pinitem">{{ item.desc }}</p>
		<p :ref="'contact'+item.id">{{ item.contact }}</p>
	</div>
	...
</template>
<script>
	...
	data () {
		return {
			qlist: [
				{ id: 10032, title: 'abc', desc: 'aadfdcc', contact: 123 },
				{ id: 11031, title: 'def', desc: '--*--', contact: 856 },
				{ id: 20332, title: 'ghi', desc: '?/>,<{]', contact: 900 }
			]
		}
	},
	mounted () {
		let foo = this.$refs['qitem'] // 一个包含dom元素的数组
		let ps = this.$refs['pinitem'] // p元素是v-for的子元素,同样是一个数组
		let contact1 = this.$refs['contact' + this.qlist[0].id] // 还是个数组
	}
</script>

关于这个的原因,可以从Vue关于ref处理的部分代码得到:

function reGISterRef (vnode, isRemoval) {
  var key = vnode.data.ref;
  if (!isDef(key)) { return }

  var vm = vnode.context;
  // vnode如果有componentInstance表明是一个组件vnode,它的componentInstance属性是其真实的根元素vm
  // vnode如果没有componentInstance则不是组件vnode,是实际元素vnode,直接取其根元素
  var ref = vnode.componentInstance || vnode.elm;
  var refs = vm.$refs;
  if (isRemoval) {
    ...
  } else {
  	// refInFor是模板编译阶段生成的,它是一个布尔值,为true表明此vnode在v-for中
    if (vnode.data.refInFor) {
      if (!Array.isArray(refs[key])) {
        refs[key] = [ref]; // 就算元素唯一,也会被处理成数组
      } else if (refs[key].indexOf(ref) < 0) {
        // $flow-disable-line
        refs[key].push(ref);
      }
    } else {
      refs[key] = ref;
    }
  }
}

使用自定义指令

Vue提供了自定义指令,官方文档给出了如下的使用方法,其中el就是dom元素的引用

Vue.directive('focus', {
  // 当被绑定的元素插入到 DOM 中时……
  inserted: function (el) {
    // 聚焦元素
    el.focus()
  }
})

// 在模板中
<template>
	<input v-model="name" v-focus />
</template>

关于自定义指令,在一些组件库和事件上报等场景下非常有用。

【相关推荐:vuejs视频教程、WEB前端开发

以上就是vue dom是什么意思啊的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: vue dom是什么意思啊

本文链接: https://www.lsjlt.com/news/206022.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue dom是什么意思啊
    本教程操作环境:windows7系统、vue3版,DELL G3电脑。什么是domdom是一种文档对象模型,同时也是用于html编程的接口,通过dom来操作页面中的元素。当html页面被实现加载的时候,浏览器会创建一个dom,给文档提供了一...
    99+
    2023-05-14
    Vue dom 虚拟DOM
  • html dom指的是什么意思
    小编给大家分享一下html dom指的是什么意思,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! html dom是专门适用于“HTML/XHTML”的文档对象模...
    99+
    2022-10-19
  • html5中的dom是什么意思
    这篇文章将为大家详细讲解有关html5中的dom是什么意思,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 html5中的dom是“Docume...
    99+
    2022-10-19
  • php是什么意思啊
    php是指一种通用开源脚本语言,中文名为超文本预处理器,它吸收了C语言、Java和Perl的特点,几乎支持所有流行的数据库以及操作系统,具有成本低、速度快、可移植性好、内置丰富的函数库等优点,它主要适用于Web开发领域,也可以用于开发API...
    99+
    2022-10-22
  • javascript是什么意思啊
    JavaScript 是一种广泛用于网页开发的脚本语言。它可以用来为网页添加各种动态功能和交互效果,比如表单验证、图像轮播、菜单切换...
    99+
    2023-09-05
    javascript
  • sql是什么意思啊
    sql是一种用于操作关系数据库的编程语言,它允许用户通过使用特定的命令来查询、插入、更新和删除数据库中的数据。它是用于访问和操作关系数据库的标准语言,它由一组SQL命令组成,这些命令可以用于执行各种数据库操作。它不仅用于数据的查询和操作,还...
    99+
    2023-12-20
    SQL
  • web开发中DOM是什么意思
    这篇文章主要为大家展示了“web开发中DOM是什么意思”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“web开发中DOM是什么意思”这篇文章吧。 DOM的含义:...
    99+
    2022-10-19
  • 请问unicode是什么意思啊
    Unicode是一种用于表示和处理文本字符的国际标准编码系统。它为每个字符分配了唯一的数字标识,这些数字标识可以用于存储、传输和显示...
    99+
    2023-08-18
    unicode
  • javascript指的是什么意思啊
    这篇文章主要为大家展示了“javascript指的是什么意思啊”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“javascript指的是什么意思啊”这篇文章吧。 ...
    99+
    2022-10-19
  • git什么意思啊
    Git是一个免费、开源的分布式版本控制系统,主要用于管理代码仓库的历史版本。它是由Linux之父Linus Torvalds在2005年为了管理Linux内核代码而开发的。Git的主要特点是分布式管理,每个开发者都可以下载完整的代码仓库并进...
    99+
    2023-10-22
  • vue的$refs是什么意思
    本教程操作环境:windows7系统、vue3版,DELL G3电脑。Vue中的$refs$refs是一个对象,持有注册过ref attribute的所有DOM元素和组件实例。描述ref被用来给元素或子组件注册引用信息,引用信息将会注册在父...
    99+
    2023-05-14
    $refs Vue
  • vue的跨域是什么意思
    本教程操作环境:windows7系统、vue3版,DELL G3电脑。一、跨域是什么跨域是指浏览器不能执行其他网站的脚本。它是浏览器同源策略造成的,是浏览器对JS实施的安全限制。跨域本质是浏览器基于同源策略的一种安全手段同源策略(Sameo...
    99+
    2023-05-14
    Vue
  • Vue初始化是什么意思
    Vue 是一款非常流行的 JavaScript 框架,广泛用于构建现代化的 Web 应用程序。在开始学习 Vue 之前,你需要先了解 Vue 的初始化过程,以便正确地使用 Vue 并创建可重复的代码。初始化 Vue 是指在页面中创建一个 V...
    99+
    2023-05-14
  • vue中v-bind是什么意思
    vue中v-bind是一个vue指令,用于绑定html属性,比如你的class属性,style属性,value属性,href属性等等,只要是属性,就可以用v-bind指令进行绑定。示例:传给v-bind:class一个对象,以动态地切换cl...
    99+
    2022-10-09
  • vue中的vuex是什么意思
    这篇文章将为大家详细讲解有关vue中的vuex是什么意思,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。概念    Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的...
    99+
    2023-06-22
  • 云服务器ip是什么意思啊
    云服务器(Cloud Storage,又名云计算服务)的IP地址通常是由云计算服务提供商(比如Amazon、Google、微软等)来分配的。当你使用云服务器的时候,你的IP地址就由服务提供商给你分配了。 你的IP地址通常被用于网站的域名解...
    99+
    2023-10-26
    服务器 ip
  • 云服务器bcc是什么意思啊
    云服务器BCC是指使用云计算服务的服务器集群,可以通过互联网连接到远程服务器,进行高并发的负载均衡和动态扩展。BCC通过在多个公有云提供商之间互相提供负载均衡和自动扩展功能来提高系统的可靠性和性能。 使用云服务器BCC,用户可以通过简单的...
    99+
    2023-10-26
    服务器 bcc
  • aws云服务器是什么意思啊
    Sws云服务器是亚马逊公司的云服务器产品,它是一种基于 AWS 平台的计算服务,可以提供高可用、高性能、高可扩展性的存储、计算和IoT等服务。 以下是Sws云服务器的一些常见用法和配置选项: 数据库和存储选项:Sws 云服务器提供了一组...
    99+
    2023-10-26
    服务器 aws
  • gpu云服务器是什么意思啊
    GPU云服务器是指将一台物理服务器集成到一个云平台上,以便用户能够在自己的数据中心中使用它们的GPU资源。用户无需自己购买计算机和存储硬件,只需要使用GPU加速卡(GPU Cloud)即可将他们的计算能力扩展到整个云平台上。GPU云服务器通...
    99+
    2023-10-26
    服务器 gpu
  • 系统boot指的是什么意思啊
    这篇文章主要介绍系统boot指的是什么意思啊,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!系统boot是系统引导的意思,系统引导通常是由一个被称为启动引导程序的特殊代码完成的,它位于系统ROM中,用来完成定位内核代码...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作