解读Vue组件注册方式


Posted in Vue.js onMay 15, 2021

概述

组件化的概念让前端页面开发有了更清晰的结构。

Vue 中的组件就是一个 Vue 的实例对象。因此,Vue 组件的构造选项和 new Vue() 方法构造 Vue 实例的构造选项是一样的,其可接收的构造选项都是一样的。除了 el 这样 根实例 特有的选项。但是,Vue 组件必须得是可以复用的,因此,就必须要求构造选项中的 data 选项必须是一个函数,该函数返回一个对象。

为什么 data 选项是个返回对象的函数就可以保证组件的可复用性呢?

因为无论是 new Vue() 的方式还是定义 Vue组件 的方式创建一个 Vue 实例,其执行的操作都是将构造选项中的各属性值直接赋值给新创建的 Vue 实例对象。组件复用就是 Vue 使用 相同的构造选项 构造出多个同名不同地址的 Vue 实例对象。如果 Vue 组件定义时的构造选项中的 data 选项是一个对象,那么在组件复用时,多个组件就会共用一个 data 数据对象,因为是直接将 data 对象的地址赋值给组件的 Vue 实例的。但如果组件定义时的 data 选项是一个函数的话,那么 Vue 根据构造选项创建组件时会执行该函数从而得到一个对象。这样一来,每次创建 Vue 实例时的 data 对象都是重新生成的,因此,多个组件都有各自的 data 数据对象,不会相互影响。

实际上,在组件注册时是在定义组件的构造选项,在组件使用时才真正创建对应的 Vue 组件实例。

1 、全局注册

全局注册的组件可以在 Vue 根实例和所有的子组件中使用。注册入口为Vue.component()函数,一次注册,随时使用,注册方式如下:

Vue.component('my-component-name',{ 
    options 
})

示例如下:

//main.js
//此示例是在 vue-cli 创建的项目,默认是非完整版vue,无法用 template 选项,因此使用 render 函数写组件内容。
Vue.component('all-test',{
  data(){
    return {
      x: '我是全局组件'
    }
  },
  render(h){
    return h('div',this.x)
  }
})

//全局注册的组件直接使用即可
//App.vue
<template>
  <div id="app">
    <all-test />
  </div>
</template>

2 、局部注册

局部注册是通过一个普通的 JavaScript 对象来定义组件。然后组件的命名和注册入口是在 Vue实例 构造选项中的 components 选项。

let component = { options }

//new Vue 创建的根元素 Vue 实例
new Vue({
    el: '#app'
    components: {
        'my-component-name': component
    }
})

//或注册 Vue组件 创建的 Vue 实例
export default {
    components: {
        'my-component-name': component
    }
}

示例如下:

//App.vue
<template>
  <div id="app">
    <all-test />
    <component-a />
    <component-b />
  </div>
</template>

<script>
let ComponentA = {
  data(){
    return {
      x: '我是局部组件 A'
    }
  },
  render(h){
    return h('div',this.x)
  }
}

export default {
  name: 'App',
  components: {
    'component-a': ComponentA,
    'component-b': {
        data(){
          return {
            x: '我是局部组件 B'
          }
        },
        render(h){
          return h('div',this.x)
        }
    } 
  }
}
</script>

3 、模块系统中局部注册

在使用了诸如 Babel 和 webpack 的模块系统中可以使用 import 和 export 的方式单独导入组件的构造选项对象 或者 导入对应构造选项的 *.vue 文件。

//c.js
export default {
    data(){
        return {
          x: '我是 c.js 文件单独导出的组件构造选项对象'
        }
      },
      render(h){
        return h('div',this.x)
      }
}

//D.vue
<template>
    <div>
        {{x}}
    </div>
</template>

<script>
export default {
    data(){
        return {
            x: '我是 D.vue 文件导出的组件'
        }
    }
}
</script>

//App.vue
<template>
  <div id="app">
    <C />
    <D />
  </div>
</template>

import C from './c.js'
import D from './components/D.vue'

export default {
  name: 'App',
  components: {
    C,
    D 
  }
}
</script>

以上就是解读Vue组件注册方式的详细内容,更多关于Vue组件注册方式的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
在Vue中使用mockjs代码实例
Nov 25 Vue.js
Vue实现简易购物车页面
Dec 30 Vue.js
jenkins自动构建发布vue项目的方法步骤
Jan 04 Vue.js
vue.js watch经常失效的场景与解决方案
Jan 07 Vue.js
vue 项目@change多个参数传值多个事件的操作
Jan 29 Vue.js
如何使用vue3打造一个物料库
May 08 Vue.js
Vue3.0 手写放大镜效果
Jul 25 Vue.js
vue使用Google Recaptcha验证的实现示例
Aug 23 Vue.js
vue选项卡切换的实现案例
Apr 11 Vue.js
vue elementUI表格控制对应列
Apr 13 Vue.js
vue使用watch监听属性变化
Apr 30 Vue.js
如何理解Vue简单状态管理之store模式
May 15 #Vue.js
Vue如何实现组件间通信
May 15 #Vue.js
详解Vue的sync修饰符
May 15 #Vue.js
深入理解Vue的数据响应式
May 15 #Vue.js
详解Vue的options
May 15 #Vue.js
vue实现无缝轮播效果(跑马灯)
May 14 #Vue.js
Vue接口封装的完整步骤记录
You might like
融入意大利的咖啡文化
2021/03/03 咖啡文化
PHP通过iconv将字符串从GBK转换为UTF8字符集
2011/07/18 PHP
高质量PHP代码的50个实用技巧必备(下)
2016/01/22 PHP
Zend Framework入门教程之Zend_Session会话操作详解
2016/12/08 PHP
js获取IP和PcName(IE)在vs中可用
2013/08/02 Javascript
100个不能错过的实用JS自定义函数
2014/03/05 Javascript
Angular Js文件上传之form-data
2015/08/28 Javascript
总结JavaScript中布尔操作符||与&amp;&amp;的使用技巧
2015/11/17 Javascript
prototype框架中美元符号$用法分析
2016/01/22 Javascript
jQuery siblings()用法实例详解
2016/04/26 Javascript
win系统下nodejs环境安装配置
2017/05/04 NodeJs
兼容浏览器的js事件绑定函数(详解)
2017/05/09 Javascript
微信小程序 侧滑删除(左滑删除)
2017/05/23 Javascript
详谈js模块化规范
2017/07/07 Javascript
利用Javascript开发一个二维周视图日历
2017/12/14 Javascript
详解Angular6.0使用路由步骤(共7步)
2018/06/29 Javascript
js与jquery获取input输入框中的值实例讲解
2020/02/27 jQuery
Python发送Email方法实例
2014/08/21 Python
总结Python编程中三条常用的技巧
2015/05/11 Python
Python中json格式数据的编码与解码方法详解
2016/07/01 Python
django使用图片延时加载引起后台404错误
2017/04/18 Python
Python实现针对给定字符串寻找最长非重复子串的方法
2018/04/21 Python
pycharm 实现显示project 选项卡的方法
2019/01/17 Python
在django中,关于session的通用设置方法
2019/08/06 Python
python 实现人和电脑猜拳的示例代码
2020/03/02 Python
python中有帮助函数吗
2020/06/19 Python
苹果美国官方商城:Apple美国
2016/08/24 全球购物
澳大利亚工具仓库:Tools Warehouse
2018/10/15 全球购物
Eagle Eyes Optics鹰眼光学:高性能太阳镜
2018/12/07 全球购物
.NET面试10题
2014/02/24 面试题
面向对象设计的原则是什么
2013/02/13 面试题
军训自我鉴定范文
2014/02/13 职场文书
2014年感恩母亲演讲稿
2014/05/27 职场文书
防邪知识进家庭活动方案
2014/08/26 职场文书
护理专业自我评价
2015/03/11 职场文书
廉洁自律准则学习心得体会
2016/01/13 职场文书