什么是组件?

 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、组件化开发相关推荐

  1. 【Vue.js 知识量化】组件化开发 + 前端模块化

    Vue.js 组件化开发 组件化 认识组件化 注册组件 全局组件和局部组件 父子组件 组件数据 父子组件的通信 父->子:props 子->父:$emit() 父子组件的访问方式 $chi ...

  2. VUE 前端中如何进行组件化开发?

    1.前端里面常说的视图层是什么? 我们把HTML中的DOM就可以与其他的部分独立开来划分出一个层次,这个层次就叫做视图层. Vue 的核心库只关注视图层 图1: dom对象树结构 图2:DOM和CSS ...

  3. Vue.js组件化开发实践

    Vue.js组件化开发实践 前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了一下的内容.首先会对使用Vue进行开发的一 ...

  4. Vue/React组件化开发的一些思考

    组件化开发的优势 组件化开发利用了面向对象的威力,易于构建规模比较大的应用并且获得比较高的可维护性,可扩展性.Vue.React厂商及社区不但提供了组件化开发的框架,而且提供了易于起步并包含了从编码. ...

  5. VUE.JS 组件化开发实践

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模 ...

  6. Vue.js 组件化开发

    三.组件化开发 1.1 组件化的实现和使用步骤 组件注册步骤解析 1.2 全局组件和局部组件 1.3 父组件和子组件 1.4 注册组件语法糖 1.5 组件模板抽离的写法 1.6 组件数据存放 1.7 ...

  7. Vue.js教程-组件化开发

    Vue.js教程-组件化开发 前言 Vue组件化 什么是组件化 Vue单页面开发的解释 组件化思想 组件的使用 原理 实际开发中的使用-父子组件 父子组件传递数据 父传子-props用法 子传父-th ...

  8. Thymeleaf + Vue组件化开发

    Thymeleaf 搭配 Vue 完成组件化开发 前言 一.vue2 1.引入静态文件 2.声明组件 二.语法搭配 使用vue方法调用th数据 前言 提示:thymeleaf 固然好,但是 vue 也 ...

  9. python组件化软件策划_Vue组件化开发

    一. 通过axios实现数据请求 1. json简介 json是 JavaScript Object Notation 的首字母缩写,单词的意思是javascript对象表示法,这里说的json指的是 ...

最新文章

  1. 酷客多基金在济南大学成立“酷客多奖助学金“
  2. BZOJ 2442: [Usaco2011 Open]修剪草坪 单调队列
  3. Windows系统 services.msc命令详解,Windows命令行查看本地服务
  4. 热敏电阻制作温度传感器的c语言,NTC热敏电阻温度测量和控制系统.doc
  5. AutoCAD查询插件的开发
  6. CIS 流程图 UML
  7. crmeb 一号通使用方法
  8. 如何导出html中的图片,一键保存网页中的全部图片
  9. vivo手机便签扫描功能怎么识别图片文字转为电子文字
  10. 冯·诺依曼结构及其主要思想【计算机系统基础01】
  11. doxygen html chm,使用Doxygen生成全中文的chm帮助文档
  12. 简谈几种ddos防御方法
  13. PTA 天梯赛的善良(20分)[C语言]
  14. centos8 处理挖矿程序攻击
  15. 基于支付宝小程序合成海报
  16. 华工c++基础语言程序,华工c++随堂练习答案+2020春.pdf
  17. 给大家晒晒什么叫galgame牛人
  18. 东南大学计算机学研招生人数,东南大学2020硕士研究生各专业报录比汇总(实考人数:录取人数)...
  19. spirng框架之spring security(一)
  20. openCV第一个lena程序新建运行与详细解说

热门文章

  1. 2019年Java大厂面试题讲解(周阳) 之Github学习(自学路上助推器)
  2. ceac计算机考试试题,计算机ceac考试复习题12套.doc
  3. android 生成bks_Android 添加 证书(pem,crt,p12,bks,jks)到 keystore.bks
  4. wps自动插入文献_WPS参考文献自动生成方法教程
  5. 划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就输了,输家罚一杯酒。两人同赢或两人同输
  6. FPGA入门实验-基于状态机实现4位共阴极数码管显示超声波模块读数
  7. 张飞流水账:超级搞笑诠释人生哲理
  8. Redis可视化客户端Redis Desktop Manager(中文版)下载及使用
  9. Altium Designer 软件介绍
  10. IVL和SVL的区别