浅入深出Vue:组件
组件在 vue
开发中是必不可少的一环,用好组件这把屠龙刀,就能解决不少问题。
组件是什么
官方的定义:
- 组件是可复用的 Vue 实例,并且可带有一个名字。
官方的定义已经非常简明了,组件就是一个实例。
如何使用组件
在具体编写组件实例代码前,我们先来如下几个约定:
所有组件基于单文件组件,即一个
.vue
文件就是一个组件data
必须为一个函数template
节点下只能有一个子节点
约束不多,但最后两个需要牢记在心。
基于单文件组件的前提下,一个组件的基本构造如下:
<template>
<div>
<!-- 页面内容 -->
</div>
</template>
<script>
export default {
// 组件的逻辑,数据部分
}
</script>
<style>
/** 样式定义 **/
</style>
一个单文件组件由三个部分组成:
页面内容,即视图部分,这部分是对数据的展示
逻辑,数据定义部分,这部分是定义、控制数据
样式部分,服务于视图
这三部分会在接下来的章节中一一实践,在本篇中并不会给出具体的实例代码。 本篇更侧重于讲清楚在写组件之前应该要注意的地方。
组件的命名
在这里向跑题的一点是:
- 不管是前端还是后端还是其他方向,命名一定要重视,并能给出准确的、无歧义的、简洁的命名
命名不仅仅是为了自己维护代码,更多的是为了团队、协作开发以及交流。良好的命名会让你的代码更具可读性,而良好的可读性会让你的代码更具可维护性。综上,希望童鞋们能认真命名,避免在项目中产出类似的命名:
var x = getSomething(y);
var somethingA = getSomethingB();
...
在这里,vue
官方是强烈建议遵循 W3C规范去为组件命名的:
- 字母全小写且分隔符使用连字符(短横线):
-
当然你也可以使用Pascal命名:
- 首字母大写,无分隔符
但是在使用组件时,都是使用的 W3C规范。假设现在你有一个名称为 HelloWorld
的组件,那么如何在其他组件中使用:
<hello-world></hello-world>
建议在命名时考虑以下因素:
词要达意,言简意赅,不要长篇大论
避免产生多义性
避免直接机翻中文,很多时候某些特有名词或者是业务中提炼出来的词并不适合直接机翻(机器翻译)。对同一机翻词汇,一百个人心中可能有一百种不同的解释
参考优秀开源项目的命名规范
参考语言/框架所推荐的规范
同一项目中,对于同一个业务知识、名词的翻译尽可能保持一致(同样也是为了避免多义性)
在同一个项目中,尽可能保持统一风格
组件的注册
在另一个组件中如果需要使用其它自定义组件,那首先是需要将组件注册。
而注册分为:
局部注册
全局注册
局部注册
局部注册的用法:
<template>
<div>
<!-- 第三步: 在页面中使用 -->
<hello-world></hello-world>
</div>
</template>
<script>
// 第一步:引入组件
import HelloWorld from 'your/component/path'
export default {
// 第二步:在当前组件注册此组件,注册之后才可以在页面中使用
components: [
HelloWorld
]
}
</script>
上图我们可以看到,在单文件组件中局部注册的使用步骤:
- 将组件引入
- 在当前组件中注册,这一步也就体现了局部二字,因为注册后的作用域仅在当前组件内。
- 在视图中使用
全局注册
如果这个 HelloWorld
组件是经常要用的一个 UI组件怎么办,如果使用局部注册那意味着每个组件中都将存在第一步和第二步的重复代码。
看见重复代码,我们应该形成一种想要干掉它的本能。因为重复代码属于项目中的坏味道,会让项目的整体质量下降,并且直接影响项目的可维护性和可扩展性。
想想,当这个项目非常庞大,庞大到这个基础组件已经被成百上千个组件引用了,哪天你要改这个组件的文件名或者移动路径时,将是一场灾难。
因此,在 vue
中提供了全局注册的办法。只需注册一次,剩余组件中第一步和第二步的代码就可以直接删掉,因为全局注册之后可以直接在视图中使用。
// main.js 入口文件,在创建根实例之前将其注册
import HelloWorld from 'your/component/path'
Vue.component('HelloWorld', HelloWorld)
new Vue({
...
})
但是这种手动全局注册单个组件也存在一个问题:
- 不够自动化,当组件数量繁多时,手动注册组件就又成了一个负担
这里童鞋们可以思考思考如何在 vue
中实现自动全局注册组件。
写在后面
组件系统所包含的内容是相当丰富的,三言两语很难说完整,因此这里只提组件最基础的使用和注册以及在实践中会遇到的问题。
下一篇将会详细的说明子组件及在其上进行数据传递的相关知识,同样,也是以理论为主。也是作为基础篇的最后一篇~
浅入深出Vue:组件的更多相关文章
- 浅入深出Vue:前言
浅入深出Vue系列文章 之前大部分是在做后端,后来出于某些原因开始接触Vue.深感前端变化之大,各种工具.框架令人眼花缭乱.不过正是这些变化,让前端开发更灵活. 博主在刚开始时,参考官网的各个步骤以及 ...
- 浅入深出Vue:环境搭建
浅入深出Vue:环境搭建 工欲善其事必先利其器,该搭建我们的环境了. 安装NPM 所有工具的下载地址都可以在导航篇中找到,这里我们下载的是最新版本的NodeJS Windows安装程序 下载下来后,直 ...
- 浅入深出Vue:工具准备之PostMan安装配置及Mock服务配置
浅入深出Vue之工具准备(二):PostMan安装配置 由于家中有事,文章没顾得上.在此说声抱歉,这是工具准备的最后一章. 接下来就是开始环境搭建了~尽情期待 工欲善其事必先利其器,让我们先做好准备工 ...
- 浅入深出Vue:工具准备之WebStorm安装配置
浅入深出Vue之工具准备(一):WebStorm安装配置 工欲善其事必先利其器,让我们先做好准备工作吧 导航篇 WebStorm安装配置 所有工具的下载地址都可以在导航篇中找到,这里我们下载的是最新版 ...
- 浅入深出Vue系列
浅入深出Vue导航 导航帖,直接点击标题即可. 文中所有涉及到的资源链接均在最下方列举出来了. 前言 基础篇 浅入深出Vue:工具准备之WebStorm搭建及配置 浅入深出Vue之工具准备(二):Po ...
- 浅入深出Vue:第一个页面
今天正式开始入门篇,也就是实战了~ 首先我们是要做一个博客网站,UI 框架采用江湖传闻中的 ElementUI,今天我们就来利用它确定我们博客网站的基本布局吧. 准备工作 新建一个vue项目(可以参考 ...
- 浅入深出Vue:代码整洁之封装
深入浅出vue系列文章已经更新过半了,在入门篇中我们实践了一个小小的项目. <代码整洁之道>一书中提到过一句话: 神在细节中 这句话来自20世纪中期注明现代建筑大师 路德维希·密斯·范·德 ...
- 浅入深出Vue:文章列表
终于到我们小项目的最后一个功能了,那就是列表页展示! 新建组件 先来新建组件 List.vue: <template> <div></div> </templ ...
- 浅入深出Vue:登录
上一篇我们实现了注册功能,现在我们来实现一下登录功能. 准备工作 新建登录组件 添加登录组件的路由对象 新建登录组件 Login.vue: <template> <div> & ...
- 浅入深出Vue:注册
基本布局已经有了, 现在我们来开始做我们的注册页面~ 当然需要注册才能发表文章啊(糟老头子坏得很, 我可以只有我一个人能发啊). 这里我们设定只有注册才能发表文章,也就淡化了管理员这个概念.在开发中先 ...
随机推荐
- Matlab Tricks(二十四)—— 将一副图像逆时针旋转 180°
function I2 = rot180(I) I2 = I(end:-1:1, end:-1:1); % 上下颠倒,左右颠倒:
- 查看静态库.a文件包含的内容
查看静态库.a文件包含的内容用下面的命令解压: ar x libgdal.a 然后就可以查看文件了: ls adler32.o cpl_recode.o ...
- VC++中的C运行时库浅析(控制台程序默认使用单线程的静态链接库,而MFC中的CFile类已暗藏了多线程)
1.概论 运行时库是程序在运行时所需要的库文件,通常运行时库是以LIB或DLL形式提供的.C运行时库诞生于20世纪70年代,当时的程序世界还很单纯,应用程序都是单线程的,多任务或多线程机制在此时还属于 ...
- 更新EF(更新表 添加表…)
- 简单说说Delphi中线程的释放
线程的释放方式有两种:一种是线程在运行完成后自动释放,一种是手动释放. 无论是那种释放,都应该在线程停止后进行释放. 然而线程的停止也有两种情况:一种是不需要设置标志位,直接完成:一种是由于execu ...
- SDP开发平台试用版上线!提供源码!!!!
SDP开发平台提供试用版!! SDP软件快速开发平台是一套面向对象的应用软件快速开发平台. 1.SDP 设计端--页面设计 通过简单的拖拉控件,或者快速生成控件,可以在几分钟快速制作一个页面:如图 通 ...
- Win8 Metro(C#)数字图像处理--2.36角点检测算法
原文:Win8 Metro(C#)数字图像处理--2.36角点检测算法 [函数名称] Harris角点检测函数 HarrisDetect(WriteableBitmap src, int ...
- Android 命令设置获取、IP地址、网关、dns
设置ip root@android:/ # ifconfig eth0 192.168.0.173 netmask 255.255.255.0 ifconfig eth0 192.168.0.173 ...
- 零元学Expression Blend 4 Chapter 22 以实作案例学习Frame及HyperlinkButton
原文:零元学Expression Blend 4 Chapter 22 以实作案例学习Frame及HyperlinkButton 本章将教大家如何以实作善用Blend4的内建功能-「Frame」以及「 ...
- 迁移到MSYS2 与 Qt 工具链注意的几个事情(g++在链接时,符号依赖项查找遵循从左至右的顺序,但qmake会自动合并造成错误。使用脚本给Mingw32-make创造出一个局部的VC编译环境)
Microsoft Visual Studio 2015社区版提供了强大的开发体验,且 Qt 提供了预编译版本.然而,由于客户提出兼容Windows XP ~ Windows 8.1 这样宽泛的环境要 ...