不挂载 组件渲染_12、全局组件和局部组件
本文重点:
如何注册全局组件;
如果注册局部组件;
在标签上挂载组件。
使用组件的原因:提高代码的复用性。
如果你不是很理解组件的话,那么你可以把组件理解为一块块的“积木”。
在你用积木搭一个机器人的时候,那一块块的积木,就是一个个的组件。
一、全局注册组件
<div class="app"><my-component></my-component> // app 中使用组件,组件的名字是 my-component
</div>Vue.component('my-component', { // 注意:全局组件应该在 Vue 实例之前就注册好template: '<h1>当一阵风吹来</h1>' // template: 模板,当使用这个组件时,就会渲染模板中的内容
})var app = new Vue({el: '.app',data: {}
})
先说为什么全局组件要在 Vue 实例之前就注册好?
在上面这个例子中,app 这个 Vue 实例中,使用了 my-component 全局组件。如果 my-component 是在 app 之后注册,那么当 app 挂载到页面时,my-component 还没有注册,那么自然 app 中就不能使用 my-component 这个组件了。
如果 my-component 在 app 之后注册,控制台中会报错:
像上面代码中将 my-component 在 app 之前注册,是正确的做法,页面会这样渲染:
上图中,因为组件的 template 中,就是 h1 标签,所以会渲染 h1 标签。
全局组件有什么好处呢?
那就是所有的 Vue 实例中,都可以使用这个组件。
<div class="app"> <my-component></my-component> // app 中使用了 my-component
</div><div class="bpp"><my-component></my-component> // bpp 中也使用了 my-component
</div>Vue.component('my-component', {template: '<h1>当一阵风吹来</h1>'
})var app = new Vue({el: '.app',data: {}
})var bpp = new Vue({el: '.bpp',data: {}
})
页面渲染:
app 和 bpp 中都有 h1 标签。
二、局部注册组件
所谓局部注册,就是说在某个 Vue 实例中注册,而不在全局注册。那么同理,局部注册的组件,只能在当前 Vue 实例中使用。
比如说,在 app 这个 Vue 实例中注册的组件,只能在 app 中使用,不能在 bpp 或者 cpp 中使用。
<div class="app"><my-component></my-component>
</div>var app = new Vue({el: '.app',data: {},components: { // 和全局注册不同,全局注册是 component,而这里是 components,因为可能有很多个组件'my-component': {template: '<h2>风筝有风,海豚有海</h2>'}}
})
渲染效果:
那我们来试试,如果在 bpp 中使用会怎样?
<div class="app"><my-component></my-component>
</div><div class="bpp"><my-component></my-component> // bpp 中使用了 my-component
</div>var app = new Vue({el: '.app',data: {},components: {'my-component': {template: '<h2>风筝有风,海豚有海</h2>'}}
})var bpp = new Vue({el: '.bpp',data: {}
})
如上代码中,my-component 是在 app 中注册的,本应在 app 中使用,可是 bpp 中也使用了 my-component 。那么现在会如何渲染呢:
可以看到,app 还是正常渲染。而 bpp 中,h2 标签没有被渲染,仍然显示 <my-component>,并且控制台也报错了。
三、挂载组件
有些标签,它里边只能写特定的标签,不可以或者不推荐写其他标签。
比如:table 中最好就写 tr、td;ul 和 ol 中只写 li 标签。
当然,如果你不遵守这些,浏览器仍然可能帮你正确显示出来,但这样可能会给浏览器增加不必要的负担。而且,不遵守规范这件事,总归是不好的。
可如果我们就是要在这些标签中使用组件呢,从上面的例子来看,在标签中写的组件,是长的这个鬼样子:
这tm是个标签吗?
这不是 HTML 中的标签,这是我们自定义的标签,Vue 允许我们这么做。
回到之前那个问题,比如我要在 table 中使用 my-component 咋办?
如果是像下面这样写:
<div class="app"><table><my-component></my-component> // table 中直接使用 my-component 标签</table></div>var app = new Vue({el: '.app',data: {},components: {'my-component': {template: '<h2>风筝有风,海豚有海</h2>'}}
})
渲染效果:
乍一看好像没毛病,可是仔细一看,h2 标签怎么跑到 table 标签外面去了??
因为我们之前说过了,table 标签里边,tm 不能写 <my-component>,只能写 tr、td、tbody 这种。
所以我们应该像下面这样:
<div class="app"><table><tr is="my-component"></tr> // table 中写的是 tr,用 is 属性把 my-component 挂载到 tr</table></div>var app = new Vue({el: '.app',data: {},components: {'my-component': {template: '<h2>风筝有风,海豚有海</h2>'}}
})
渲染效果:
现在,h2 标签是在 table 标签之中了。
如果你不理解上面 is 属性挂载的话,那么你就这么理解:
table 里边是 tr 没错,而 tr 其实 是(is) my-component 组件。
不挂载 组件渲染_12、全局组件和局部组件相关推荐
- 不挂载 组件渲染_让你的 React 组件性能跑得再快一点「实践」
作者:天泽 转发链接:https://www.zoo.team/article/react-render 性能和渲染(Render)正相关 React 基于虚拟 DOM 和高效 Diff 算法的完美配 ...
- vue 组件不受全局样式影响_Vue 组件之间样式冲突
Vue 组件之间样式冲突 vue 组件化,各组件内都可以在 style 部分写样式,这些样式却不是相互独立的,最终组合在一起,难免就会产生样式的污染. 首先来看一下两个 vue 组件代码: 1.Par ...
- vue 组件不受全局样式影响_组件库引入全局样式lib/style/index.css,会污染全局基础样式...
I have searched the issues of this repository and believe that this is not a duplicate. Version 1.3. ...
- Vue3(撩课学院)笔记02-创建组件,全局组件,局部组件,父子组件,组件标签化,组件的data数据共享,组件间通讯,props,父传子$ref,子传父$parent
1.创建一个组件 首先要创建一个根组件进行挂载 再创建一个子组件,完成子组件的逻辑 子组件主要使用template模板来完成布局和逻辑 把子组件通过根组件.component的方法挂载到根组件上 &l ...
- vue 组件 全局组件和局部组件component
1.全局组件 <!DOCTYPE html> <html><head><meta charset="UTF-8"><title ...
- vite+ts+vue3 知识点(全局组件,局部组件,递归组件)
全局组件 Global.vue 文件 <template><div>全局组件</div> </template><script setup lan ...
- -组件基础-局部组件 // 局部组件的简写
-组件基础-局部组件 <!DOCTYPE html> <html lang="en"><head><meta charset=" ...
- Vue组件之全局组件与局部组件
组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能.在有些情况下, ...
- 在Vue组件中获取全局的点击事件
使用场景: 在Vue组件中点击某元素之外的地方移除该元素 需求: 如上图所示,"用户列表"页面有三个Vue组件组成,分别是"菜单组件","导航组件&q ...
- 「后端小伙伴来学前端了」Vue中利用全局事件总线实现组件之间通信
月亮啊月亮 你能照见南边,也能照见北边 照见她,你跟她说一声,就说我想她了. 前言 前一篇文章写了 vue 中利用 Props 实现组件之间的通信,那种方式是最简单也是最基础的组件之间的通信方式.父组 ...
最新文章
- php-fpm 进程通讯,PHP-FPM进程模型解析
- 设计模式-创建型模式-建造者模式
- pcb外观维修_电路板常用维修技巧,送给从事维修工作的兄弟姐妹们
- python字符串内建函数详解
- 【Linux】一步一步学Linux——printf命令(204)
- 同步轨道进入过程_“收官之星”定点成功!北斗三号卫星全部进入长管模式
- 自己常用的LINUX命令(20100605更新)
- radl (三) (转)
- 《CCNA原创视频教程》【转贴】
- 阿里笔试2020/9/4
- jQuery的ajax教程
- 开发“小米商城官网首页”(静态页面)
- PHP内裤,用sqlmap来扒下她的内裤吧~
- 【论文翻译】Many-Class Few-Shot Learning on Multi-Granularity Class Hierarchy
- Anaconda创建虚拟环境时报错 InvalidArchiveError Error with archive D:\\(anaconda的路径)\\pkgs\\vs2015_runtime
- 多CPU 多核CPU | 多进程 多线程 | 并行 并发
- Android开发的经典入门教材和学习…
- 域名(DNS)原理及解析过程详解
- border-radius 构建规则讲解 及 50% 和 100% 的异同
- 微信小程序|基于小程序实现人脸数量检测
热门文章
- jdk8升级jdk11报 java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
- React五——React-router
- 微信小程序开发的完整人性化版攻略
- iOS-----用LLDB调试,让移动开发更简单(二)
- iOS / OXS LeanCloud云存储方案简单测试记录
- [MySQL] - MySQL的Grant命令
- 最小堆实现优先队列:Python实现
- 在SUSE 10下安装oracle 11g
- “做人难,人难做,难做人,做男人更难啊!
- 袋鼠天气 v1.1 发布:增加下拉刷新获取实时天气数据