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 相关文章推荐
Extjs 几个方法的讨论
Jan 28 Javascript
基于jquery实现的类似百度搜索的输入框自动完成功能
Aug 23 Javascript
javascript中substring()、substr()、slice()的区别
Aug 30 Javascript
向JavaScript的数组中添加元素的方法小结
Oct 24 Javascript
jquery仿QQ登录账号选择下拉框效果
Mar 22 Javascript
Bootstrap 折叠(Collapse)插件用法实例详解
Jun 01 Javascript
JavaScript生成带有缩进的表格代码
Jun 15 Javascript
深入浅析jQuery对象$.html
Aug 22 Javascript
微信小程序 UI与容器组件总结
Feb 21 Javascript
node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能
Jan 12 Javascript
利用原生JS实现data方法示例代码
May 28 Javascript
vue 使用rules对表单字段进行校验的步骤
Dec 25 Vue.js
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
PHP生成月历代码
2007/06/14 PHP
PHP连接操作access数据库实例
2015/03/30 PHP
PHP时间和日期函数详解
2015/05/08 PHP
php下载文件,添加响应头的简单实例
2016/09/22 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
Nginx+php配置文件及原理解析
2020/12/09 PHP
jQuery与其它库冲突的解决方法
2010/06/25 Javascript
基于JQuery的浮动DIV显示提示信息并自动隐藏
2011/02/11 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
2015/12/20 Javascript
jquery对象访问是什么及使用方法介绍
2016/05/03 Javascript
深入浅析jQuery对象$.html
2016/08/22 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
2016/12/01 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
2017/03/14 Javascript
TypeScript入门-接口
2017/03/30 Javascript
微信小程序版翻牌小游戏
2018/01/26 Javascript
jsonp跨域获取百度联想词的方法分析
2019/05/13 Javascript
利用Python3分析sitemap.xml并抓取导出全站链接详解
2017/07/04 Python
python机器学习之神经网络(三)
2017/12/20 Python
在python中pandas的series合并方法
2018/11/12 Python
Python编程flask使用页面模版的方法
2018/12/28 Python
python梯度下降算法的实现
2020/02/24 Python
Python 连接 MySQL 的几种方法
2020/09/09 Python
Madewell美德威尔美国官网:美国休闲服饰品牌
2016/11/25 全球购物
美国真皮手袋品牌:GiGi New York
2017/03/10 全球购物
教育系毕业生中文求职信范文
2013/10/06 职场文书
资料员岗位职责
2013/11/17 职场文书
原料仓管员岗位职责
2014/04/12 职场文书
劳动纠纷调解协议书格式
2014/11/30 职场文书
博士给导师的自荐信
2015/03/06 职场文书
党员个人承诺书
2015/04/27 职场文书
不同意离婚答辩状
2015/05/22 职场文书
电影小兵张嘎观后感
2015/06/03 职场文书
在Django中使用MQTT的方法
2021/05/10 Python
Python机器学习之逻辑回归
2021/05/11 Python
Python Flask请求扩展与中间件相关知识总结
2021/06/11 Python
Redis Cluster集群动态扩容的实现
2021/07/15 Redis