Vue组件化编程

ppgo8 于 2023-06-17 发布

Vue组件化编程

模块与组件、模块化与组件化

模块

前端世界里模块就是指的JS模块。

组件

image-20230617133125849

模块化

应用中的JS代码太多,所以把JS拆写成各个JS文件(按照一定规则)。

当应用中的JS代码都是用js模块编写的,那么这个应用就是模块化应用

组件化

当应用中的功能都是用组件的方式编写的,那么这个应用就是一个组件化应用

模块化、组件化对比

非单文件组件

image-20230617134334267

基本使用

使用组件的三个步骤:

  1. 定义组件

    创建了组件,返回VueComponent构造函数

  2. 注册组件

    在父组件中import导入组件,之后可以局部注册或者全局注册

  3. 使用组件

    tempalte中编写组件标签,返回组件实例

定义组件

注册组件

编写组件标签

组件命名注意点

image-20230617154404620

组件中使用name属性可以设置在Vue开发者工具中显示的名称

下列代码中 在网页里面的Vue显示的名称为Atguigu

image-20230617154932697

可以写单标签,自闭和。但是这种得在脚手架环境下

定义组件可以直接写对象花括号的形式,不写Vue.extend(options)

直接写成const a = options的形式,但是Vue在底层会用Vue.extend包裹

组件的嵌套

image-20230617162556839

组件注册给谁,就在谁的components属性里面写创建的组件。同时,就在谁的HTML结构中写组件名的标签。

注册给了谁,谁就是父亲。

image-20230617162747299

VueComponent

image-20230617165028464

第三点很重要,对后面的影响很大。

每次调用Vue.extend,返回的VueComponent都是在内存中不同空间的,

二者返回的不是一个

下面的图是错的,二者指向的都是自己调用Vue.extend返回的新的VueComponet函数,只是名字相同,但是组件指向的不同内存空间、

image-20230617165222117

正确的写法

image-20230617165521794

VC的实例对象受vm管理,挂在到vm的$children

如果vc实例还有子组件,那么继续挂在到vm的$children下的$children上

重要的内置联系

vm和vc并不相等

vc里面的data必须是函数,这样可以每次返回对象的独立拷贝

image-20230617201846124

黄色的线强制的将让VueCompoenent构造函数的原型对象的__proto__指向Vue的原型对象。

基础:想学会这个必须有原型基础

image-20230617195740179

只要是对象就有__proto__,指向构造函数的原型对象,

原型对象也是一个对象,会有__proto__属性,继续向上指,指向Object的原型对象

实例的隐式原型属性永远指向自己缔造者的原型对象。

// // 创建一个Demo实例对象
const d = new Demo()
// 函数的prototype和实例的__proto__指向同一个同喜。
console.log(Demo.prototype)  // 显示原型属性
console.log(d.__proto__)     // 隐式原型属性

这么做的目的?

image-20230617202042788

单文件组件

组件命名方法

  • 一个单词:1.小写.vue 2.第一个单词大写.vue
  • 多个单词:1.单词全部小写,用连字符连接 2.大驼峰

单文件组件基本结构

<template>
  <!-- 组件结构 -->
  <div></div>
</template>

<script>
// 组件交互相关代码
</script>

<style>
/* 组件样式代码 */
</style>

注意: