组件基础

目标:

  1. 掌握组件的构建方式
  2. 掌握如何复用组件、父子组件如何传值、如何向父组件发送消息
  3. 掌握如何通过插槽分发内容
  4. 了解解析dom模板时的注意事项
  5. 了解动态组件

组件

  1. 组件理解起来大概上就和php的include一样, 也就是把页面分成几个部分(或文件).
  2. 组件就是把页面分成几块,每一块就是一个组件,组件使用起来就是引入,声明,使用.
  3. 很通俗的说,组件的使用就是自定义html标签的使用.

组件的注册(定义)

1.全局组件

// (组件名, 配置)
Vue.component('cpn-name',{
data: function(){
return {
count: 0
}
}
template: '<button @click="count++">{{count}}</button>'
});

2.局部组件

...
components: {
cpnName: {
data: function(){
return {
count: 0
}
}
template: '<button @click="count++">{{count}}</button>'
}
};
...
  1. 单文件组件

组件注意点

  1. 组件名的大小写

    定义的时候可以使用 my-component 或者 MyCompnent 这样的形式

    使用的时候因为html是大小写不敏感的, 在DOM(非字符串模版)中使用时只有my-component的形式是有效的.

  2. 组件的data必须是一个函数

    这个函数返回一个对象.

    至于为什么要是function(){return{..}}的形式, 那是因为这样每个实例可以维护一份被返回对象的独立的拷贝, 不然复用的时候会相互影响.

  3. 组件的复用

    组件在复用的时候,因为data的定义是return的对象,所以每用一次组件,就会有一个它的新 实例 被创建, 同样data也会是新的.

  4. 单个根元素

    在构建组件的时候,组件只能有一个根元素,如果组件内包含多个元素,根元素只能有一个.

  5. 组件的使用

    <my-component></my-component>这样使用就可以了

    (在单文件组件(Vue文件)中文档推荐使用<my-component/>这种写法,但是在HTML中文档不推荐使用<my-component/>这种写法,因为HTML并不支持自闭合的自定义元素)

组件传递数据

父组件 => 子组件 (通过prop)

  1. prop是组件上自定义的特性,在 父组件 使用子组件的时候加上. 可以在 子组件 注册的时候通过props0拿到这些prop值.
  2. 例子
<blog-post title="Blogging with Vue"></blog-post>
Vue.component('blog-post', {
props: ['title'],
template: '<h3>{{ title }}</h3>'
})

编译后:

<h3>Blogging with Vue<h3>

子组件 => 父组件 (通过$emit()发送事件传递参数)

  1. 在模版中使用普通的js事件来触发$emit(),

    $emit('my-event')是一个用来主动触发事件的方法,

    而这个'my-event'就是可以在 父组件 使用子组件的时候加上的,

    利用触发这个'my-event'可以触发父组件中的methods

    中间只要传递参数就可以实现传值了

  2. 例子

Vue.component('blog-post', {
props: ['post'],
template: `
<div class="blog-post">
<h3>{{ post.title }}</h3>
<button v-on:click="$emit('enlarge-text')"> <!-- 1.触发enlarge-text -->
Enlarge text
</button>
<div v-html="post.content"></div>
</div>
`
})
<blog-post
v-on:enlarge-text="postFontSize += 0.1" <!-- 2.被触发enlarge-text然后执行对应操作 -->
></blog-post>

组件插槽(slot)分发内容

  1. 一般来说,两个开闭标签之间是有内容的,那么如果在组件(自定义标签)开闭标签之间写入的内容的话会怎么样, slot就是用在接收的了, 只要在组件模版里面写上就可以接收了.

  2. 例子:

Vue.component('alert-box', {
template: `
<div class="demo-alert-box">
<strong>Error!</strong>
<slot></slot>
</div>
`
})
<alert-box>这是错误</alert-box>

编译后:

    <div class="demo-alert-box">
<strong>Error!</strong>
这是错误
</div>

动态组件

  1. 概括: 使用一个is特性(属性),来指定组件
  2. 也就是我们可以动态的去改变is的值, 然后实现动态的显示不同的组件
  3. 例子:
<!-- 组件会在 `currentTabComponent` 改变时改变 -->
<component v-bind:is="currentTabComponent"></component>

解析DOM模版时的注意事项

  1. 在HTML标准中,有些元素是固定的嵌套的, 例如ul>li, ol>li,table, select, 假如要在这些标签内使用组件,就需要使用is来指定组件,不然就会报错.

  2. 例子:

<!-- 报错 -->
<table>
<blog-post-row></blog-post-row>
</table>
<!-- 正确 -->
<table>
<tr is="blog-post-row"></tr>
</table>

Vue学习计划基础笔记(六) - 组件基础的更多相关文章

  1. Vue学习计划基础笔记(五) - 表单输入绑定、组件基础

    表单输入绑定.组件基础 目标: 熟练掌握vue中表单的处理方式 对之前学习的内容简单回顾一下,并写一个实例,学以致用(最好脱离文档) vue中表单的处理方式 vue中表单的处理使用了v-model指令 ...

  2. vue学习指南:第六篇(详细) - Vue的组件 component

    1. 什么是组件?有两种解释 1. 第一种解释: 什么是组件? 1. 组件是 vue 中的一个可复用的实例,所以new Vue() 是vue中最大的那个组件(根组件),有名字,使用的时候以单标签或双标 ...

  3. Python基础(六) 基础文件操作

    今天学习python下对文件的基础操作,主要从open函数.File对象的属性.文件定位.简单操作.举例说明几个步骤开始学习,下面开始进入今天的主题: 一.open函数介绍 open函数主要是打开一个 ...

  4. Vue学习之全局和私有组件小结(七)

    一.组件: 组件的出现,就是为了拆分Vue实例的代码量的,能够让我们以不同的组件,来划分不同的功能模块,将来我们需要什么样的功能,就可以去调用相应的组件即可. 二.组件和模块: 1.模块化:是从代码逻 ...

  5. vue学习-day03(动画,组件)

    目录: 1.品牌列表-从数据库获取列表    2.品牌列表-完成添加功能    3.品牌列表-完成删除功能    4.品牌列表-全局配置数据接口的根域名    5.品牌列表-全局配置emulateJS ...

  6. Vue学习(2)---v-指令和组件

    Vue中的指令 Vue中以带有前缀V-的属性被称为指令(带有v表示他们是Vue提供的特殊attribute) 一个v-bind的例子 <div id="app" v-bind ...

  7. Vue学习计划基础笔记(一) - vue实例

    最近又重新看vue的文档了,计划是别人写的,之前看过一次,没有考虑太多,只考虑看懂能用就好.看完之后写过写demo,现在是零实际项目经验的,所以这一次打算细看,算是官方文档的二次产物吧,但是不是全部直 ...

  8. Vue学习计划基础笔记(四) - 事件处理

    事件处理 目标: 熟练掌握事件监听的方式,熟悉事件处理方式以及各类事件修饰符 理解在html中监听事件的意义 监听事件(v-on) 类似普通的on,例如v-on:click或@click就相当于普通的 ...

  9. Vue学习计划基础笔记(二) - 模板语法,计算属性,侦听器

    模板语法.计算属性和侦听器 目标: 1.熟练使用vue的模板语法 2.理解计算属性与侦听器的用法以及应用场景 1. 模板语法 <div id="app"> <!- ...

随机推荐

  1. 新闻cms管理系统(一) ---- thinkphp框架准备

    1.thinkphp介绍 一个快速.简单的基于MVC和面向对象的轻量级PHP开发框架 MVC:M数据层. V视图层 . C控制层 优点: (1)入手非常快 (2)thinkpjp提供核心内库.文件.函 ...

  2. mixup: Beyond Empirical Risk Minimization

    这篇论文MIT和FAIR的工作,主要是提出了一种mixup的方式.(感觉是一种产生hard sample的方法,是一种新的.更有效的数据增强.) 1 Introduction 大网络需要大数据,目前C ...

  3. 1.高并发教程-基础篇-之nginx负载均衡的搭建

    温馨提示:请不要盲目的进行横向扩展,优先考虑对单台服务器的性能优化,只有单台服务器的性能达到最优化之后,集群才会被最大的发挥作用. 一.架构图: 服务器准备:3台,ubuntu16.04系统maste ...

  4. 离线服务器下docker的部署与应用

    一分钟内形成docker的模糊概念 网上很多文章避免将docker与虚拟机混为一谈,但对于初学者来说,完全可以将docker当做一种虚拟机技术,只需要牢牢记住一点最重要的区别:docker依赖于物理机 ...

  5. Maven 高级应用

    Maven 的高级应用主要体现在 ==依赖==,==聚合==,==继承== * 依赖 就是在当前项目的pom.xml 总引入依赖的坐标 最最经常用到的 <dependencies> < ...

  6. [JLOI2014]松鼠的新家(线段树,树链剖分)

    题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在”树“上. 松鼠想邀请小熊维尼前 ...

  7. code#5 P1 报告

    报告   时间限制: 1.0 秒 空间限制: 128 MB 相关文件: 题目目录 题目描述 企鹅高中有很多学生,自然管理起来也就非常麻烦.学校的教务处想要随时统计学校里面有多少个学生,但是他们只有很多 ...

  8. 在CentOS7上安装MySQL5.7-源码包方式

    缺点:后期升级不方便,生产中建议RPM包方式安装 CentOS7默认安装了和MySQL有兼容性的MariaDB数据库,在我们安装MySQL5.7之前为了避免发生冲突首先删除MariaDB. # rpm ...

  9. TensorFlow的前世和今生

    TensorFlow的前世和今生 TensorFlow是一个开放源码的软件库,用于跨一系列任务的数据流处理编程.TensorFlow是一个符号化的数学应用库,广泛用于机器学习,例如神经网络.在谷歌公司 ...

  10. Linux(CentOS7)设置自动备份数据库到阿里云OSS

    环境:阿里云服务器CentOS7.4 + MySQL5.6 基本思路: 1.编写shell脚本,备份数据库到指定目录下 2.编写Python脚本,把文件上传到OSS 3.把shell脚本和Python ...