浅入深出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:注册
基本布局已经有了, 现在我们来开始做我们的注册页面~ 当然需要注册才能发表文章啊(糟老头子坏得很, 我可以只有我一个人能发啊). 这里我们设定只有注册才能发表文章,也就淡化了管理员这个概念.在开发中先 ...
随机推荐
- HDU-4249-A Famous Equation(DP)
Problem Description Mr. B writes an addition equation such as 123+321=444 on the blackboard after cl ...
- Full Stack developer and Fog Computing
尊重开发人员的劳动成果.转载请注明From郝萌主 http://blog.csdn.net/haomengzhu/article/details/40453769 看到这两组词,你是什么感觉? 不知所 ...
- php_Ubuntu Linux下为PHP5安装cURL,mysql
如果你在用PHP, 你可能需要用到cURL, 这是其中最流行的插件. PHP CURL插件需要通过libcurl来实现, Daniel Stenberg创建的一个库, 能够和许多不同类型协议的web服 ...
- 常用cl编译命令参数解释
紧接前文,第一行cl命令如下: 1> cl /c /IC:\...\include /ZI /nologo- /W3 /WX- /sdl /Od /Oy- /D WIN32 /D _DEBUG ...
- WPF x:static的使用
<Window x:Class="XamlTest.Window1" xmlns="http://schemas.microsoft.com/winf ...
- qt 透明度设置(setWindowOpacity 和 setAutoFillBackground 和 带透明度的画刷填充就好了)
1,父窗口透明// 设置背景图片 QPalette pa;setAutoFillBackground(true);pa.setBrush(QPalette::Background,QBrush(QPi ...
- Win10中解决Prolific PL2303出现错误代码10的问题
PL2303 是Prolific 公司生产的一种高度集成的RS232-USB接口转换器,在Win10中默认安装的驱动程序会出现错误代码10的问题,如下图所示: 下载Win10上可以用的PL2303驱动 ...
- 【全面解禁!真正的Expression Blend实战开发技巧】十一章 全面解析布局(Grid & Canvas &StackPanel &Wrappanel)
原文:[全面解禁!真正的Expression Blend实战开发技巧]十一章 全面解析布局(Grid & Canvas &StackPanel &Wrappanel) 写这篇文 ...
- WEB性能优化【资料】
为了解决近期项目遇到的性能瓶颈,花费不少功夫恶补了web性能的相关优化方案,整理了一些资料,分享给大家. 博客 网页性能管理详解 - 阮一峰的网络日志 页面性能优化的利器 - Timeline - 云 ...
- JS实时检测文本框内容长度
通过js代码实时监测,文本框内容的变化以及长度,下图是一个实际使用场景. HTML部分: <input id="Text1" type="text" on ...