Vue关于组件化开发知识点详解


Posted in Javascript onMay 13, 2020

全局组件注册

Vue.component('first-component', {
 data: function () {
  return {
   count: 0
  }
 },
 template: '<button @click="count++">{{ count }}</button>'
})

data 必须是一个函数

组件模板内容必须是单个根元素

组件模板内容可以是模板字符串

全局组件可以嵌套全局组件

组件命名方式

Vue.component('first-component', {/* .... */})
// 普通标签模板中不能使用驼峰, 只能在template中使用驼峰方式
Vue.component('firstComponent', {/* .... */})

局部组件注册

局部注册的组件只能在父组件中使用 ;

var vm = new Vue({
 components: {
  'hello-world': {
   data: function () {
    return {
     msg: 'hello world'
    }
   },
   template: '<div>{{ msg }}</div>'
  }
 }
})

props 传递数据原则 : 单向数据流

组件内部通过 props 接收传递过来的值

Vue.component('son-com', {
	props: ['msg', 'parentMsg']
  template: '<div>{{msg + "---" + parentMsg}}</div>'
})

父组件通过属性将值传递给子组件

<son-com msg="父组件的值" :parent-msg="bind绑定的父组件的值"></son-com>

props 属性名规则

  • 在props中使用驼峰形式, 模板中需要使用短横线的形式 ; html 对大小写的不敏感的
  • 字符串中没有这个限制

props 传递类型

<div id="app">
 <son-com
  :str="pstr"
  :num="pnum" <!-- 注意如果不用 v-bind 则获取不到准确的属性值 -->
  :boolean="pboolean"
  :arr="parr"
  :obj="pobj"
 >
 </son-com>
</div>
Vue.component('son-com', {
 props: ['str', 'num', 'boolean', 'arr', 'obj'],
 template: `
  <div>
   <div>{{ str }}</div>
   <div>{{ num }}</div>
   <div>{{ boolean }}</div>
   <ul>
    <li :key="index" v-for="(item, index) in arr">{{ item }}</li>
   </ul>
   <div>
    <span>{{ obj.name }}</span>
    <span>{{ obj.age }}</span>
   </div>
  </div>
 `
})
var vm = new Vue({
 el: '#app',
 data: {
  pstr: 'hello Vue',
  pnum: 12,
  pboolean: true,
  parr: ['apple', 'banner', 'orange'],
  pobj: {name: 'zs', age: 22}
 }
})

子组件向父组件传值

子组件通过自定义事件向父组件传值 $emit()

Vue.component('son-com', {
 template: `
  <div>
   <button @click="$emit('parent')">点击放大父组件字体</button>
   传值从第二个参数开始
	 <button @click="$emit('parent', 10)">点击放大父组件字体</button>
  </div>
 `
})

父组件监听子组件事件

<div id="app">
 <div>父组件</div>
 <son-com @parent="handle"></son-com>
 <!-- 接收值为固定 $event-->
 <son-com @parent="handle($event)"></son-com>
</div>
var vm = new Vue({
 el: '#app',
 data: {
  font: 10
 },
 methods: {
  handle: function (val) {
   this.font += 5
   this.font += val // 此时的val就是 子组件传递过来的值
  }
 },
})

非父子组件传值

单独的事件中心管理组件之间的通信

// 创建事件中心
var hub = new Vue()

// 在 mounted 中监听事件
hub.$on('eventName', fn)
hub.$off('eventName') // 销毁事件

// 在 methods 中处理事件
hub.$emit('eventName', param)

组件插槽

<tmp-com>
 <!-- 只能匹配一个标签 -->
 <p slot="header">程序错误</p>
 <div>我是没有匹配的内容</div>
 <!-- 可以匹配多个标签 -->
 <template slot="footer">
  <p>匹配页脚一次</p>
  <p>匹配页脚两次</p>
 </template>
</tmp-com>
Vue.component('tmp-com', {
 template: `
  <div>
   <header>
    <slot name="header"></slot>
   </header>
   <div>
    如果上面没有匹配到对应的标签就会展示默认内容
    <slot></slot>
   </div>
   <footer>
    <slot name="footer"></slot>
   </footer>
  </div>
 `
})

