13-Vue特殊属性-ref

13-Vue特殊属性-ref,第1张

ref :被用来给元素或子组件注册引用信息,引用信息将会注册在父组件的 $refs 对象上。如果在普通的DOM元素上使用,那么指向的就是普通的DOM元素。

Vue特点: 数据驱动界面更新, 无需 *** 作DOM来更新界面

也就是说Vue不推荐我们直接 *** 作DOM, 但是在开发中有时候我们确实需要拿到DOM *** 作DOM

那么如果不推荐使用原生的语法获取DOM, 我们应该如何获取DOM

在Vue中如果想要拿到DOM元素我们可以通过ref来获取

例如: <p ref="myP">我是段落</p>

例如 this$refmyP

refs : 一个对象,持有注册过 ref 特性 的所有 DOM 元素和组件实例

注意: refs 只会在组件渲染完成之后生效,并且它们不是响应式的。这只意味着一个直接的子组件封装的“逃生舱”——你应该避免在模板或计算属性中访问 $refs 结语

在讲ref特点之前我们先来回顾, 原生语法获取元素的特点

例如: 通过原生的语法 documentquerySelector 获取到的都是被渲染之后DOM元素, 也就是原生的元素

在Vue中如果想获取原生的元素或者获取自定义的组件, 可以通过ref来获取

拿到了组件后, 还可以访问组件中的数据

请参照 css3 伪类选择器;

:first-child

选择某个元素的第一个子元素(IE6不支持)

:last-child

选择某个元素的最后一个子元素

:first-of-type

[CSS3]选择一个上级元素下的第一个同类子元素

:last-of-type

[CSS3]选择一个上级元素的最后一个同类子元素

:only-child

[CSS3]选择的元素是它的父元素的唯一一个了元素(IE6-8不支持)

:only-of-type

[CSS3]选择一个元素是它的上级元素的唯一一个相同类型的子元素(IE6-8不支持)

:nth-child()

[CSS3]选择某个元素的一个或多个特定的子元素(IE6-8不支持)

:nth-last-child()

[CSS3]选择某个元素的一个或多个特定的子元素,从这个元素的最后一个子元素开始算(IE6-8不支持)

:nth-of-type()

[CSS3]选择指定的元素(IE6-8不支持)

:nth-last-of-type()

[CSS3]选择指定的元素,从元素的最后一个开始计算(IE6-8不支持)

<form name="form1" action=">

一、问题引入

原项目把一块内容直接写在了模块中(浏览器显示的一整个页面),现在想把它提成一个单独组件,而且把其中使用 documentgetElementById('id') 改为 ref 获取元素的形式。

单独创建一个 vue 组件,通过绑定传值,触发页面变化从而触发 beforeUpdate 。

然后发现 beforeUpdate() 中根本获取不到此元素,用原生js获取也不行。

三、解决

1、 beforeUpdate() 生命周期函数中,在获取元素语句外套用 this$nextTick(function(){}) 。( mounted 无效,原因待查明)

官方解释:将回调延迟到下次 DOM 更新循环之后执行。在修改数据之后立即使用它,然后等待 DOM 更新。即DOM真正加载完成。

为了获取真实的dom节点,文本输入框必须有一个 ref 属性,然后 thisrefs[refName] 就会返回这个真实的 DOM 节点。

var MyComponent = ReactcreateClass({

handleClick: function() {

thisrefsmyTextInputfocus();

},

render: function() {

return (

<div>

<input type="text" ref="myTextInput" />

<input type="button" value="Focus the text input" onClick={thishandleClick} />

</div>

);

}

});

ReactDOMrender(

<MyComponent />,

documentgetElementById('example')

);

DOM全拼为DocumentObjectModel(文档对象模型)

是一种用于HTML和XML文档的编程接口,它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式。我们最为关心的是,DOM把网页和脚本以及其他的编程语言联系了起来。DOM实际上是以面向对象方式描述的文档模型。DOM定义了表示和修改文档所需的对象、这些对象的行为和属性以及这些对象之间的关系。

用来获取内容区的大小

PS:返回了元素大小,但没有单位,默认单位是px,如果你强行设置了单位,比如100em

之类,它还是会返回px 的大小。(CSS 获取的话,是照着你设置的样式获取)。

1增加边框,无变化,为200;

2增加外边距,无变化,为200;

3增加滚动条,最终值等于原本大小减去滚动条的大小,为184;

4增加内边距,最终值等于原本大小加上内边距的大小,为220;

PS:返回了元素大小,默认单位是px。如果没有设置任何CSS 的宽和高度,他会得到

计算后的宽度和高度。

1增加边框,最终值会等于原本大小加上边框大小,为220;

2增加内边距,最终值会等于原本大小加上内边距大小,为220;

3增加外边据,无变化;

4增加滚动条,无变化,不会减小;

PS:返回了元素大小,默认单位是px。如果没有设置任何CSS 的宽和高度,它会得到

计算后的宽度和高度。

1增加边框,不同浏览器有不同解释:

a) Firefox 和Opera 浏览器会增加边框的大小,220 x 220

b) IE、Chrome 和Safari 浏览器会忽略边框大小,200 x 200

c) IE 浏览器只显示它本来内容的高度,200 x 18

2增加内边距,最终值会等于原本大小加上内边距大小,220 x 220,IE 为220 x 38

3增加滚动条,最终值会等于原本大小减去滚动条大小,184 x 184,IE 为184 x 18

4增加外边据,无变化。

5增加内容溢出,Firefox、Chrome 和IE 获取实际内容高度,Opera 比前三个浏览

器获取的高度偏小,Safari 比前三个浏览器获取的高度偏大。

以上就是关于13-Vue特殊属性-ref全部的内容,包括:13-Vue特殊属性-ref、css中如何获取dom元素、javascript中dom 如何获取表单字段数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9609232.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存