从结构上看,组件之于实例,就好比轮子之于汽车。从属性和方法来看,组件有实例的大部分方法,如果Vue实例是孙悟空,组件就好比实例的一个毫毛,变化多端却为Vue实例所用。

目录:

组件的注册

is的作用

event,props,solts

动态组件

组件的注册(差不多抄官网)

有两种方式注册Vue组件:全局注册和局部注册,就好像欧元和英镑的区别,前者可以在各Vue实例中使用,后者只能在注册他的Vue实例或者父组件中使用。如果在组件中使用组件,就形成了组件的嵌套,如果组件里嵌套的组件是自己,就形成组件的递归。

总之:组件由两部分构成,

一部分是需要自定义的tag-name,以下面为例,tagname是,

另一部分是options对象,里面包含了该组件的模板,方法,props,data等细节

全局注册:

Vue.component('my-component', {

// 选项

})

局部注册:

var options={template:....}//组件的选项对象

new Vue({

el:'#man',

components:{

'my-component',options

}

});

is的作用

将组件挂载到已存在元素上时,遇到某些元素,会发生尴尬的事情:如

上面这样浏览器不给面子,需要变成这样:

当使用单文件组件时,就当上面是废话,也就是说

  • 中可以有组件了。(见这里)动态组件也有一个is属性,用来切换不同的组件,我们下面再说

props,events,slots

下面说说我觉得组件中的三个重点:prop,events和slots。当我看到组件这部分时,之前没有接触过mvvm类型的框架,所以到这里感觉是极限了,这时,找到熟悉的事物作类比是一个好办法。如果把组件比成一间房子,上面的三只就是房子用来和外界通信的门窗。

在开始之前:应该记住一张图和一句话:

这张图对应的意思是:父组件通过 props 向下传递数据给子组件,子组件通过 events 给父组件发送消息。

1.自定义事件

想象一个场景。2048游戏里面,两个子组件中的数据合并了,产生一个addscore事件,需要通知父组件容器,这时,就可以用自定义事件了:

//父组件中

function addscore(){this.score++;

}//子组件中

this.$emit('addscore');

注意 ,在子组件中,子组件只负责触发这个自定义事件,通过$emit方法来触发,而在父组件中则定义事件触发之后的回调函数。好吧,其实vue官方教程的两个button触发add事件看起来是个更好的例子。。。。

2.props

再想象一个场景,2048中,父组件中的data中有一个定义了所有card的值的数组,现在要把这些值传到每一个card中,这时就用到props:

//爹组件

//在模板中,为子组件写一个自定义属性card,用来把cardNum传给子组件

data:{card_num:8}//****子组件中******

{{card}}

在组件的props字段中加入子组件的自定义属性

{

data:....

computed:....

props:{card:null}

}

其实理解起来很简单,vue的子组件对父组件来说被包装成为一个类似于的标签,正如你在父组件中看到的那样。但是vue为我们留了一个props属性,就像上帝给人类五官用来感受世界一样,组件用props和自定义事件用来和父组件传递消息。

这也是一种封装,对父组件隐藏了内部的实现,只留下了props作为接口。接口在现实世界也很常见,比如显示器对主机的接口,你不必管显示器的内部实现,只要知道接上主机就能显示信息了就行。

3.slots

如果你了解过es6的模板字符串,那么理解起这个来将毫不费劲。我当时可是被这个slots搞得稀里糊涂的。。。当然当时不知道模板引擎,也不知道模板字符串。slots就是在组件中插入内容的机制。

等原生的标签里插入内容很简单,就直接写就行了(说了一句废话),而在组件中写入内容就有讲究了,比如我还是个宝宝,由于组件的模板一般是一堆原生标签一起构成的,那么上面这么写,究竟应该把内容插到那个元素中就成了问题。于是就有了元素。

solt元素就是用来接受父组件放到子组件的内容的。不知为什么,到了这里我会想起学习机上插游戏卡的例子。。。举个例子:

//学习机组件

小霸王学习机

内置魂斗罗

//小朋友父组件

我要玩游戏

插入双截龙游戏卡

//插入的内容

最后得到的就是小学生愉快的玩双截龙了

我要玩游戏

-------------------------------组件区域——————————————

小霸王学习机

————————slot区域——————————————

插入双截龙游戏卡

//插入的内容

当父组件不往子组件标签中添加任何字符时,子组件会显示默认内容,如果有的话,也就是说魂斗罗。。

具名slot是说组件中有大于一个地方需要插值时,需要给slot取个名字。就像电脑的接口,有usb的,也有接投影的HDMI接口,为的是将多条内容放到正确的地方。

我们知道,在组件内部,this指向组件自己,那么组件的slot内容可以通过this.$slots获得被插入的vnode节点。

动态组件