到此这篇关于Vue关于组件化开发知识点详解的文章就介绍到这了,更多相关Vue 组件化开发内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
datePicker——日期选择控件(with jquery)
Feb 20 Javascript
javascript模拟的Ping效果代码 (Web Ping)
Mar 13 Javascript
js 判断上传文件大小及格式代码
Nov 13 Javascript
简单实用的反馈表单无刷新提交带验证
Nov 15 Javascript
如何解决easyui自定义标签 datagrid edit combobox 手动输入保存不上
Dec 26 Javascript
详解通过JSON数据使用VUE.JS
May 26 Javascript
JS HTML图片显示Canvas 压缩功能
Jul 21 Javascript
使用js获取伪元素的content实例
Oct 24 Javascript
Vue Components 数字键盘的实现
Sep 18 Javascript
node.js中Buffer缓冲器的原理与使用方法分析
Nov 23 Javascript
js实现简单扫雷
Nov 27 Javascript
javascript实现点击按钮切换轮播图功能
Sep 23 Javascript
Vue 中获取当前时间并实时刷新的实现代码
May 12 #Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
May 12 #Javascript
JavaScript 面向对象程序设计详解【类的创建、实例对象、构造函数、原型等】
May 12 #Javascript
JavaScript 接口原理与用法实例详解
May 12 #Javascript
ES5新增数组的实现方法
May 12 #Javascript
JavaScript内置对象之Array的使用小结
May 12 #Javascript
详解ES6新增字符串扩张方法includes()、startsWith()、endsWith()
May 12 #Javascript
You might like
DC最新动画电影:《战争之子》为何内容偏激,毁了一个不错的漫画
2020/04/09 欧美动漫
JavaScript中的Location地址对象
2008/01/16 Javascript
ExtJS Window 最小化的一种方法
2009/11/18 Javascript
IE6下CSS图片缓存问题解决方法
2010/12/09 Javascript
xml转json的js代码
2012/08/28 Javascript
dotopAlert 提示用户需安装播放器的代码
2012/09/17 Javascript
不同的jQuery API来处理不同的浏览器事件
2012/12/09 Javascript
SeaJS入门教程系列之SeaJS介绍(一)
2014/03/03 Javascript
使用JavaScript获取电池状态的方法
2014/05/03 Javascript
原生js和jQuery随意改变div属性style的名称和值
2014/10/22 Javascript
Javascript变量的作用域和作用域链详解
2015/04/02 Javascript
js代码实现点击按钮出现60秒倒计时
2021/01/28 Javascript
JS使用cookie实现只出现一次的广告代码效果
2017/04/22 Javascript
Vuejs中使用markdown服务器端渲染的示例
2017/11/22 Javascript
element-ui表格数据转换的示例代码
2018/08/24 Javascript
解决echarts的多个折现数据出现坐标和值对不上的问题
2018/12/28 Javascript
vue router 组件的高级应用实例代码
2019/04/08 Javascript
JavaScript数组及常见操作方法小结
2019/11/13 Javascript
javascript中可能用得到的全部的排序算法
2020/03/05 Javascript
vue打开其他项目页面并传入数据详解
2020/11/25 Vue.js
[04:52]第二届DOTA2亚洲邀请赛主赛事第一天比赛集锦:OG娜迦海妖放大配合谜团大中3人
2017/04/02 DOTA
python僵尸进程产生的原因
2017/07/21 Python
python安装pil库方法及代码
2019/06/25 Python
Django 使用easy_thumbnails压缩上传的图片方法
2019/07/26 Python
Django模型修改及数据迁移实现解析
2019/08/01 Python
python树的同构学习笔记
2019/09/14 Python
浅析python中的del用法
2020/09/02 Python
python中子类与父类的关系基础知识点
2021/02/02 Python
SmartBuyGlasses美国官网:太阳眼镜和眼镜
2017/08/20 全球购物
Kingsoft金山公司C/C++笔试题
2016/05/10 面试题
活动宣传策划方案
2014/05/23 职场文书
爱护公共设施演讲稿
2014/09/13 职场文书
职称评定个人总结
2015/03/05 职场文书
关于车尾的标语大全
2015/08/11 职场文书
创业计划书之蛋糕店
2019/08/29 职场文书
Python如何用re模块实现简易tokenizer
2022/05/02 Python