浅探 Vue 组件化思路

栏目: JavaScript · 发布时间: 5年前

内容简介:腾讯DeepOcean原创文章:就在前几个月,Vue star 数突破了 100k,正式超越 React。都说前端是个更新迭代飞快的领域,前端框架的演进也越来越激烈,以至于在技术社区里总看到有人求饶:“求不要更新了,老子学不动了”。

腾讯DeepOcean原创文章: dopro.io/explore-vue…

就在前几个月,Vue star 数突破了 100k,正式超越 React。

一、扯点家常

都说前端是个更新迭代飞快的领域,前端框架的演进也越来越激烈,以至于在技术社区里总看到有人求饶:“求不要更新了,老子学不动了”。

在过去的好多些年,jQuery 在前端领域都处于统治地位,在众多框架中脱颖而出,很多写惯了 jQuery 语法的开发者们,都发现再也回不去写原生 JS 了。随着时间的发展,也出现了各式各样的优秀框架,难免不同框架的粉丝也会把不同框架拿来对比,甚至互掐。说说今日的主角,Vue,在近几年也是非常火的一个框架。对于初学者来说,Vue 上手的成本真的很低了,易用度非常高,并且因为是国内开发者开发的,文档都是中文,国内大批量的公司都在使用,也导致了 Vue 的增速特别快。

不过也正是有不同框架的更新迭代,相互竞争,才创造一个越来越好的前端世界。正如 Vue 开发者在 twitter 发布的一条信息:

浅探 Vue 组件化思路

二、初入 Vue 大门

1. 什么是 Vue?

Vue 是一套用于构建用户界面的渐进式框架。它有着如下特点:

  • 渐进式框架,采用自底向上增量开发设计
  • 模版双向绑定机制
  • 利用指令(directive)对 DOM 进行封装
  • 组件化设计思想
浅探 Vue 组件化思路

Vue 的组件化将 UI 页面分割为若干组件进行组合和嵌套

2. 快速上手 Vue

工欲善其身,必先利其器。

无论我们学习哪种框架,搭建环境是必经之路。Vue 提供了一个官方的 CLI,为单页面应用快速搭建繁杂的脚手架。当然,任何的前提都是首先你了解了 Vue 相关的概念,不然新手一上来搭建 Vue-cli,看到里面牵扯到的 webpack、npm、nodejs等等概念,也是会一脸懵逼,很容易有从入门到放弃的想法的。

在搭建 Vue-cli 这点上,我们不妨直接站在巨人的肩膀上,这里有一篇带大家快速开启第一个 Vue 页面的教程,非常推荐: juejin.im/entry/58f48…

三、Vue 组件化

天下武功,唯快不破。

组件化的好处不用一一细说大家都知道了,组件是 Vue.js 最强大的功能之一,让我们用独立可复用的小组件来构建大型应用,开发效率更快更敏捷。为了更好地复用,这里以建立弹窗组件为实例,谈谈如何建立一个项目的组件库。

1. 组件库结构

  1. qqcartoon-ui // 组件库名字复制代码

  2. ├── index.js // 组件文件复制代码

  3. ├── aa1 // 各个组件包复制代码

  4. ├── bb1复制代码

  5. ├── dialog 复制代码

  6. ├── index.js // 组件注册复制代码

  7. ├── src复制代码

  8. ├── index.scss // 组件样式复制代码

  9. ├── index.vue // 组件结构 复制代码

  10. ├──复制代码

  11. └── ... 复制代码

一般在 Vue 里,我们会把组件写在 components 里,但是为了建立一个可以多个项目共用的组件库,这里重新命名,如 qqcartoon-ui 。

  • index.js: 收录了组件库里各个组件,以作为实例引用的入口。
  1. import UIDialog from './dialog/index'复制代码

  2. import UIA from './aa1/index'复制代码

  3. import UIB from './bb1/index'复制代码

  4. 复制代码

  5. export {复制代码

  6.  UIDialog,复制代码

  7.  UIA,复制代码

  8.  UIB复制代码

  9. }复制代码

  •  dialog/index.js: 完成组件注册。
  1. import UIDialog from './src/index';复制代码

  2. 复制代码

  3. UIDialog.install = function(Vue){复制代码

  4.    Vue.component(UIDialog.name,UIDialog);复制代码

  5. };复制代码

  6. 复制代码

  7. export default UIDialog;复制代码

  • dialog/index.scss: 组件样式。
  1. .ui-dialog {复制代码

  2.    position: fixed;复制代码

  3.    top: 0px;复制代码

  4.    left: 0px;复制代码

  5.    width: 100%;复制代码

  6.    height: 100%;复制代码

  7.    z-index: 9999;复制代码

  8.    -webkit-box-orient: horizontal;复制代码

  9.    -webkit-box-pack: center;复制代码

  10.    -webkit-box-align: center;复制代码

  11.    background: rgba(0,0,0,0.4);复制代码

  12. }复制代码

  13. ...... 省略其余样式代码复制代码

  • dialog/index.vue: 组件结构。组件的模版只能有一个根元素。
  1. <template>复制代码

  2.    <div class="ui-dialog" :style="{diaplay:show?'-webkit-box':'none'}">复制代码

  3.        <div class="ui-dialog-cnt">复制代码

  4.            <div class="ui-dialog-bd">复制代码

  5.                <h4>{{title}}</h4>复制代码

  6.            </div>复制代码

  7.        </div>复制代码

  8.    </div>复制代码

  9. </template>复制代码

  10. <style lang="scss" src="./index.scss"></style>复制代码

  11. <script>复制代码

  12.    export default {复制代码

  13.        name:'UIDialog',复制代码

  14.        props:{复制代码

  15.            show:{复制代码

  16.                type:Boolean,复制代码

  17.                default:false复制代码

  18.            },复制代码

  19.            title:{复制代码

  20.                type:String,复制代码

  21.                default:"这是标题"复制代码

  22.            }复制代码

  23.        }复制代码

  24.    }复制代码

  25. </script>复制代码

