VUE 组件

567 阅读3分钟

本笔记是看b站codewhy老师的视频做的笔记,大家可以一起学习,个人觉得他讲课很好,不光可以听到新知识,还可以复习旧知识,简直美滋滋。视频地址是

www.bilibili.com/video/av595…

组件化

什么是组件化

组件化
一个大的项目分成一小块一小块的。一块一块的实现。

vue的组件化

vue组件化
! 尽可能的用组件化的思想开发

如何使用组件化

  1. 创建组件构造器 :调用Vue.extend()方法创建构造器

2. 注册组件: 调用Vue.component()方法 3.
3. 使用组件 直接在html中写就行了

es6补充

引号可以换成`,这样定义的变量可以换行。

const a= `aa
bb`

全剧组件 和 局部组件

以上就是全局组件的注册 以下是局部组件的注册👇

这个组件就只能在vue实例中显示。也就是在

父组件和子组件的区分

vue实例也可以当做组件,一般叫做root组件。

  • 子组件在父组件注册的时候,不能在全局使用。只能在父组件中使用,想要使用必须注册。

语法糖

组件模板抽离

  1. 第一种写法,在上边写个script标签,类型是x-tempate,然后注册的时候关联他的id。
  2. 第二种写法:直接写tempalate标签,然后关联id就行了

组件访问vue实例中的数据

  • 组件不能访问组件中的数据
  • 要在组件注册的时候,放在data函数中,这是一个函数,和vue实例中的不同,

组件中data为什么必须是个函数?

因为函数的每次调用都会在内存中新增一个,这样这个组件每次调用的时候都是一个新的相互独立的, 例如一个计数器,你在主页调用的时候是计数到2了,如果data不是函数的话,子页面也都是2,就起不到单独计数的功能了。

父子组件之间的通讯

父组件向子组件传递 props

在注册组件的时候写一个props,然后在调用的时候写v-bind绑定一下,之后就可以取到数据了。

props的另一种写法:

如果类型是对象或者是数组的时候,默认值必须是函数。

props 驼峰命名的坑

驼峰命名要改成-

子组件传给父组件

常用的方法是,子组件传递一个事件给父组件,这时候就需要一个自定义事件来完成,

之前学的v-on只学了监听dom事件,其实他还可以监听自定义事件,

自定义事件的流程,

  • 子组件中,通过$emit()来触发事件,
  • 父组件中,通过v-on来监听子组件事件。

知识回顾

父子组件数据绑定(v-model)

错误示范:当我们绑定到父组件的props时,虽然可以达到双向绑定的效果,但是会报错,因为父组件的内容应该是由后台数据决定的,现在绑定了子组件,很容易就错乱了。 正确:在父组件的components中写个data函数,返回一下this.props中的值

显示如下:

此时只是dmessage改了,但是父组件中的data中的message没有改变,想要改变父组件中data中的message的值👇

父子组件的访问方式

父组件访问子组件

有两种方法:$children $refs (reference引用)

  1. $children
    $children这种方法要通过下标值来拿东西,如果有新插入的cpn他的下标就改变了,所以用的比较少。
  2. $refs 这种方法是对象类型,默认是空对象。 用这种方法就可以知道指定的是哪个cpn,就算中途再加几个cpn也不用担心。

子访问父

$parent就是

这样用,因为耦合度太高(我们希望组件可以复用,但是当我们拿这个组件到其他地方的时候就不能用了,就很难受—),基本不用。

插槽slot

组件的插槽是让我们的组件更具有扩展性

例如:第一次使用模板的时候,我想显示一个button 第二个显示 span

这时候我们就可以预留一个<slot><slot>

如何封装这些组件呢?

基本用法

1. 在模板中加上slot标签
2. `<slot><p>这是默认值</p></slot>`可以设置默认值
3. 用的时候有多个值就会都放到slot中

具名插槽

补充 编译的作用域

虽然调用的是cpn但是他是属于app里的,就相当于把<cpn></cpn>当做了#app中的一个普通的标签。所以用的isTrue是vue中的data

作用域插槽

目的:父组件替换插槽标签,内容由子组件提供 案例:模板中是abcde是li标签,想改成a-b-c-d-e的。