动态组件就是为了适应页面的局部刷新而生的,举个我用过的例子:todolist在线小demo

当我点击写日记button时,页面会变成一个markdown编辑器界面。这就是动态组件。实现的代码如下

methods: {

toggleview:function() {this.currentview = (this.currentview == 'todolist') ? 'write' : 'todolist';

}

},

当我点击上面的button时,触发toggleview方法,导致is绑定的组件名发生变化,如果当前是write组件,那么变成todolist组件。

那么标签又有什么用呢?标签字面意思是活着。。就是当todolist组件由显示变成隐藏时,组件的数据状态会被保存下来而不是被完全destory,当组件由隐藏再次变为显示时,当前的状态得以保留。比方你在write组件中写一段md文档,然后切换回todolist组件,如果没有keep-alive组件,再切换回write组件时,之前编辑的东西就会丢失。

component多个 vue_Vue.js之组件(component)相关推荐

  1. component多个 vue_VUE多个组件示例

    VUE多个组件示例 示例一 多个组件示例 Vue.component('app-header', { template: ` 头部组件 `, }) Vue.component('app-main', ...

  2. 三十七、深入Vue.js组件Component(下篇)

    @Author:Runsen @Date:2020/7/4 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

  3. vue 组件 全局组件和局部组件component

    1.全局组件 <!DOCTYPE html> <html><head><meta charset="UTF-8"><title ...

  4. 微信小程序自定义标签组件component封装、组件生命周期,组件通信

    微信小程序自定义标签组件component封装.组件生命周期,组件通信 本文来说下小程序的自定义标签组件封装. 相比于vue,react的非路由组件,微信小程序的component组件要麻烦些,而且生 ...

  5. vue组件component详解

    vue组件component详解 组件介绍 组件: ​ 组件是拥有一定功能多个html标签的集合体,是对html标签的封装. 好处: ​ 模板中为了实现一个(例如分页)效果,需要绘制20个html标签 ...

  6. 深刻了解 组件Component基本使用

    组件: 组件(Component)是 Vue.js 最强大的功能之一. 组件可以扩展 HTML 元素,封装可重用的代码. 组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面 ...

  7. 小程序自定义组件Component(父子组件相互传值)

    组件是写项目时常用的,那么如何自定义一个组件呢,下面我就大概描述一下: 大概效果如图,假设我要自定义一个弹窗组件 如上图,我想自定义一个弹窗组件,方便复用节省代码,那么让我们首先了解一下compone ...

  8. Vue--动态组件(component标签)的用法

    原文网址:Vue--动态组件(component标签)的用法_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Vue的动态组件的用法. 在Vue中,可以通过component标签的is属性动态指 ...

  9. 小程序 自定义组件Component

    1.创建组件(1)一个自定义组件由json.wxml.wxss.js这4个文件组成(2)在对应json文件中声明为自定义组件{"component": true}2.组件配置Com ...

最新文章

  1. 信息系统项目管理师论文:论项目的风险管理
  2. android如何使用ios14组件,ios14小组件怎么添加 苹果ios14小组件添加使用教程
  3. 蓝桥杯-递归求二项式系数值(java)
  4. VS Code 自动修改和保存 代码风格 == eslint+prettier
  5. CF1253E Antenna Coverage
  6. mysql 以 db 结尾_MySQL的高级部分
  7. linux Enterprise5 添加删除程序无法正常使用 解决
  8. linux中nmcli命令使用及网络配置
  9. Python进阶(一)Python中的内置函数、内置方法、私有属性和方法详解
  10. 粒子的自旋数,是否就是弦在膜上的关系
  11. Hibernate N+1 问题
  12. C语言 扫雷游戏(代码+注释)
  13. PHP使用阿里云(语音合成)实现文字转语音“TTS“
  14. K8S集群扩容多master大概思路步骤
  15. 图灵奖得主Bengio:深度学习不会被取代,我想让AI会推理、计划和想象
  16. ping ,time,TTL详解
  17. 数据存储计量单位换算
  18. webRtc+websocket多人视频通话
  19. java做度量衡换算器_单位换算计算器(度数换算计算器)
  20. 【T-SQL】一、数据库的创建与管理

热门文章

  1. 基于JAVA+SpringMVC+Mybatis+MYSQL的考勤管理系统
  2. Go学习笔记(只有链接)
  3. $Django 聚合函数、分组查询、F,Q查询、orm字段以及参数
  4. Java笔记(11):Eclipse使用
  5. Linux经常使用命令(十八) - find概述
  6. linux 从一台服务器向另台服务器复制文件
  7. (学习)linux驱动学习知识积累(一)
  8. jquery查找document节点
  9. Javascript对象属性方法集锦
  10. 使用FlexBox和Json实现类似ComboBox(类似Google的输入提示和自动)功能-基于JQuery-ASP.NET...