美文网首页Vue
Vue | 组件化 | 基本操作

Vue | 组件化 | 基本操作

作者: cemcoe | 来源:发表于2020-03-14 21:00 被阅读0次

来个目录:

  • 瞎掰组件概念
  • web components 是个什么东西
  • 用 web components 来写一个简单的组件 demo
  • Vue 中的组件化是一个怎样的流程
  • 局部组件 && 全局组件 || 父组件 && 子组件

作为前端工程化的重要一环,组件化在原生的实现上看上去不是很好。

那什么是组件化嘞?


工艺流程图部分

数据看不到,有点虚。不妨看一看上面的工艺流程图,组件就是上图的各种反应容器,本文主要实现各种罐的创建和使用,至于物料的运输,即各个组件间数据的传递,有空再填。

其实使用 Vue 创建一个应用大概就是上图的步骤,先将各个组件完成,接着连通物流(组件之间数据传递),同时可能还会监控物流的理化性质(监控数据类型),监控各个罐的状态(Vuex)。。。我编不下去了。大概就那么个意思。做饮料啥的总不能都莽到一个反应釜里吧。


组件化就是大事化小,将一个复杂的工程拆解成众多的小任务,再分配给众多小人物。

这样如果某个组件发生了问题,不至于影响整个工程。

はたらく細胞

在看 Vue 的组件化之前不妨先看看原生的实现方案。

这里就要提到 web components 了,至于它的概念,优缺点啥的不多介绍,若想了解直达 官网

这个东西支持使用原生的 js 来定义和使用组件。不用引入额外的文件。拎包开发。。。

直接看怎么用,一些要点:

  • 自定义组件 custom element 必须短线连接
  • 将定义的类和标签关联
  • 使用自定义的组件

一个简单的小栗子

<user-card></user-card>
<user-card></user-card>
<user-card></user-card>

<template id="userCardTemplate">
    <h1>cemcoe</h1>
</template>

<script>
    class UserCard extends HTMLElement {
        constructor() {
            super()

            const templateElem = document.querySelector("#userCardTemplate")
            const content = templateElem.content.cloneNode(true)
            this.appendChild(content)
        }
    }
    
    window.customElements.define("user-card", UserCard)
</script>

有点小复杂,来个指向图如下:


指向图

嗯,不出意外的话,网页上会显示三个字符串。

使用 web components 来使用组件大概就是这样的一个流程。

更多功能请自行探索。


下面来看一下 Vue 的组件化思想。

---具体代码如何写---
直接进入注册组件的流程

  • 创建组件构造器 Vue.extend()
  • 注册组件 Vue.component()
  • 使用组件

emm,是不是和 web components 很像?有点。具体的实现上可能有一些差异。

来看代码:

3. 使用组件
<div id="app">
    <my-cpn></my-cpn>
</div>
//---js----
// 1. 创建组件构造器对象
const cpnContructor = Vue.extend({
    template: `
    <div>
        <h1>我是cemcoe</h1>
        <p>我今年18岁</p>
        <p>嘤嘤嘤</p>
    </div>
    `
})
// 2.注册组件两个参数 标签名 构造器
Vue.component('my-cpn', cpnContructor)

然而,上面这种全局组件用的不多。


全局和局部就是字面意思,可以配合全局作用域和局部作用域理解。

开发中常用局部组件,将组件放到特定的实例下进行注册。

使用 components 字段:

// 1. 构造器
const cpnConstructor = Vue.extend({
   template: `
   <div><h1>cemcoe</h1></div>
   `
})
const app = new Vue({
   el: "#app",
   // 2. 注册局部组件,在特定实例中定义
   components: {
       cpn: cpnConstructor 
   }
}) 

来看另一对概念父组件和子组件,emm,还是字面意思,不多解析。

<div id="app">
    <cp2></cp2>    
</div>
// 创建组件
const cpnC1 = Vue.extend({
   template: `<div><h1>cem</h1></div>`
})
const cpnC2 = Vue.extend({
   template: `<div><h1>coe</h1><cp1></cp1></div>`,
   components: {
       cp1: cpnC1
   }
})
const app = new Vue({
   el: "#app",
   components: {
       cp2: cpnC2
   }
})

cp1 在 cp2 中注册,cp2 在 Vue 实例中注册,在 html 使用时只需添加 cp2 标签。cp2 是父组件,cp1 是子组件。


我想偷懒,下面来看语法糖:
---语法糖---

// 创建组件
// const cpnC1 = Vue.extend()
Vue.component('cp1', {
   template: `<div><h1>cem</h1></div>`
})

将构造器放入注册操作中,实际还是调用 extend。

嵌套太多,抽离。。。使用 template 标签定义模板。

<div id="app"> 
</div>
<template id="cpn">
    <div>
        <h1>cemcoe</h1>
    </div>
</template>
// ---data---
Vue.component('cp1', {
   template: '#cpn'
})

大概就是这样了。


这里的 web components 和 Vue 的关系,其实和 CSS | CSS Variable | CSS变量 与那些 less sass 预处理器的关系一样一样的。

如果搞得完善的话,肯定是原生的 web components 性能肯定是刚刚的,期待ing。

最后来一个 web components && Vue components 的对比图。


web components && Vue components

每天一遍提醒自己增强自身抵抗力,多喝热水,注意身体。

这里是 cemcoe 的连载 化学小子的前端实验册 的第 21 篇,欢迎关注。

相关文章

  • Vue | 组件化 | 基本操作

    来个目录: 瞎掰组件概念 web components 是个什么东西 用 web components 来写一个简...

  • Vue磨刀嚯嚯

    Vue开发风格——传统方法应用vue.js Vue开发风格——单个组件式 组件 基本操作 创建一个组件构造器 注册...

  • Vue单文件组件开发的基本套路--以常用的Modal模态框组件开

    在实际开发工程化vue项目时,基本都是使用单文件组件形式,即每个.vue文件都是一个组件。最基本的就是UI组件了,...

  • vue面试

    1、vue优点 答:vue轻量级框架,只关注视图层,易于理解学习;双向数据绑定,数据操作方面简单; 组件化操作,...

  • Vue --- 组件化

    组件化让代码更加方便组织和管理,并且扩展性也更强 组件化基本使用过程: 创建组件构造器:cpnC = Vue.ex...

  • Vue组件和父子组件

    【一】Vue组件化 创建组件构造器对象Vue.extend() 创建组件构造器const cpnc = Vue.e...

  • Vue组件

    Vue 组件的基本写法 一、其实Vue组件和Vue的界面写法很基本一样,主要区别在于子组件和父组件之间的通信问题,...

  • 组件化(第一篇)

    组件化 git 常用操作指令 cocoapods的基本使用 cocoapods本地私有库 一、git 常用操作指令...

  • vue原理

    组件化 数据驱动视图传统组件,只是静态的渲染,更行还是依赖于操作DOM数据驱动视图--Vue(MVVM)数据驱动视...

  • Vue.js的组件化思想 —上

    一、Vue中的组件 Vue视图层的灵魂 — 组件化 组件(Component)是 Vue.js 最强大的功能之一...

网友评论

    本文标题:Vue | 组件化 | 基本操作

    本文链接:https://www.haomeiwen.com/subject/kughshtx.html