2. 组件的引用

在项目的根目录下,你可以找到一个 js 文件,可能它的命名是 main.js。在里面引入你需要的组件名。

import {UIDialog} from '@/qqcartoon-ui/packages/index'复制代码
Vue.use(UIDialog)复制代码

这个时候,弹窗组件就已经引用到项目中了,这时候只需要最后一步,在项目 vue 文件里使用:

<UIDialog :show="true"></UIDialog>复制代码

这个时候编译代码,就可以在浏览器看到最终的弹窗效果啦!

四、Vue 组件规范化

没有规矩,难成方圆。

要搭建一个好的组件库,应该一开始要定下一些通用的规矩。

1. 命名

组件的命名应该与业务无关,而是根据组件实现的功能来进行命名。同时,也应该与业务文件命名区分开来,可以加一些特有的前缀。例如在这里,所有组件前缀都添加 “UI” ,弹窗组件命名为 “UIDialog”。

2. 实现

可复用组件实现的应该是通用的功能,它实现的应该是:

  • UI 的展示
  • 与用户的交互(事件)
  • 动画效果

可复用组件应尽量减少对外部条件的依赖。一个独立的功能组件,最好不要拆成若干个小组件来实现。

3. 理解组件属性和事件

在 Vue 组件里,状态称为 props,事件称为 events,片段称为 slots。

  • props 允许外部环境传递数据给组件。
通过 props 来声明自己的属性。可以通过上文 dialog/index.vue 代码进行理解。它的 type 即类型有:String、Number、Boolean、Array、Object、Date、Function、Symbol。
  • events 允许组件出发外部环境的副作用。

可以通过用 v-on 来监听 Dom 事件。语法:v-on:事件类型=“事件处理函数名”。缩写为: @事件类型=“事件处理函数名”。

一个直观的例子是:

  1. <ul id="app">复制代码

  2.    <li v-on:click = "clickMe">单击事件</li>复制代码

  3. </ul>
    复制代码


  4. 复制代码

  5. <script>
    复制代码

  6.    var app = new Vue({复制代码

  7.    el : '#app',复制代码

  8.    data : {复制代码

  9.    },复制代码

  10.    methods : {复制代码

  11.        clickMe : function(){复制代码

  12.            console.log('单击事件发生');复制代码

  13.        }复制代码

  14.    }复制代码

  15. })
    复制代码

  16. </script>
    复制代码

  • slot 允许外部环境将额外的内容组合在组件中。
slot 相当于在子组件设置了一个地方,当调用它的时候,往它的开闭标签之间放了东西,那么它就把这些东西放到 slot 中。通过 slot 我们调用组件的时候就可以根据需要改变组件的实际内容。

例如子组件模版:

  1. <div>复制代码

  2.  <h2>我是子组件的标题</h2>复制代码

  3.  <slot>复制代码

  4.    只有在没有要分发的内容时才会显示。复制代码

  5.  </slot>复制代码

  6. </div>复制代码

父组件模版:

  1. <div>复制代码

  2.  <h1>我是父组件的标题</h1>复制代码

  3.  <my-component>复制代码

  4.    <p>这是一些初始内容</p>复制代码

  5.  </my-component>复制代码

  6. </div>复制代码

渲染结果:

  1. <div>复制代码

  2.  <h1>我是父组件的标题</h1>复制代码

  3.  <div>复制代码

  4.    <h2>我是子组件的标题</h2>复制代码

  5.    <p>这是一些初始内容</p>复制代码

  6.  </div>复制代码

  7. </div>复制代码

五、总结

组件,是一个具有一定功能,且不同组件间功能相对独立的模块。组件可以是一个按钮、一个输入框、一个视频播放器等等。打造可复用的组件,应该具备高内聚、低耦合的特点。本文带大家走进 Vue 组件化的世界,要想真正成为 Vue 头号玩家,还是要多实操练习,在项目中不断思考。

欢迎关注"腾讯DeepOcean"微信公众号,每周为你推送前端、人工智能、SEO/ASO等领域相关的原创优质技术文章:

看小编搬运这么辛苦,关注一个呗:)

浅探 Vue 组件化思路

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Hit Refresh

Hit Refresh

Satya Nadella、Greg Shaw / HarperBusiness / 2017-9-26 / USD 20.37

Hit Refresh is about individual change, about the transformation happening inside of Microsoft and the technology that will soon impact all of our lives—the arrival of the most exciting and disruptive......一起来看看 《Hit Refresh》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

MD5 加密
MD5 加密

MD5 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具