博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vue-组件基础
阅读量:6189 次
发布时间:2019-06-21

本文共 2267 字,大约阅读时间需要 7 分钟。

基本参考了官网,按照自己的思路理一理。

1,基本示例

  • 我们可以在一个通过 new Vue 创建的 Vue 根实例中,把这个组件作为自定义元素来使用:
复制代码
// 定义一个名为 button-counter 的新组件Vue.component('button-counter', {  data: function () {    return {      count: 0    }  },  template: ''})复制代码
new Vue({ el: '#components-demo' })复制代码

2,组件的复用

2.1,组件的特性

  1. 组件是可任意次数复用的 Vue 实例
  2. 组件可以作为自定义元素来使用
    • 每用一次组件,就会有一个它的新实例被创建。
    • 每个组件都会各自独立维护它的 data等实例属性

2.2,data是函数

  • 为了保证,每个实例可以维护一份被返回对象的独立的拷贝:
data: function () {  return {    count: 0  }}复制代码

3,组件的组织

  • 通常,会以一棵嵌套的组件树的形式来组织

4,组件注册类型

4.1,全局注册

Vue.component('my-component', {  // ... options ...})复制代码
  1. 全局注册,意味着在注册之后可以用在,任何新创建的 Vue 根实例 (new Vue) 的模板中。比如:
Vue.component('component-a', { /* ... */ })Vue.component('component-b', { /* ... */ })Vue.component('component-c', { /* ... */ })new Vue({ el: '#app' })复制代码
复制代码
  1. 任何新创建的 Vue 根实例 (new Vue) 的模板,指:
  • 因为,在开发中,一般都是以App文件作为根模板,即根实例的模板,其他的都是其后代模板。如下代码所示:
import Vue from 'vue'import App from './App'import router from './router'/* eslint-disable no-new */new Vue({  el: '#app',  router,  components: { App },  template: '
'})复制代码
  • 所以,所有的后代模板都可以使用全局注册的组件。
  • 所以,全局注册的组件,在各自的内部,也可以互相使用

4.2,局部注册

  • 全局注册的缺陷:

全局注册的组件意味着即便你已经不再使用一个组件了,它仍然会被包含在你最终的构建结果中。这造成了下载的 JavaScript 无谓的增加。

在这些情况下,可以通过一个普通的 JavaScript 对象来定义组件:

  • 这些 JavaScript 对象,和在模块中 export default 出的对象一样的。
var ComponentA = { /* ... */ }var ComponentB = { /* ... */ }var ComponentC = { /* ... */ }复制代码
new Vue({  el: '#app'  components: {    'component-a': ComponentA,    'component-b': ComponentB  }})复制代码
  • 局部注册的组件,在其它同时注册的局部组件中不可用!

ComponentBComponentA中是不可用的。

这样就可以实现了:

var ComponentB = {  components: {    'component-a': ComponentA  },  // ...}复制代码

这是一般情况下写的,都是通过 Babelwebpack 使用 ES6 模块

  • 在某组件中,局部注册 ComponentA
import ComponentA from './ComponentA.vue'export default {  components: {    ComponentA  },  // ...}复制代码

5,模块系统

5.1,在模块系统中,局部注册

这就是一般在项目中得main.js文件:

import Vue from 'vue'import App from './App'import router from './router'/* eslint-disable no-new */new Vue({  el: '#app',  router,  components: { App },  template: '
'})复制代码
  • components属性,其属性值是一个对象。这样的书写方式,就代表注册局部组件
  • template,表示要使用的模板,可以使用引入的,也可以直接写html标签。

5.2,基础组件的自动化全局注册

这里主要想说的是,引入图片的方法。关于webpack的require.context()

-- 待续

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

你可能感兴趣的文章
笨方法学习Python(1-10)
查看>>
在windows下配置apache以cgi方式支持python
查看>>
mysql的安装
查看>>
嵌入式linux 项目开发(一)——CGIC编程
查看>>
Distributed Configuration Management Platform(分布式配置管理平台)
查看>>
RabbitMQ学习总结(一)——基础概念详细介绍
查看>>
在11g中使用ASM功能实现两个存储做镜像的方法
查看>>
Oracle 服务器端客户端字符集设置对应用程序的影响
查看>>
写给面试官的话
查看>>
MCQ消息丢失排查
查看>>
U盘安装Windows7+ubuntu 独立双系统
查看>>
Access restriction: Java eclipse中报错
查看>>
控制器内存端口全面升级 IBM发布第三代XIV
查看>>
搭建Nginx + Memcached + Tomcat 集群记录
查看>>
第二十一章 法律法规与标准规范
查看>>
[Java并发编程]-线程的六种状态及其状态转换
查看>>
我的友情链接
查看>>
全栈运维--学习方向
查看>>
Apache 构建FTP 坚持就是胜利!
查看>>
最新、最全、最准确的手机号正则表达式
查看>>