vue(3)—— vue的全局组件、局部组件
组件
vue有局部组件和全局组件,这个组件后期用的会比较多,也是非常重要的
局部组件
template与components属性结合使用挂载
其中 Vmain、Vheader、Vleft、Vcontent都是局部组件,Vheader、Vleft、Vcontent是一起挂载在Vmain组件上的,这里的Vmain可以看成一个入口组件,再将入口组件挂载在Vue实例对象上,就可以渲染成一个页面了
当然这里我没有给css属性,看着不好看,感兴趣的自己去添加就行了,并且这里使用组件渲染页面时,因为使用的是template属性,所以el挂载点失效
利用内置组件<component :is="componentId"></component> 挂载使用
当然你说我就要挂载在app下呢?所以这里又有另一种写法,使用<component>标签,里面用v-bind绑定一个is属性,is属性值对应组件的名字,用引号包住:
这样的写法,就可以直接哪里需要组件,直接给一个<component>标签就行了,而Vue实例化对象里不用挂载,也不用使用template属性渲染了
这种写法按照官方文档,它是一个内置的组件(也就是自带的,不需要我自己定义直接使用的):
组件还可以复用:
一个组件内的data必须是一个函数:
你如果在组件内想使用data那就用函数就完了,可以用单体模式定义data的函数,如:
注意:
1.组件的使用步骤:
- 创建一个组件
- 挂载组件
- 使用组件
2.组件使用时,就是组件的名字作为标签,并且是单标签,且必须要有闭合符号【/】
3.组件可以复用
4.组件内的data必须是一个函数
5.组件是一个单向数据流
6.定义组件名避免和html元素重合,导致一些不必要的事情发生
组件的组成结构是这样的:
像如上的结构,在Vmain组件里又挂载了三个子组件,这些组件其实也完全可以直接挂载在Vue实例对象里啊,可以是可以的,我举个生活的例子来说明,比如你是老板,你有个通知要通知给你的每个员工,你是要自己去挨个通知呢?还是找个负责人,让他带你挨个通知呢?能理解了吧?
理解之后,看官方给的组件结构:
也就是是说,数据传输是单向的,一级一级的传递,为什么这么说呢?看完下面的传递参数你就懂了
父级组件传递参数给子级组件
父向子传参,需要使用props属性:
步骤:
1.定义好需要传递的参数
2.在template模板里用v-bind绑定好属性
3.在Vue实例绑定的入口组件里添加 props属性,里面写入Vue实例传递过来的的参数的键(注意是键不是值)
4.在利用props属性接收到的组件里绑定属性,键为自定义键,值为props父级组件传递过来的的键
5.在子级里同样的利用props接收参数
6.是否需要再往子级组件传递参数,如果要,再用v-bind绑定属性,属性的键自定义,值为父级传递过来的键,如果不再传递,直接用jinja2语法渲染到标签元素里
同样的,如果要使用component内置组件来渲染,直接挂载到元素里,其他没做任何改动:
子级向父级传递参数
在以后的开发中,可能会遇到,子级会向父级反馈数据的情况,所以,子级向父级传递参数这个功能还是挺有用的。
但是本质上并不是直接传输,而是通过v-on监听事件传输的,结合Vue实例里的$emit实现的。这个$emit是Vue实例里自带的,$emit()方法来触发自定义的事件, 第一个参数是自定义的事件名字 第二个参数就是传递的值,其中this指的vue实例化对象的子类
如上,父级的Vmain组件确实拿到了,并在控制台输出了
注意:
1.子级组件根据子级的逻辑向父级传递的参数,使用的是this.$emit方法,有关$emit的方法,传送门
通俗的说,你可以理解为this.$emit就是一个数据通道,可以连接子级组件和父级组件
2.父级组件中v-on绑定的方法名必须和$emit()第一个参数的事件名一致,即可以理解为自定的监听事件,之后则可以通过这个事件接收到子级传来的参数了
全局组件
全局组件,顾名思义了,不多解释了
全局组件定义好后不需要挂载(或者叫注册),直接可以使用,使用的全局组件名作为标签,且是双标签
那前面的局部组件用了另一种渲染方式,使用了<component>标签,你可能会想,这里全局也用<component>标签会怎么样呢?不行的,会报错,提示未定义
所以你需要在data里先定义一下就行:
定义全局组件的其他三个方法
利用script标签(比较少见)
利用Vue.extend和Vue.component
利用template标签
这个以后在组件化开发中用的很多
动态组件:
动态组件是利用component结合全局组件做出来的,官方解释:
如下,点头部,页面就显示成头部内容,点底部,就显示成了底部内容
这里的a标签我绑定了一个v-on,阻止了冒泡事件啊,就是前面的知识点了,详细的不多说
全局组件也可以被局部组件使用,并且复用:
插槽<slot>
但是,如果复用全局组件就有一个问题,因为在实际开发中,有公用的元素就可以使用公用的,比如继承一个公用的css属性什么的,但是每个内容部分都有不同的数据,或者说需要在公用的基础上做些自己适当的调整吗,像这种需求是很多的。比如如下,我想显示不同的内容这样就无法显示内容:
所以这里需要用到内置组件<slot>,如下,其他没做任何更改,只是在创建全局组件部分插入了一个<slot></solt>组件即可显示我们想要显示的内容
然后,其他就没什么需要注意的了,因为全局组件的用法其实跟局部组件的用法是一样的
总结:
vue的组件,看着知识点多,有点绕,但还是基础,且是非常重要的基础,一定要注意以上提到的注意点
vue(3)—— vue的全局组件、局部组件的更多相关文章
- vue教程3-03 vue组件,定义全局、局部组件,配合模板,动态组件
vue教程3-03 vue组件,定义全局.局部组件,配合模板,动态组件 一.定义一个组件 定义一个组件: 1. 全局组件 var Aaa=Vue.extend({ template:'<h3&g ...
- vue自定义组件(vue.use(),install)+全局组件+局部组件
相信大家都用过element-ui.mintui.iview等诸如此类的组件库,具体用法请参考:https://www.cnblogs.com/wangtong111/p/11522520.html ...
- Vue(2)- v-model、局部组件和全局组件、父子组件传值、平行组件传值
一.表单输入绑定(v-model 指令) 可以用 v-model 指令在表单 <input>.<textarea> 及 <select> 元素上创建双向数据绑定. ...
- vue-learning:13 - js - vue作用域概念:全局和局部
目录 全局作用域:Vue对象 全局api 局部作用域: 实例对象vm 实例api 组件component 组件配置选项 在引入Vue文件时,就相当于拥有了一个全局Vue对象. 在var vm = ne ...
- Vue 根组件,局部,全局组件 | 组件间通信,案例组件化
一 组件 <div id="app"> <h1>{{ msg }}</h1> </div> <script src=" ...
- Vue 组件&组件之间的通信 之全局组件与局部组件
在上篇博客中介绍了组件,在注册组件的简写中就用到了全局组件 //注册组件的简写方式 Vue.component('my-componenta',{ template:'<h2>hello ...
- Vue基础学习 --- 全局组件与局部组件
组件分为 全局组件 局部组件 全局组件 // 语法---Vue.component('组件名', {组件参数}) Vue.component('com1', { template: '<butt ...
- vue组件化初体验 全局组件和局部组件
vue组件化初体验 全局组件和局部组件 vue组件化 全局组件 局部组件 关于vue入门案例请参阅 https://www.cnblogs.com/singledogpro/p/11938222.h ...
- Vue其他指令-组件-全局-局部-组件的交互父传子
v-once指令 once:一旦,当...时候 <!DOCTYPE html> <html lang="zh"> <head> <meta ...
- VUE的双向绑定及局部组件的使用
vue的双向绑定,使用v-model,v-model只能使用在input textare select中 <!DOCTYPE html> <html lang="z ...
随机推荐
- ABP项目依赖图,根据自已生在的Demo项目分析而得
根据自已生在的Demo项目分析而得 在线学习代码库:https://github.com/AtwindYu/ABPStudy
- Windows下docker的安装以及遇到的问题
最近因为业务的需要,需要在本地搭建服务环境测试,不想去安装各种软件,于是就想到了用docker来满足我的需要.由于第一次在Windows下安装(以前一直是在linux下使用,但由于内存等硬件的限制 ...
- Fiddler-弱网测试设置
第一步:打开模拟弱网环境 第二步:打开配置文件 第三步:修改配置参数 m_SimulateModem,修改后最好 Ctrl+S 保存一下 第四步:修改好参数返回后需要再次打开弱网环境 以上弱网设置就 ...
- Kali Linux 渗透测试手册(1.1)安装虚拟机
翻译来自:掣雷小组 成员信息: thr0cyte, Gr33k, 花花, 小丑, R1ght0us, 7089bAt, 一.配置KALI Linux和渗透测试环境 在这一章,我们将覆盖以下内容: 在W ...
- leaflet 学习备忘
leaflet 开源js地图工具.非常好用. leaflet参考:http://leafletjs.com/ 特性: 完全开源,可以基于不同的第三方瓦片生成地图. 基于原始GPS,无需转换 可创建离线 ...
- 多线程工具类:CountDownLatch、CyclicBarrier、Semaphore、LockSupport
◆CountDownLatch◆ 假如有一个任务想要往下执行,但必须要等到其他的任务执行完毕后才可以.比如你想要买套房子,但是呢你现在手上没有钱.你得等这个月工资发了.然后年终奖发了.然后朋友借你得钱 ...
- 【Python实践-3】汉诺塔问题递归求解(打印移动步骤及计算移动步数)
# -*- coding: utf-8 -*- #汉诺塔移动问题 # 定义move(n,a,b,c)函数,接受参数n,表示3个柱子A.B.C中第1个柱子A的盘子数量 # 然后打印出把所有盘子从A借助B ...
- chrome谷歌浏览器开发者工具-网络带宽控制
有时候我们想在本地测试一下图片预加载loading的加载情况,如下图: 可无奈一般网络带宽都比较好,基本上看不到效果,图片一下子就加载出来了, 可能这个时候有些小伙伴想到的办法是用定时器延迟加载 其实 ...
- 【从零开始搭建自己的.NET Core Api框架】(七)授权认证进阶篇
系列目录 一. 创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...
- win10下 anaconda 环境下python2和python3版本转换
在cmd的环境下,输入以下命令安装Python2.7的环境 conda create -n python27 python=2.7 anaconda 上面的代码创建了一个名为python27的pyth ...