使用组件的细节点

简介: 《Vue实战笔记》

解析 DOM 模板时的注意事项

<div id="root">
    <table>
        <tbody>
            <row></row>
            <row></row>
            <row></row>
        </tbody>
    </table>
</div>
<script type="text/javascript">
    Vue.component('row', {
        template: '<tr><td>this is a row</td></tr>'
    })
    var vm = new Vue({
        el: '#root'
    })
</script>

上面代码中,row 组件在渲染页面时,并不会把tr节点渲染到tbody里面,而是被提升到了和table同一个级别的地方。原因是在html编码规范中,tbody里面只能放tr,正确的做法是使用tr标签添加is属性等于组件名称row :

<tbody>
    <tr is="row"></tr>
    <tr is="row"></tr>
    <tr is="row"></tr>
</tbody>

同样,ul>liol>liselect > option 标签也要注意这样的问题。

需要注意的是如果我们从以下来源使用模板的话,这条限制是不存在的

子组件内的data要使用函数返回

Vue.component('row', {
    data() {
        return {
            content: 'this is content'
        }
    },
    template: '<tr><td>{{content}}</td></tr>'
})

之所以这样设计是因为子组件有可能会被调用多次,而每次调用时的data数据都应该是独立的。因此需要通过一个函数来实现,每个实例可以维护一份被返回对象的独立的拷贝。

这样才不会出现每个子组件数据相互影响的情况。

通过 ref 引用操作DOM

ref

虽然并不推荐我们在使用vue的时候操作DOM,但是某些情况下我们必须要操作DOM来实现一些功能,因此可以通过ref引用的形式来获取到DOM节点。

<!-- `vm.$refs.p` 指向DOM元素节点 -->
<p ref="p">hello</p>
<!-- `vm.$refs.child` 指向组件实例 -->
<child-component ref="child"></child-component>

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

组件实例对象 VueComponent

打开控制台,点击demo中的按钮可查看组件实例

See the Pen  VwLeMoM by xugaoyi (@xugaoyi)   on CodePen.

相关文章
|
图形学
Unity 不同Scene场景转换(简)
本文提供了Unity中实现场景转换的基本方法,包括编写传送脚本、创建传送门和玩家对象,并通过触发器实现玩家触碰传送门时切换到另一个场景的功能。
Unity 不同Scene场景转换(简)
|
开发工具 git
常用的git指令
常用的git指令
172 0
|
12月前
|
存储 安全 数据安全/隐私保护
电脑突然就剩c盘了怎么恢复?
在日常使用电脑的过程中,许多人可能遇到过一个令人头疼的问题:打开“此电脑”时,发现原本分区明确的硬盘突然只剩下C盘,D盘、E盘甚至整个数据盘都“消失”了。这种情况看似棘手,但实际上,大多数情况下数据并未真正丢失,而是由于系统问题或设置错误导致分区不可见。本文将为大家详细分析可能的原因,并提供解决方法,帮助您恢复消失的分区和数据。
|
算法 前端开发 Java
支撑每秒数百万订单无压力,SpringBoot + Disruptor 太猛了!
本文详细介绍如何通过 Spring Boot 集成 Disruptor 实现每秒处理数百万订单的高性能系统。Disruptor 是一种无锁并发框架,采用环形缓冲区和无锁算法,提供极低延迟和高吞吐量。文章涵盖 Maven 配置、事件工厂、处理器及生产者实现,并通过 REST API 和 Thymeleaf 展示订单创建流程。Disruptor 在高并发场景下表现出色,是解决高性能并发处理的理想方案。
|
JavaScript API 调度
requestAnimationFrame在性能优化中的应用有哪些?
【5月更文挑战第29天】requestAnimationFrame在性能优化中的应用有哪些?
290 1
|
存储 缓存 算法
【专栏】探讨分布式限流所面临的挑战以及目前业界常用的解决方案
【4月更文挑战第27天】在互联网时代,分布式限流是应对高并发、保护系统稳定的关键。它面临数据一致性、算法准确性和系统可扩展性的挑战。常见限流算法有令牌桶、漏桶和滑动窗口。解决方案包括使用分布式存储同步状态、结合多种算法及动态调整阈值。定期压力测试确保策略有效性。随着系统规模增长,限流技术将持续发展,理解并应用限流原理对保障服务质量至关重要。
340 3
|
编译器 数据处理 Python
Python的xlrd模块在Anaconda中的安装
本文介绍在Anaconda环境下,安装Python读取.xls格式表格文件的库xlrd的方法~
968 1
Python的xlrd模块在Anaconda中的安装
Yum工具详解(一)-----Yum配置本地源
Yum工具详解(一)-----Yum配置本地源
597 0
|
机器学习/深度学习 存储 编解码
DETR系列大盘点 | 端到端Transformer目标检测算法汇总!(上)
自从VIT横空出世以来,Transformer在CV界掀起了一场革新,各个上下游任务都得到了长足的进步,今天就带大家盘点一下基于Transformer的端到端目标检测算法!
DETR系列大盘点 | 端到端Transformer目标检测算法汇总!(上)
|
前端开发
CSS3的转换
通过 CSS3 转换,我们能够对元素进行移动、缩放、转动、拉长或拉伸。 您可以使用 2D 或 3D 转换来转换您的元素。
238 1