那么什么是Vue组件呢?它是vue.js最强大的功能之一,是可扩展的html元素,是封装可重用的代码,同时也是Vue实例,可以接受相同的选项对象(除了一些根级特有的选项) 并提供相同的生命周期钩子。这么说我相信很多人都理解了。

组件系统是Vue.js其中一个重要的概念,它提供了一种抽象,让我们可以使用独立可复用的小组件来构建大型应用,任意类型的应用界面都可以抽象为一个组件树:

那么什么是组件呢? 组件可以扩展HTML元素,封装可重用的HTML代码,我们可以将组件看作自定义的HTML元素。

使用组件的好处?

提高开发效率

方便重复使用

简化调试步骤

提升整个项目的可维护性

便于多人协同开发

如何注册组件?

需要使用Vue.extend方法创建一个组件,然后使用Vue.component方法注册组件。Vue.extend方法格式如下

var MyComponent = Vue.extend({// 选项...后面再介绍
})
复制代码

如果想要其他地方使用这个创建的组件,还得个组件命个名:

Vue.component('my-component', MyComponent)
复制代码

命名之后即可在HTML标签中使用这个组件名称,像使用DOM元素一样。下面来看看一个完整的组件注册和使用例子。


//html代码:
<div id="example"><my-component></my-component>
</div>
//js代码:
// 定义
var MyComponent = Vue.extend({template: '<div>A custom component!</div>'
})// 注册
Vue.component('my-component', MyComponent)// 创建根实例
new Vue({el: '#example'
})
复制代码

输出结果为:

<div id="example"><div>A custom component!</div>
</div
复制代码

组件之间的通信 父组件要给子组件传递数据,

子组件需要将它内部发生的事情告诉父组件(利用事件的订阅发布模式)

1.给子组件的template上的元素绑定事件(如click),执行子组件的方法(如changeData),子组件的方法中发射一个事件(如s),传一个数据(如lalala);

2.父组件中,定义一个方法(如getData)用来拿到子组件的数据。

3.在自定义的组件上绑定子组件传过去的事件(s),执行事件(s)执行的是getData函数,getData函数中拿到数据(data,就是子组件传过去的lalala)数据同步

<div id="app">
<parent></parent>
</div>
<template id="parent">
<div><h1>父组件 <mark>{{msg.name}}</mark></h1><children :n="msg"></children>
</div>
</template>
<template id="children"><h2 @click="changeData">子组件 {{n.name}}</h2>
</template>
<script>//数据同步的核心:父组件给子组件传递“引用数据类型的数据”;var app=new Vue({el:'#app',components:{parent:{template:'#parent',data(){return {msg:{name:'hahha'}}},components:{children:{props:['n'],template:'#children',methods:{changeData(){this.n.name='lallala'},}}}}}})
</script>//
复制代码

数据不同步(不直接使用父组件传的值,用data属性再自己的组件内做一个中间变量,防止报错)

<parent></parent>
</div>
<template id="parent">
<div><h1>父组件 <mark>{{msg}}</mark></h1><children :n="msg"></children>
</div>
</template>
<script>//数据不同步的核心:中间变量接收避免报错;var app=new Vue({el:'#app',components:{parent:{template:'#parent',data(){return {msg:'hahha'}},components:{children:{props:['n'],template:'<h2 @click="changeData">子组件 {{b}}</h2>',data(){return {b:this.n}},methods:{changeData(){this.b='lallala'},}}}}}})//欢迎加入全栈开发交流群一起学习交流:864305860
</script>
复制代码

组件中的data必须是函数

每个组件都是互相独立的,如果它们共用一个对象,

在更改一个组件数据的时候,会影响其它组件,如果是函数的话,

每个组件都有都是又自己独立的数据,互相不会影响。

受限制的元素

Vue在浏览器解析和标准化HTML后才能获取模板内容, 所以有些元素限制了能被它包裹的元素。

例如:ul中只能放li;select中只能放option

某些元素中放入了自定义元素,

不符合W3C标准,最终会解析错误。

关于DOM模板的解析

当使用 DOM 作为模版时 (例如,将 el 选项挂载到一个已存在的元素上), 你会受到 HTML 的一些限制,因为 Vue 只有在浏览器解析和标准化 HTML 后才能获取模板内容。尤其像这些元素

  1. ,, 限制了能被它包裹的元素,而一些像 这样的元素只能出现在某些其它元素内部。 在自定义组件中使用这些受限制的元素时会导致一些问题,例如: <table> <my-row>...</my-row> </table> 自定义组件 被认为是无效的内容,因此在渲染的时候会导致错误。这时应使用特殊的 is 属性: <table> <tr is="my-row"></tr> </table> 也就是说,标准HTML中,一些元素中只能放置特定的子元素,另一些元素只能存在于特定的父元素中。比如table中不能放置div,tr的父元素不能div等。所以,当使用自定义标签时,标签名还是那些标签的名字,但是可以在标签的is属性中填写自定义组件的名字。 应当注意,如果您使用来自以下来源之一的字符串模板,这些限制将不适用:

