VUE学习笔记:组件化开发
Vue CLI的安装
学习VUE组件化开发之前,先了解一下VUE CLI,工欲善其事必先利其器嘛
官网地址
首先需要一个node.js环境,然后安装Vue CLI
1 | npm install -g @vue/cli |
之后就可以通过指令来创建vue项目了
1 | vue create project |
VUE CLI还支持可视化创建项目,实测巨卡无比,这里就不展开介绍了
输入创建项目命令之后,就可以创建工程,根据需求勾选对应选项
创建完毕之后,进入对应的文件夹,然后运行serve,就可以在页面上看到这个项目
1 | cd project |
创建好的项目目录结构如图所示
其中node_modules文件夹放的是插件之类的东西,public文件夹里放的项目中要用到的资源,比如css之类的,src中放的主要是我们要写的代码,其中components中放的是组件,一会儿来讲,App.vue
文件是项目的主体,可以看做是index.html
之类的东西,而main.js则负责将App.vue实例化并渲染到页面上
Vue组件
App.vue本身就是一个组件,可以看到它分为三个部分,template
标签包裹的html部分,script
部分包裹的js部分以及style
标签包裹的css部分
现在让我们把原有的示例代码删除,自己来写一个简单的组件熟悉一下
首先是template
部分,和html几乎是一样的,只是外面多了一个template
标签,这是一个固定的格式
1 | <template> |
script
部分的格式和之前的vue对象稍有不同,其中data是函数的形式,格式如下
1 | <script> |
CSS部分则和普通的css写法相同
1 | <style> |
子组件的调用
我们可以在components里面创建组件,组件内的写法和之前是一样的
组件的引入需要在父组件中先import,然后在components中写入,然后可以在template中像使用标签一样去使用
1 | <script> |
需要一提的是上面components里面的写法是简写,实际上每一项应该是Header:Header
这样的格式,当命名和引入名相同时可以简写为一个
引入完之后就可以在template中直接使用了
1 | <template> |
如果有组件特别的常用,我们可以全局注册,这样就不需要在多个页面反复导入和注册,全局注册在main.js
里面导入和注册,Footer组件的全局注册方式如下
1 | // main.js |
组件中的数据传递
父组件向子组件传值
vue中父组件给子组件传值需要父组件在标签内设置参数,且需要子组件设置参数表props
1 | <!-- 父组件的template中 --> |
可以看到子组件props中的变量名其实就是父组件的绑定名,父组件将自己组件中的变量绑定到子组件props中的变量名上,传递给子组件使用,子组件就可以直接地使用这些变量,比如
1 | <template> |
传参设置
在组件接受参数的时候还可以设定传参类型,比如设定必须传入数字,字符串等等,实现格式如下
1 | <script> |
也可以设置多种格式,设置默认值default
,设置required
要求值必须被传入,或是使用validator
对传入的值进行校验,使用示例如下
1 | <script> |
子组件向父组件传值
子组件给父组件传值,本质上是通过通知的方式使得父组件改变自己的值
需要在父组件内绑定一个方法,然后子组件使用$emit
触发事件向父组件的函数传值,通知父组件更改值
1 | <!-- 父组件中绑定事件 --> |
1 | // 父组件中使用methods |
子组件之间的互相传值
父组件作为媒介
子组件之间数据传递最朴素的方法,就是通过父组件,将数据定义在父组件,子组件A使用$emit
来更改父组件的值,然后通过父组件传递给子组件B
中央总线方法
创建一个事件总线eventBus.js
1 | import Vue from 'vue' |
组件中接受和发送数据的代码示例如下
1 | import eventBus from '../eventBus' |
这里因为两个组件都导入了eventBus实例,用eventBus在子组件触发事件,同时在另一个子组件监听对应的事件,就可以完成子组件间的信息传递