Vue(九)——组件(一)基础介绍、全局注册、单向数据流
组件
基础介绍
参考:Vue 组件_哔哩哔哩
- 组件本质上是可复用的
Vue实例,所以在内部同样有data,methods等属性 - 区别是:没有挂载的声明,不存在el这样的挂载选项;
template——定义挂载Dom,也可以理解为设置组件结构,最终被引入根实例
注意:template定义的结构只能有一个根元素(即所有的内容都包含在一个Dom元素里)
props——自定义组件的属性的数组,方便其他组件传值,类似接口的的形参,用来接收数据
data——组件里的data要封装在一个方法里,是因为要区分全局的变量的定义,确保组件定义的变量只能在组件内部调用
用途
- 用于封装页面的部分功能,将功能的结构、样式、逻辑代码封装成一个整体
- 提高功能的复用性、可维护性,更好专注业务逻辑
形式
通过组件名作为Html自定义标签名
普通Html标签
全局注册
- 全局注册的组件在注册后可用于任意实例或组件里
- 全局注册必须设置在根
Vue实例创建之前
组件命名规则
定义有两种规则
- kebab-case:
my-component - PascalCase:
MyComponent
Vue.component('MyCom',{/*选项对象*/});
Vue.component('my—com',{/*选项对象*/});
应用规则
在Dom里只能采用kebab-case: ' my-component'
Demo:
普通Html标签
Vue.component('MyCom',{
template:`这里是结构最简单的组件
`
});
单向数据流
-
父子间组件的所有prop都是单向下行绑定的。包含两层含义
- 传值只能父组件向子组件传值
- 子组件的变化不能反向影响父组件的数据
父组件向子组件传值Demo
-
如果子组件要更改prop参数接收到的数据,应当存储在data中后操作
-
如果prop为对象或者数组时,子组件操作会影响父组件的状态。
因为当prop为对象或者数组时,传递的是对象或者数组的引用,所以父子组件操作的引用指向的是同一对象或数组,任一一方改变都会真实改变这个对象或者数组的值
{{student.sname}}:{{student.age}}
效果图:
