【Vue组件详解(一)】
Vue组件详解(一)
- 简介
- 对组件的理解
- 传统方式编写页面
- 组件方式编写页面
- 非单文件组件
- 完整代码
- 总结
简介
组件的定义其实就是实现应用中局部功能代码(html,css,js)和资源(MP3 ,MP4,img,ttf等)的集合。其优势是能复用编码,简化项目代码,提高运行效率,降低程序员重复编码。
什么是组件化?
当一个应用中的功能都是多组件的方式编写的,那这个应用就是一个组件化的应用。
对组件的理解
传统方式编写页面
传统方式下,我们进行前端开发时,都是一个html文档对应一个或多个css样式和js文件,且多个页面中,可能出现相同的部分,例如网页导航,例如网页底部信息,又难免出现复用同样的html结构,css样式和js文件,但假如任意改动其中一部分,那整个项目中复用的部分都会随之发生改变,就会造成依赖关系混乱,且不好维护。
其次,传统方式编写项目,每一个页面都是一个html文档,每出现一个新页面,就要新增一个html文档和一个或多个css样式及js文件,难免会存在文件较多的问题,每一个网页大多都是一个独立的部分,所以,代码复用率不是很高。
虽然说css样式和js文件已经完成了复用,但是在结构上,也就是html,是并没有复用的,很多时候我们在处理多个页面中相同的部分都是ctrl+c
,ctrl+v
进行复制,虽然结构只写了一遍,但是从方式上,并不是复用,而是复制。
组件方式编写页面
用组件方式来编写页面,其实简单理解来说就是把一个完整的网页拆分成一个又一个的组件,就比如说,一个网页包含头部导航,主体内容,底部信息。我们可以把网页头部导航划分为一个组件,剩下的同样对应划分为组件。拿顶部导航这个组件来说,这个组件包含了实现顶部导航的html结构,css样式和js代码。
每一个组件只负责对应的结构,样式和交互,各司其职,互不干扰,然后由这些一个又有一个的组件组成了一个完整的页面。且网页被拆分为组件后,我们就可以进行组件化编码,最直观的优点或亮点就是,组件复用,也就是多个网页相同的部分,只需要写一个组件然后按需引入就行。
非单文件组件
非单文件组件是指一个文件中包含多个组件,也就是说,所有的组件都是写在一个文件中。
首先,我们用一个实例引出非单文件的用法
上代码:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="vue.js"></script>
</head>
<body><div id="app"><h1>海贼王生命资料卡</h1><h2>人物姓名:{{name}}</h2><h2>人物年龄:{{age}}</h2><hr><h2>出生地点:{{address}}</h2><h2>悬赏金:{{amount}}</h2></div>
</body>
<script>Vue.config.productionTip = false //关闭Vue代码提示new Vue({el:"#app",data:{name:'蒙奇·D·路飞',age:19,address:'东海风车村',amount:'15亿贝利'}})
</script>
</html>
效果图如下:
接下来我们按照方框内的划分,把页面拆分为TestA和TestB两个组件
第一步,创建组件:
第二步,注册组件(局部注册):
第三步,使用组件:
完整代码
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="vue.js"></script>
</head>
<body><div id="app"><h1>海贼王生命资料卡</h1><!-- 使用组件 --><testa></testa><hr><testb></testa>
</body>
<script>Vue.config.productionTip = false //阻止Vue在启动生成生产提示// 创建TestA组件const testa = Vue.extend({template:`<div><h2>人物姓名:{{name}}</h2><h2>人物年龄:{{age}}</h2> </div>`,data(){return{name:'蒙奇·D·路飞',age:19,}}});// 创建TestB组件const testb = Vue.extend({template:`<div><h2>出生地点:{{address}}</h2><h2>悬赏金:{{amount}}</h2></div>`,data(){return{address:'东海风车村',amount:'15亿贝利'}}});// 创建vmnew Vue({el:"#app",// 注册组件(局部注册)components:{testa:testa,testb:testb,}})</script>
</html>
插入一个有关于data
写法的知识点,在未接触到组件时,data的写法都是对象式写法
,但是从组件之后,data的写法要转换为函数式写法
。
为什么要使用组件之后data要转换为函数式写法呢?
因为,我们说,使用组件最大的优势就是复用,也就是说假如我们创建了A组件并且使用data的对象式写法,但是之后很多地方都会用到A组件,此时,如果我们修改任意一个页面中A组件data属性中的数据,那么所有使用到A组件的地方,数据都会被更改,而函数式则不会,这样保证了在组件复用时,数据的独立性。
对象式写法,页面A中组件数据的改变会影响其他页面组件数据的改变
函数式写法,页面A中组件数据的改变不会影响其他页面组件数据的改变
刚刚我们说了组件的局部注册方法,接下来讲一讲组件的全局注册
围绕非单文件组件展开,组件的局部注册指的是在一个 Vue实例(vm) 下使用,如果想要在多个Vue实例下使用相同的组件,局部注册组件肯定是不行的,这种情况就要考虑组件的全局注册,全局注册组件之后,组件就可以被多个 Vue实例(vm) 使用,这时候,文章开头说的data函数式写法的优势也得以表现,各Vue实例可以共用一个组件, 且各相同组件的数据不会受到影响。
全局注册组件:
...// 创建TestB组件const testb = Vue.extend({template:`<div><h2>出生地点:{{address}}</h2><h2>悬赏金:{{amount}}</h2></div>`,data(){return{address:'东海风车村',amount:'15亿贝利'}}});// 全局注册组件Vue.components('testb', testb);
...
总结
以上就是我对Vue组件基本使用的理解,也算是自己学习Vue的笔记,本篇文章介绍了Vue组件基本使用,但是都是基于非单文件组件展开,通过上述,相信大家对Vue组件应该有了一些基本的了解,也能学会组件的最基本使用,接下来我也会继续对Vue组件展开更深层次的学习和理解。
组件化编码的出现,一定程度上提高了我们开发的效率,同时,在Vue中,组件也是一个必不可少的部分,学习组件之后,我们就可以进行单页面应用的开发,总之,以上也是我对Vue学习过程中自己的理解与看法,文章略显拙劣,如有不同看法,可根据自身选择。
持续更新中~~~~
喜欢记得点赞关注呀!!!
【Vue组件详解(一)】相关推荐
- vue组件详解(一)——组件与复用
一.什么是组件 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码. 二.组件用法 组件需要注册后才可以使用,注册有全局注册和局部注册两种 ...
- vue路由详解 --基础
vue路由详解 --基础 1.router-link 和router-view组件 router-link相当于封装了一个a标签 router-view为组件显示的位置 <router-link ...
- Vue实例详解与生命周期
Vue实例详解与生命周期 http://www.jianshu.com/p/b5858f1e6e76 Vue的实例是Vue框架的入口,其实也就是前端的ViewModel,它包含了页面中的业务逻辑处理. ...
- Vue中 Vue.prototype 详解及使用——作用:避免和已被定义的数据、方法、计算属性产生冲突
Vue中 Vue.prototype 详解及使用--作用:避免和已被定义的数据.方法.计算属性产生冲突 **应用场景:**在很多组件里用到数据/实用工具,但是不想污染全局作用域.这种情况下,可以通过在 ...
- Android笔记——四大组件详解与总结
android四大组件分别为activity.service.content provider.broadcast receiver. -------------------------------- ...
- ReactNative ViewPageAndroid组件详解
源码传送门 在我们开发Android的时候,ViewPage这个控件的使用频率还是很高的,最简单的就是制作引导页,应用程序的主界面等,在ReactNative开发中实现该功能的组件是ViewPageA ...
- Android Lifecycle 生命周期组件详解
转载请标明出处:https://blog.csdn.net/zhaoyanjun6/article/details/99695779 本文出自[赵彦军的博客] 一.Lifecycle简介 为什么要引进 ...
- Cinder 组件详解 - 每天5分钟玩转 OpenStack(47)
Cinder 组件详解 - 每天5分钟玩转 OpenStack(47) 本节我们将详细讲解 Cinder 的各个子服务. cinder-api cinder-api 是整个 Cinder 组件的门户, ...
- Android应用开发—Intent组件详解
转载自:Android中Intent组件详解 Intent是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件. Intent本身是定义为一个类别(Class),一个Intent对象表达一个目的 ...
最新文章
- dataframe的重设index
- Harbor2.2.1配置(trivy扫描器、镜像签名)
- 腾讯阿里谋定联姻农业 智慧农业对话中国农民丰收节交易会
- (转)十步精通新语言
- 文件类型总结 MIME
- php使用referer,PHP利用REFERER根居访问来地址进行页面跳转
- xticks函数--Matplotlib
- python爬取上海高级人民法院网开庭公告数据
- linux系统下find删除目录下除一文件外的所有文件
- ubuntu - sudo file 编辑报错 sudo: no valid sudoers sources found, quitting
- Mysql 安装PMM监控 (一台主机安装)
- Exporter介绍与指标数据汇总(完结)
- 网易云音乐PC客户端加密API逆向解析
- 【原创】从头开始,使用安卓系统WebView做一个功能强大的Epub阅读器(二)
- Python 将TXT格式转换为手机通讯录格式vcf
- 机器人军团防护罩_冒险岛贴吧 - 1000A导轨保护罩Y轴保护盖板的简单介绍
- Consensus-Driven Propagation in Massive Unlabeled Data for Face Recognition 人脸聚类
- PHP最佳实践指南(中英对照)
- Day22 常用模块01
- 逆变器 变频器 伺服驱动器 PCB图+原理图+源码