什么是组件

用面向对象的思维去理解Vue组件,可以将所有的事物都抽象为对象,而类或者说是组件,都具有属性和操作。

如抽取人类为组件,其基本的属性有姓名、年龄、国籍;基本的方法有吃饭、睡觉、跑步等。

  1. <script>
  2. export default {
  3. name: 'person',
  4. props: {
  5. name: {
  6. type: String,
  7. required: false,
  8. default: '无名氏'
  9. },
  10. age: {
  11. type: Number,
  12. required: false,
  13. default: 0
  14. },
  15. country: {
  16. type: String,
  17. required: false,
  18. default: '地球人'
  19. }
  20. },
  21. methods: {
  22. eat() {
  23. consloe.log('吃饭')
  24. },
  25. sleep() {
  26. consloe.log('睡觉')
  27. },
  28. run() {
  29. consloe.log('跑步')
  30. }
  31. }
  32. }
  33. </script>

在面向对象中,构造函数可以为类初始化全局变量,所以这种方式同样可以用在组件中

  1. <person :age="20" :name="'小明'" :country="'中国人'"></person>

组件封装了数据以及操作,有进则有出,我们不用关心组件内发生了什么,我们只需要结果和呈现出来的效果如何。

自定义事件

外界不可以直接访问使用或访问组件的属性,该如何做?

使用$emit自定义事件,可以实现外界获取组件属性。

  1. <template>
  2. ...
  3. <button @click="handleClick">点击</button>
  4. </template>
  5. <script>
  6. export default {
  7. name: 'person',
  8. methods: {
  9. handleClick() {
  10. this.$emit('getPerson', {
  11. age: this.age,
  12. name: this.name,
  13. country: this.country
  14. })
  15. }
  16. }
  17. }
  18. </script>

外界调用组件时添加自定义函数@getPersonv-on:click="getPerson"

  1. <template>
  2. <div>
  3. <person :age="20" :name="'小明'" :country="'中国人'" @getPerson="getPerson"></person>
  4. </div>
  5. </template>
  6. <script>
  7. export default {
  8. name: 'test',
  9. methods: {
  10. getPerson(info) {
  11. consloe.log(info)
  12. }
  13. }
  14. }
  15. </script>

实际案例

在网页开发中,你可能会用到标签,而你可能会想到标签不可能在一个页面使用一次,可能是多次使用到。你还可能会想到因为不同的情况而自定义一些宽度、高度和颜色。

所以可以将标签相关的HTML代码和CSS封装到组件中,对外,我们暴露width、height和type参数。在使用时,因为不同的情况而需要自定义,那么传递参数即可。

  1. <template>
  2. <view
  3. :style="{ width: width, height: height }"
  4. :class="['owl-tag-' + type]"
  5. class="owl-tag text-xs flex align-center justify-center"
  6. >
  7. <slot></slot>
  8. </view>
  9. </template>
  10. <script>
  11. name: 'owl-tag',
  12. props: {
  13. // 可传入有效值为 primary | gray
  14. type: {
  15. type: String,
  16. default: 'primary'
  17. },
  18. width: {
  19. type: String,
  20. required: false
  21. },
  22. height: {
  23. type: String,
  24. required: false
  25. }
  26. }
  27. </script>
  28. <style>
  29. .owl-tag {
  30. border-radius: 8rpx;
  31. padding: 6rpx 10rpx;
  32. }
  33. .owl-tag-primary {
  34. color: white;
  35. background-color: #87cefa;
  36. }
  37. .owl-tag-gray {
  38. color: #81868a;
  39. background-color: #f0f1f5;
  40. }
  41. </style>

这些工作做好了,一个组件就被我们定义好了。想用就调用,想改就传参,这就是组件的好处。

  1. <template>
  2. <owl-tag
  3. :type="'primary'"
  4. :height="'45rpx'"
  5. :width="'120rpx'"
  6. >
  7. 官方帖
  8. </owl-tag>
  9. </template>

改变type的值为gray,呈现的效果如下:

