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 相关文章推荐
javascript 动态设置已知select的option的value值的代码
Dec 16 Javascript
js 中{},[]中括号,大括号使用详解
May 12 Javascript
jqueyr判断checkbox组的选中(示例代码)
Nov 08 Javascript
jquery提交form表单时禁止重复提交的方法
Feb 13 Javascript
Bootstrap表单组件教程详解
Apr 26 Javascript
jQuery插件简单学习实例教程
Jul 01 Javascript
js 获取图像缩放后的实际宽高,位置等信息
Mar 07 Javascript
jQuery 实现鼠标画框并对框内数据选中的实例代码
Aug 29 jQuery
JavaScript模块详解
Dec 18 Javascript
jQuery实现上下滚动公告栏详细代码
Nov 21 jQuery
新年快乐! javascript实现超级炫酷的3D烟花特效
Jan 30 Javascript
Vue 电商后台管理项目阶段性总结(推荐)
Aug 22 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
Mysql的常用命令
2006/10/09 PHP
php自动加载autoload机制示例分享
2014/02/20 PHP
PHP二维数组矩形转置实例
2016/07/20 PHP
PHP实现一个多功能购物网站的案例
2017/09/13 PHP
让iframe子窗体取父窗体地址栏参数(querystring)
2009/10/13 Javascript
Extjs 4.x 得到form CheckBox 复选框的值
2014/05/04 Javascript
后台获取ZTREE选中节点的方法
2015/02/12 Javascript
javascript实现图片自动和可控的轮播切换特效
2015/04/13 Javascript
JS加载器如何动态加载外部js文件
2016/05/26 Javascript
详解AngularJS通过ocLazyLoad实现动态(懒)加载模块和依赖
2017/03/01 Javascript
Node.js环境下Koa2添加travis ci持续集成工具的方法
2017/06/19 Javascript
Javascript之图片的延迟加载的实例详解
2017/07/24 Javascript
js实现ATM机存取款功能
2020/10/27 Javascript
TypeScript之调用栈的实现
2019/12/31 Javascript
Python错误: SyntaxError: Non-ASCII character解决办法
2017/06/08 Python
Python 网页解析HTMLParse的实例详解
2017/08/10 Python
Python多线程编程之多线程加锁操作示例
2018/09/06 Python
python pandas消除空值和空格以及 Nan数据替换方法
2018/10/30 Python
Face++ API实现手势识别系统设计
2018/11/21 Python
Django2.1.3 中间件使用详解
2018/11/26 Python
python连接PostgreSQL数据库的过程详解
2019/09/18 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
2019/12/20 Python
记录模型训练时loss值的变化情况
2020/06/16 Python
ITK 实现多张图像转成单个nii.gz或mha文件案例
2020/07/01 Python
Pycharm 2020.1 版配置优化的详细教程
2020/08/07 Python
Python 在 VSCode 中使用 IPython Kernel 的方法详解
2020/09/05 Python
python 根据列表批量下载网易云音乐的免费音乐
2020/12/03 Python
Django项目在pycharm新建的步骤方法
2021/03/02 Python
html5使用canvas画三角形
2014/12/15 HTML / CSS
HTML5逐步分析实现拖放功能的方法
2020/09/30 HTML / CSS
澳大利亚足球鞋和服装购物网站:Ultra Football
2018/10/11 全球购物
四年级科学教学反思
2014/02/10 职场文书
广播体操口号
2014/06/18 职场文书
优秀党员事迹材料
2014/12/18 职场文书
爱国影片观后感
2015/06/18 职场文书
2015年支教教师工作总结
2015/07/22 职场文书