前端知识-vue-3、组件化开发
什么是组件?
1、组件注册和使用
1、注册全局组件
方式一:使用全局的Vue直接注册:Vue.component
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script></head><body><div id="app"><!-- 使用自定义的组件 --><my-header></my-header><h1>{{name}}</h1><my-header></my-header><h1>{{name}}</h1></div><script type="text/javascript">// 创建一个组件对象const header = {// 组件中封装的HTML内容template:`<div class="header" style="height:100px;background: #FF0000 ;"><b>python{{headname}}</b><b>java{{age}}</b></div>`,// 组件的data是一个函数,数据写在return返回的对象中data(){return{headname:"headers",age:18,sex:'nan'}},methods:{}}// 全局组件的注册Vue.component('my-header',header)//实例化vue对象var vm = new Vue({el:'#app',data:{name:'guaniu'}})</script></body>
</html>
2、组件的使用
在template中之间使用组件名的闭合标签使用
<my-header></my-header>
3、组件使用的注意点
1、组件中的data必须是一个函数,子组件中的数据是独立的
2、组件的模板必须要包含一个根元素
3、组件中的模板内容可以是字符串的形式
4、组件的命名和使用注意点:
如果组件使用驼峰式命名规则命名(HelloWorld),在字符串模板中,可以使用驼峰式命名规范(HelloWorld)
在普通的标签模板中使用时,要使用(hello-world)
4、局部组件注册
使用vue实例的components配置项进行注册
注意点:局部组件只能在注册他的父组件中使用
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script></head><body><div id="app"><!-- 使用自定义的组件 --><my-header></my-header><h1>{{name}}</h1><my-header></my-header><h1>{{name}}</h1></div><script type="text/javascript">// 创建一个组件对象const header = {// 组件中封装的HTML内容template:`<div class="header" style="height:100px;background: #FF0000 ;"><b>python{{headname}}</b><b>java{{age}}</b></div>`,// 组件的data是一个函数,数据写在return返回的对象中data(){return{headname:"headers",age:18,sex:'nan'}},methods:{}}//实例化vue对象var vm = new Vue({el:'#app',data:{name:'guaniu'},// 注册局部组件components:{"my-header":header}})</script></body>
</html>
2、父组件往子组件中传数据
实现步骤:
1、子组件内部定义props接收传递过来的值
2、父组件在使用子组件时通过属性将值传递给子组件
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script></head><body><div id="app"><my-box myname='瓜牛' position='高级测试工程师'></my-box><my-box myname='瓜牛1' position='高级测试开发工程师'></my-box><my-box myname='瓜牛2' position='高级性能测试工程师'></my-box></div><script type="text/javascript">const myBox = {template: `<div style="width: 400px;height: 300px; box-shadow: 0 0 5px #00AAFF;"><h1>名字:{{myname}}</h1><h1>职位:{{position}}</h1></div> `,data(){return{}},// 给子组件定义属性(父组件中传递)props:['myname','position']}Vue.component('my-box',myBox)//实例化vue对象var vm = new Vue({el:'#app',data:{}})</script></body>
</html>
props传值的注意点:
1、子组件中props可以以驼峰形式规则接收参数(使用MenuTitle接收,使用menu-title传递,)
2、字符串的模板中可以使用驼峰形式,传递参数
3、非字符串的模板中(父组件)传递值的时候要使用下划线的命名形式(menu-title)
3、子组件往父组件中传数据
1、子组件中自定义一个事件
通过$emit 触发自定义的事件,并分别传入对应的参数。
2、在父组件中监听事件
监听子组件中定义的事件,当触发事件时,子组件中传递过来的数据,父组件可以通过$event来接收。
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script></head><body><div id="app"><!--子组件中可以通过$emit触发自定义的事件。父组件时使用子组件时,可以通过事件绑定的形式,去监听子组件中的事件--><my-box @del='handelDel($event)' @update='handelUpdate'></my-box><my-box @del='handelDel' @update='handelUpdate'></my-box><h1>父组件中的number:{{number}}</h1></div><script type="text/javascript">const myBox = {template: `<div style="width: 400px;height: 300px; box-shadow: 0 0 5px #00AAFF;"><h1>名字:{{myname}}</h1><h1>职位:{{position}}</h1><button @click="$emit('del',200)">删除</button><button @click="$emit('update',300)">修改</button></div> `,data(){return{myname:"瓜牛",position:"高级测试工程师"}}}Vue.component('my-box',myBox)//实例化vue对象var vm = new Vue({el:'#app',data:{number:500},methods:{handelDel(value){this.number = value},handelUpdate(value){this.number = value}}})</script></body>
</html>
4、兄弟组件之间传数据
实现步骤:
1、创建一个全局事件管理中心
// 定义事件中心
var hub = new Vue();
2、监听事件: $on
// 组件A中 监听事件
mounted: function () {// 事件中心监听事件hub.$on('demo2-event', (val) => {this.count += val;
})
}
3、触发事件:$emit
// 组件B中,触发兄弟组件监听的事件,并传入对应的值
methods: {handle: function () {hub.$emit('demo2-event', 10);}
}
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script></head><body><div id="app"><my-box1></my-box1><my-box2></my-box2></div><script type="text/javascript">// 1、创建一个全局的事件中心var hub = new Vue()// 定义组件var myBox1 = {template: `<div style="width: 300px;height: 200px;box-shadow: 0 0 5px #55AA7F;"><h1>显示数据的组件</h1><h2>{{value}}</h2><button type="button" @click='handel'>box1Event</button></div>`,data() {return {value: 0}},methods: {handel() {hub.$emit('box1Eevnt', 9999)}},// 在组件box1中监听事件中的触发事件mounted() {hub.$on('changeValue', (val) => {// 将事件传递过来的数据保存到当前组件中this.value = val})}}var myBox2 = {template: `<div style="width: 300px;height: 200px;box-shadow: 0 0 5px #55AA7F;"><h1>选择数据的组件</h1><button type="button" @click='selectValue(1000)'>1000</button><button type="button" @click='selectValue(2000)'>2000</button><button type="button" @click='selectValue(3000)'>3000</button><h2>{{value}}</h2></div>`,data() {return {value: 0}},methods: {// 在组件box2中 触发事件中心的changeValue事件,并传递参数selectValue(val) {hub.$emit('changeValue', val)}},mounted() {hub.$on('box1Eevnt', (val) => {// 将事件传递过来的数据保存到当前组件中this.value = val})}}// 创建一个vue实例var vm = new Vue({el: '#app',data: {},// 注册组件components: {'my-box1': myBox1,'my-box2': myBox2},})</script></body>
</html>
5、插槽
插槽的作用:实现父组件往子组件中传递内容
1、组件插槽
定义组件时定义插槽
Vue.component('test-demo1', {// 组件的模板template: `<div><span>slot预留一个插槽</span><slot></slot></div>`,});
使用组件时,可以往插槽中传递内容
<test-demo1><h1>往插槽中插入的内容</h1>
</test-demo1>
2、具名插槽
定义插槽时,通过name属性给插槽设置一个名字
Vue.component('test-demo1', {// 组件的模板template: `<div><div class='box1'><slot name="demo1"></slot></div><div class='box2'><slot name="demo2"></slot></div></div>`,});
使用组件时,通过slot指定插槽的名字
注意点:插入多个标签时,通过template来包裹要插入的内容
<div id="app"><test-demo1><template slot="demo1"><h1>demo1中插入的h1标签</h1><h2>demo1中插入的h1标签</h2></template ><p slot="demo2">给demo2插入的数据</p></test-demo1>
</div>
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script></head><body><div id="app"><my-box><div slot="title">标题</div><p>666666</p><p>777777</p><p>888888</p><div slot="footer">footer部分的内容</div></my-box></div><script type="text/javascript">const myBox = {template: `<div style="width: 300px;height: 500px; box-shadow: 0 0 5px #00AAFF;"><div style="height: 100px;background: #00FFFF;">title:<slot name='title'></slot></div><div style="height: 100px;background: #00aa7f;"><slot></slot></div><div style="height: 100px;background: #ffaa7f;">footer:<slot name='footer'></slot></div></div> `,data(){return{}}}Vue.component('my-box',myBox)//实例化vue对象var vm = new Vue({el:'#app',data:{number:500},methods:{}})</script></body>
</html>
未完待续,点个关注,持续更新。。。
前端知识-vue-3、组件化开发相关推荐
- 【Vue.js 知识量化】组件化开发 + 前端模块化
Vue.js 组件化开发 组件化 认识组件化 注册组件 全局组件和局部组件 父子组件 组件数据 父子组件的通信 父->子:props 子->父:$emit() 父子组件的访问方式 $chi ...
- VUE 前端中如何进行组件化开发?
1.前端里面常说的视图层是什么? 我们把HTML中的DOM就可以与其他的部分独立开来划分出一个层次,这个层次就叫做视图层. Vue 的核心库只关注视图层 图1: dom对象树结构 图2:DOM和CSS ...
- Vue.js组件化开发实践
Vue.js组件化开发实践 前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了一下的内容.首先会对使用Vue进行开发的一 ...
- Vue/React组件化开发的一些思考
组件化开发的优势 组件化开发利用了面向对象的威力,易于构建规模比较大的应用并且获得比较高的可维护性,可扩展性.Vue.React厂商及社区不但提供了组件化开发的框架,而且提供了易于起步并包含了从编码. ...
- VUE.JS 组件化开发实践
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模 ...
- Vue.js 组件化开发
三.组件化开发 1.1 组件化的实现和使用步骤 组件注册步骤解析 1.2 全局组件和局部组件 1.3 父组件和子组件 1.4 注册组件语法糖 1.5 组件模板抽离的写法 1.6 组件数据存放 1.7 ...
- Vue.js教程-组件化开发
Vue.js教程-组件化开发 前言 Vue组件化 什么是组件化 Vue单页面开发的解释 组件化思想 组件的使用 原理 实际开发中的使用-父子组件 父子组件传递数据 父传子-props用法 子传父-th ...
- Thymeleaf + Vue组件化开发
Thymeleaf 搭配 Vue 完成组件化开发 前言 一.vue2 1.引入静态文件 2.声明组件 二.语法搭配 使用vue方法调用th数据 前言 提示:thymeleaf 固然好,但是 vue 也 ...
- python组件化软件策划_Vue组件化开发
一. 通过axios实现数据请求 1. json简介 json是 JavaScript Object Notation 的首字母缩写,单词的意思是javascript对象表示法,这里说的json指的是 ...
最新文章
- 酷客多基金在济南大学成立“酷客多奖助学金“
- BZOJ 2442: [Usaco2011 Open]修剪草坪 单调队列
- Windows系统 services.msc命令详解,Windows命令行查看本地服务
- 热敏电阻制作温度传感器的c语言,NTC热敏电阻温度测量和控制系统.doc
- AutoCAD查询插件的开发
- CIS 流程图 UML
- crmeb 一号通使用方法
- 如何导出html中的图片,一键保存网页中的全部图片
- vivo手机便签扫描功能怎么识别图片文字转为电子文字
- 冯·诺依曼结构及其主要思想【计算机系统基础01】
- doxygen html chm,使用Doxygen生成全中文的chm帮助文档
- 简谈几种ddos防御方法
- PTA 天梯赛的善良(20分)[C语言]
- centos8 处理挖矿程序攻击
- 基于支付宝小程序合成海报
- 华工c++基础语言程序,华工c++随堂练习答案+2020春.pdf
- 给大家晒晒什么叫galgame牛人
- 东南大学计算机学研招生人数,东南大学2020硕士研究生各专业报录比汇总(实考人数:录取人数)...
- spirng框架之spring security(一)
- openCV第一个lena程序新建运行与详细解说
热门文章
- 2019年Java大厂面试题讲解(周阳) 之Github学习(自学路上助推器)
- ceac计算机考试试题,计算机ceac考试复习题12套.doc
- android 生成bks_Android 添加 证书(pem,crt,p12,bks,jks)到 keystore.bks
- wps自动插入文献_WPS参考文献自动生成方法教程
- 划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就输了,输家罚一杯酒。两人同赢或两人同输
- FPGA入门实验-基于状态机实现4位共阴极数码管显示超声波模块读数
- 张飞流水账:超级搞笑诠释人生哲理
- Redis可视化客户端Redis Desktop Manager(中文版)下载及使用
- Altium Designer 软件介绍
- IVL和SVL的区别