前端开发系列050-基础篇之组件的概念和使用(Vue)
本文是早期学习Vue整理的一些阶段性总结,内容主要关于Vue框架中组件的概念和数据传递。
一、组件的相关概念
在Vue学习的时候参考了很多文档和书籍,这些文档和书籍中总是充满各种术语(定语),在这里先把Vue中相关的词汇搞清楚,先搞清楚谁是谁,什么是什么,它们的关系是什么样,然后才能继续后面更深入的内容。涉及到的主要概念如下:
组件:我自己的理解是可以把所有的页面中的所有组成部分都当成是组件,即可以把一切都当成是组件(比如一个简单的button按钮),不同的组件有不同的功能(有很多常用的UI组件库 如iView就提供了各种丰富的组件等),组件也可大可小,大的组件代码较多能够完成丰富的功能实现和展示,小的组件也许就是一个简单的标签而已,组件可以嵌套可以组合等等。理解了这些概念之后,就会发现其实所有的页面都可以由多个组件构成,比如导航组件、商品展示组件、购物车组件等等。
在组件化开发中,页面由多个组件构成,那么这么多的组件它们之间自然不会毫无关系,所以在很多文档中用到了父组件、子组件等等术语。组件本身就是一个完整的功能模块,组件的内容可以是固定不变的,也可能需要和动态的数据进行绑定,所以这又涉及到组件中数据的传递。
现在我们明白了页面中的一切都可以看做是组件,而且组件可大可小,组件可复杂可简单。
HTML中的众多标签比如a标签或者是button标签等等的都可以看做是一个个的组件,他们提供对应的功能也能够复用,但是对于复杂的页面应用开发来说这样的层级太小,仅仅使用单个标签无法完整的定义更复杂的功能模块,在以前的开发中我们是把多个不同的标签组合在一起实现一个稍微复杂的功能模块。现在很多优秀的前端框架中都采用组件化的组织方式,核心的东西并没有改变。
我们把在框架中(Vue)中使用的组件称为自定义组件(区别于系统为我们提供的标签),这些自定义组件的本质其实就是把众多标签以一定的方式组合在一起形成一个整体被称为"组件"。我认为组件开发方式最核心的东西还是代码(功能)复用,把复杂的应用切割成一个个小的更容易管理的模块。
二、Vue框架中的组件
Vue框架中的组件和大多数框架中的组件也没有太大的差别,下面简单说明Vue框架中组件的相关使用。
组件的使用主要有两部分构成
① 组件的注册(指定组件的结构和具体内容等等)
② 组件的使用(在页面中使用)
① 全局注册的组件
全局注册的组件其实是把组件相关的信息写到Vue这个构造函数身上,全局组件在任何Vue实例挂载的标签中都能够使用。
//第一个参数:注册的全局组件的名称
//第二个参数:描述组件内容、数据等信息的选项对象
Vue.component("my-component",{
//组件的配置项,包括组件的内容(template) 组件中的数据等...
})
② 局部注册的组件
局部注册的组件其实是把组件相关的信息写到当前指定的这个Vue实例对象(由全局的Vue构造函数创建得到)身上,局部注册的组件只在当前的这个Vue实例对象挂载的标签中能够使用,有使用范围的限制。
var app2 = new Vue({
el:"#TEST-TWO",
components:{
"my-component-two":{
//在app2实例对象中注册的局部组件,组件名称为my-component-two
//组件的内容为:span标签
},
"my-component-three":{
//在app2实例对象中注册的局部组件,组件名称为my-component-three
//组件的内容为:p标签
}
}
})
③ 组件的具体用法
说明:如果是全局注册的组件那么在页面中所有被挂载到Vue实例对象的标签中均可以使用,局部组件只能在注册的Vue实例,挂载的标签中使用,有使用范围的限制
组件的使用方式:在页面中指定位置以标签对的方式表明此处需要用到的是哪个组件。示例:<my-component-global-one></my-component-global-one>
Vue框架中组件的使用示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="../../Vue/vue.min.js"></script>
</head>
<div id="demo-one">
<!--全局注册的组件在Vue实例对象挂载的标签中都可以使用-->
<my-component-global-01></my-component-global-01>
<my-component-global-02></my-component-global-02>
</div>
<hr>
<div id="demo-two">
<!--全局注册的组件在Vue实例对象挂载的标签中都可以使用-->
<my-component-global-01></my-component-global-01>
<my-component-global-02></my-component-global-02>
</div>
<hr>
<div id="demo-three">
<my-component-part-01></my-component-part-01>
<my-component-part-02></my-component-part-02>
</div>
<body>
<script>
//A 全局注册的组件
Vue.component("my-component-global-01",{
//组件的选项对象
template:"<div>我是全局注册的组件 组件名称为my-component-global-01</div>"
});
Vue.component("my-component-global-02",{
//组件的选项对象
template:"<div>我是全局注册的组件 组件名称为my-component-global-02</div>"
});
//B 局部注册的组件
//创建Vue实例化对象
var app1 = new Vue({
el:"#demo-one"
});
var app2 = new Vue({
el:"#demo-two"
});
var app3 = new Vue({
el:"#demo-three",
components:{
"my-component-part-01":{
//组件的选项对象
template:"<div>局部注册的组件 组件名称为my-component-part-01</div>"
},
"my-component-part-02":{
//组件的选项对象
template:"<div>局部注册的组件 组件名称为my-component-part-02</div>"
}
}
})
</script>
</body>
</html>
三、父子组件
组件和组件之间可以是包含的关系,如果某个组件中包含另外一个组件,那该组件被称为父组件,被包含的组件相对来说则是子组件。
下面通过代码简单介绍父子组件的结构,父子组件还有一个很重要的数据传递问题,即父子组件的通信。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="../../Vue/vue.min.js"></script>
</head>
<body>
<div id="demoID">
<parent></parent>
<child-three></child-three>
<!--<child-one></child-one> 因为组件是在parent父组件中注册的,所以此处不能直接使用-->
</div>
<script>
//创建两个子组件构造器(分别为child-one和child-two)
var childOne = Vue.extend({
template:"<input type='color'/>"
});
var childTwo = Vue.extend({
template:"<input type='date'/>"
});
//注册父组件(作为child-one和child-two的父组件)
Vue.component("parent",{
//在父组件中注册child-one和child-two两个子组件,外界无法直接获取
components:{
"child-one":childOne,
"child-two":childTwo
},
template:"<div><child-one></child-one><child-two></child-two></div>"
});
//在外部注册组件(需要注意位置关系)
Vue.component("child-three",childTwo);
//创建Vue实例对象并挂载到页面
var app = new Vue({
el:"#demoID"
})
</script>
</body>
</html>
前端开发系列050-基础篇之组件的概念和使用(Vue)的更多相关文章
- 从0到1用react+antd+redux搭建一个开箱即用的企业级管理后台系列(基础篇)
背景 最近因为要做一个新的管理后台项目,新公司大部分是用vue写的,技术栈这块也是想切到react上面来,所以,这次从0到1重新搭建一个react项目架子,需要考虑的东西的很多,包括目录结构.代码 ...
- ESP8266开发之旅 基础篇① 走进ESP8266的世界
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- 前端开发:css基础知识之盒模型以及浮动布局。
前端开发:css基础知识之盒模型以及浮动布局 前言 楼主的蛮多朋友最近都在学习html5,他们都会问到同一个问题 浮动是什么东西? 为什么这个浮动没有效果? 这个问题楼主已经回答了n遍.今天则是把 ...
- ESP8266开发之旅 基础篇② 如何安装ESP8266的Arduino开发环境
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- ESP8266开发之旅 基础篇③ ESP8266与Arduino的开发说明
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- openlayers5-webpack 入门开发系列一初探篇(附源码下载)
前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...
- leaflet-webpack 入门开发系列一初探篇(附源码下载)
前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...
- Prism+MaterialDesign+EntityFramework Core+Postgresql WPF开发总结 之 基础篇
本着每天记录一点成长一点的原则,打算将目前完成的一个WPF项目相关的技术分享出来,供团队学习与总结. 总共分三个部分: 基础篇主要争对C#初学者,巩固C#常用知识点: 中级篇主要争对WPF布局与美化, ...
- 【Windows10 IoT开发系列】配置篇
原文:[Windows10 IoT开发系列]配置篇 Windows10 For IoT是Windows 10家族的一个新星,其针对不同平台拥有不同的版本.而其最重要的一个版本是运行在Raspberry ...
- ESP8266开发之旅 基础篇④ ESP8266与EEPROM
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
随机推荐
- Asp.net mvc基础(八)Layout页面的使用
Layout页面相当于母版页. 使用步骤如下: 1.创建MVC5布局页 @RenderBody()渲染正文部分 @ViewBag.Title表示标题内容 也可以自己定义渲染的部分:比如在布局页中添加@ ...
- python,去掉“xa0”和“\r\n”
爬小说网站,输出内容有时候会出现下图字符 首先,去掉"xa0" s = 'T-shirt\xa0\xa0短袖圆领衫,体恤衫\xa0' out = "".join ...
- C#访问注册表
注册表 .wiz-editor-body .wiz-code-container { position: relative; padding: 8px 0; margin: 5px 0; text-i ...
- TablesOfContents.Add 方法 (python3处理Word添加目录)
TablesOfContents.Add 方法 (Word) 返回一 个 TableOfContents 对象,该对象代表添加到文档中的目录. 语法 表达式.Add (Range, UseHeadin ...
- 如何构造一款类似One API的大模型集成平台
作为AI领域的开发者,我们经常需要调用多个不同的大语言模型,但面对各家不同的API规范和接入方式,集成工作变得繁琐.构建一个统一的大模型集成平台,能够极大地简化这一过程. 本文将探讨如何实现一个兼容O ...
- 最强AI数字人,口型、表情、动作全同步!Kairos下载介绍
在数字化浪潮汹涌澎湃的今天,视频合成技术如同一颗璀璨的明星,照亮了内容创作的广阔天地 Kairos是一款顶级数字人制作工具,它基于先进的 AI 算法,能够快速克隆出用户的数字分身,并且精准匹配外貌.声 ...
- 个人对Debian桌面系统的简单使用分享
前言 自从安装Debian12作为双系统已经过了大半个月,平常主用Debian,偶尔切回Windows找找文档,总体来说体验还是很不错的.先贴个桌面照 为什么要使用Linux作为个人桌面 当初刚从Wi ...
- 深度评测:DeepSeek API 在代码分析与审查中的实战应用 (附 Prompt 示例)
人工智能(AI)正在深刻改变软件开发的各个环节,从最初的需求分析 1 到最终的部署维护 1,AI 的身影无处不在.尤其在代码编写.分析和审查方面,AI 辅助工具如 GitHub Copilot 8 已 ...
- vue3 基础-Mixin
本篇开始来学习一波 vue 中的一些复用性代码的基础操作, 首先来介绍关于代码 "混入" mixin 的写法. 直观理解这个 mixin 就是一个 js 对象去 "混入& ...
- 7 指纹浏览器 User-Agent 指纹伪装教程
目的 navigator.userAgent 是浏览器中最常被网站读取的属性之一,用于识别浏览器内核.版本.操作系统信息,甚至设备类型.它是构成浏览器指纹的关键字段,广泛应用于用户识别.设备分类.风控 ...