转载于:https://juejin.im/post/5c2a1453e51d455eb76e205a

为什么要用Vue.js的组件化开发相关推荐

  1. 360奇舞团钟恒:选用Vue.js进行组件化开发,我们遇到了哪些坑?

    责编:陈秋歌,关注前端开发领域,寻求报道或者投稿请发邮件chenqg#csdn.net. 欢迎加入"CSDN前端开发者"微信群,参与热点.难点技术交流.请加群主微信「Rachel_ ...

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

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

  3. [Vue.js] 深入 -- 组件化开发

    组件化开发思想 现实中的组件化思想体现 标准 分治 重用 组合 组件注册 全局组件注册语法 Vue.component(组件名称,{data:组件数据,template:组件模板内容 }) 组件用法 ...

  4. Vue.js的组件化开发

    组件化开发 什么是组件? web中的组件其实就是页面组成的一部分, 好比是电脑中的每一个元件(如硬盘.键盘.鼠标), 它是一个具有独立的逻辑和功能或界面, 同时又能根据规定的接口规则进行相互融化, 变 ...

  5. Vue入门之组件化开发

    Vue入门之组件化开发 http://www.jianshu.com/p/6718ab1caa81 组件其实就是一个拥有样式.动画.js逻辑.HTML结构的综合块.前端组件化确实让大的前端团队更高效的 ...

  6. 【Vue】Vite 组件化开发

    文章目录 组件化开发 一.组件化开发思想 二.Vue 组件的构成 2.1 组件组成结构 2.2 组件 template 节点 2.2.1 在 template 中使用指令 2.2.2 在 templa ...

  7. Vue.js-Day02-PM【组件化开发(全局注册组件、局部注册组件、案例)、组件的配置选项、轮播图实例(左右切换按钮、底部导航栏、定时器、鼠标移入-图片静止)】

    Vue.js实训[基础理论(5天)+项目实战(5天)]博客汇总表[详细笔记] 目   录 4.组件化开发 4.1.组件的注册 全局注册 局部注册(只能在当前整个Vue实例的范围内才可以使用) 使用组件 ...

  8. Vue基础知识+组件化开发+模块化开发总结

    三.内容: 一.MVVM View层 视图层,我们前端开发时候的DOM层 主要就是给用户展示各种信息 Model层 数据层:可能是我们固定的思数据,更多的是来自我们的服务器,在网路上请求下来的数据 V ...

  9. vue相关的组件化开发和模块化开发及工程化

    vue作为当前最流行的前端框架,随着更新迭代,组件化和模块化思想就成为了主流. 大多数招聘信息提到模块化开发,我自己理解vue的模块化:javascript模块化思想是利用es6的 import/ex ...

最新文章

  1. 共享之windows与Linux
  2. kivy 的on_touch_move和on_touch_down
  3. Android之EasyPermissions源码解析
  4. zabbix系列之九——添加钉钉告警
  5. 2021云栖大会丨首批阿里云计算巢认证合作伙伴获得授牌,阿里云与合作伙伴共筑云上生态
  6. linux nfs 修复文件,linux nfs Read-only file system
  7. 前端学习(2965):路由的参数传递
  8. mysql5.1win7_免安装版mysql5.1.57在win7下成功配置
  9. 配置信息的优化,类型转换器
  10. Kibana中的Coordinate Map地图报索引错误的问题
  11. Delphi单元文件基本结构
  12. lisp 河道水面线计算_鹤岗河道用铸铁轻型闸门厂家
  13. CCF NOI1118 序列第K小
  14. 强连通分量(Tarjan算法)
  15. IPv4与IPv6的区别
  16. android全局屏幕自动旋转,如何在Android中全局强制屏幕方向?
  17. 论文到底怎么降重才有效
  18. [云原生专题-41]:K8S - 核心概念 - Service业务的统一网关接口Ingress详解、安装、常见操作命令
  19. 自编真假探测游戏来了 好玩
  20. Git 使用的一些命令以及Git commit 注释格式

热门文章

  1. 常见问题_轴承零件加工常见问题?
  2. 今日讨论:时间紧,工作量太大,作为测试该怎么办?
  3. git21天打卡-day8 本地分支push到远程服务器
  4. jni 从c传递map到java_java_jni 本地调用接口DLL的编写样本,涉及数组传递,相关的 和C程序均已包括。 Develop 256万源代码下载- www.pudn.com...
  5. 如何在pycharm debug类似python -m的命令
  6. 解决ubuntu下不能mount windows 盘的问题
  7. GridLayout将布局管理器设置为三行一列
  8. mysql io 100_MySQL服务器 IO 100%的案例分析
  9. 减少访问量_Nginx服务器高性能优化轻松实现10万并发访问量
  10. 今年要如何准备?想去阿里/美团/头条做机器学习工程师