尝试用面向对象思维理解Vue组件的更多相关文章

  1. 不一样的角度理解Vue组件

    什么是组件 以Java.C#等面向对象编程语言的角度去理解Vue组件,能够发现组件和面向对象编程的方式和风格很相似.一切事物皆为对象,通过面向对象的方式,将现实世界的事物抽象成对象,现实世界中的关系抽 ...

  2. 深入理解 Vue 组件

    深入理解 Vue 组件 组件使用中的细节点 使用 is 属性,解决组件使用中的bug问题 <!DOCTYPE html> <html lang="en"> ...

  3. 深入理解Vue组件3大核心概念

    摘要: 搞懂Vue组件! 作者:浪里行舟 原文:详解vue组件三大核心概念 Fundebug经授权转载,版权归原作者所有. 前言 本文主要介绍属性.事件和插槽这三个vue基础概念.使用方法及其容易被忽 ...

  4. 深入理解--VUE组件中数据的存放以及为什么组件中的data必需是函数

    1.组件中数据的存放 ***(重点)组件是一个单独模块的封装:这个模块有自己的HTML模板,也有data属性. 只是这个data属性必需是一个函数,而这个函数返回一个对象,这个对象里面存放着组件的数据 ...

  5. 怎样理解 Vue 组件中 data 必须为函数 ?

    组件意在 复用 , 若为 对象, 则会相互干扰. 且 Vue 不允许此事发生, 规定必须为函数, 否则报错. 原理如下 对象 // 模拟创建组件 var Component= function() { ...

  6. 第四章、深入理解vue组件

    4-1.使用组件的细节 a.使用is解决html出现bug 如下 table下面应该为tr,所以页面渲染的时候没有找到tr是有问题的,所以是有小bug,所以table中必须是tr b.改上面bug,t ...

  7. 深刻理解Vue中的组件

    转载:https://segmentfault.com/a/1190000010527064 --20更新: Vue2.6已经更新了关于内容插槽和作用域插槽的API和用法,为了不误导大家,我把插槽的内 ...

  8. 深入理解Vue父子组件通讯的属性和事件

    在html中使用元素,会有一些属性,如class,id,还可以绑定事件,自定义组件也是可以的.当在一个组件中,使用了其他自定义组件时,就会利用子组件的属性和事件来和父组件进行数据交流. 父子组件之间的 ...

  9. 聊聊vue组件开发的“边界把握”和“状态驱动”

    vue有着完整的组件化开发机制,但是官网只给了开发的方式,对于开发规范以及组件化开发的最佳实践,还需要我们来摸索.本文就平时开发中的经验来谈谈“把握边界”和“状态驱动”这两个话题. 边界把握 边界把握 ...

随机推荐

  1. python-dict和list常用方法

    1 # *********-list-********* 2 # 创建一个list 3 list1 = [1, 2, '力气,', 'afd'] 4 print(type(list1)) 5 prin ...

  2. Linux硬件与服务

    Linux硬件与服务 Linux Linux硬件与服务 1 Linux磁盘管理与磁盘结构 磁盘的组成结构 盘片的逻辑结构 分区格式化 实例说明: 2 磁盘管理之Block.iNode. super.s ...

  3. 更换介质:请把标有Debian ... 的盘片插入驱动器

    Debian安装软件报错如下: 更换介质:请把标有 "Debian GNU/Linux 10.8.0 _Buster_ - Official amd64 DVD Binary-1 20210 ...

  4. Centos7使用mail命令发送邮件

    以配置outlook邮箱(微软邮箱)为例 一.配置mail邮箱账号密码 [root@bogon log]# tail -n 8 /etc/mail.rc set from=bp**@outlook.c ...

  5. SSM整合(ForestBlog为例)

    SSM整合(ForestBlog为例) 原版本github地址 :https://github.com/saysky/ForestBlog 文中版本地址:https://github.com/Yans ...

  6. Linux_网络进阶管理

    一.链路聚合 1.什么是链路聚合? 网卡的链路聚合就是将多块网卡连接起来,当-块网卡损坏,网络依旧可以正常运行,可以有效的防止因为网卡损坏带来的损失,同时也可以提高网络访问速度. 2.链路聚合方式: ...

  7. Python基础之PyCharm快捷键大全

    Pycharm中打开Help->Keymap Reference可查看默认快捷键帮助文档 一.编辑(Editing) Ctrl + Space 基本的代码完成(类.方法.属性) Ctrl + A ...

  8. 用virtualenv建立Python独立开发环境

    1.用pip安装virtualenv sudo apt-get install python-virtualenv 2.1 创建python2的虚拟环境,进入要创建虚拟环境的目录下,我是放在/home ...

  9. 『言善信』Fiddler工具 — 4、Fiddler面布局详解【工具栏】

    目录 (一)工具栏详细介绍 1.第一组工具: 2.第二组工具: 3.第三组工具: 4.第四组工具: (二)工具栏使用说明 1.Fiddler修改代理端口: 2.过滤Tunnel to...443请求链 ...

  10. 《MySQL面试小抄》索引考点一面总结

    <MySQL面试小抄>索引考点一面总结 我是肥哥,一名不专业的面试官! 我是囧囧,一名积极找工作的小菜鸟 囧囧表示:面试最怕的就是面试官问的知识点太笼统,自己无法快速定位到关键问题点!!! ...