vue-cli
vue-cli 是 Vue.js 开发的标准工具。它简化了程序员基于 webpack 创建工程化的 Vue 项目的过程。
中文官网:https://cli.vuejs.org/zh/
https://cn.vuejs.org/v2/guide/
安装和使用
vue-cli 是 npm 上的一个全局包,使用 npm install 命令,即可方便的把它安装到自己的电脑上:npm install -g @vue/cli
基于 vue-cli 快速生成工程化的 Vue 项目:vue create 项目的名称
vue 项目中 src 目录的构成:
1 | assets 文件夹:存放项目中用到的静态资源文件,例如:css 样式表、图片资源 |
vue 项目的运行流程
在工程化的项目中,vue 要做的事情很单纯:通过 main.js 把 App.vue 渲染到 index.html 的指定区域中。
其中:
① App.vue 用来编写待渲染的模板结构
② index.html 中需要预留一个 el 区域
③ main.js 把 App.vue 渲染到了 index.html 所预留的区域中
vue 组件
vue 是一个支持组件化开发的前端框架。
vue 中规定:组件的后缀名是 .vue。之前接触到的 App.vue 文件本质上就是一个 vue 的组件。
vue 组件的三个组成部分(其中,每个组件中必须包含 template 模板结构,而 script 行为和 style 样式是可选的组成部分。)
- template -> 组件的模板结构
1 | // vue 规定:每个组件对应的模板结构,需要定义到 <template> 节点中。 |
- script -> 组件的 JavaScript 行为
1 | // vue 规定:开发者可以在 <script> 节点中封装组件的 JavaScript 业务逻辑。 |
- style -> 组件的样式
1 | // vue 规定:组件内的 <style> 节点是可选的,开发者可以在 <style> 节点中编写样式美化当前组件的 UI 结构。 |
使用组件的三个步骤
- 使用 import 语法导入需要的组件
1 | import HelloWorld from './components/HelloWorld.vue' |
- 使用 components 节点注册组件
1 | export default { |
- 以标签形式使用刚才注册的组件
1 | <template> |
通过 components 注册的是私有子组件
例如:在组件 A 的 components 节点下,注册了组件 F。则组件 F 只能用在组件 A 中;不能被用在组件 C 中。
在 vue 项目的 main.js 入口文件中,通过 Vue.component() 方法,可以注册全局组件。
1 | import App from '@/components/App.vue' |
组件的 props
props 是组件的自定义属性,允许使用者通过自定义属性,为当前组件指定初始值
vue 规定:组件中封装的自定义属性是只读的,程序员不能直接修改 props 的值。否则会直接报错,要想修改 props 的值,可以把 props 的值转存到 data 中,因为 data 中的数据都是可读可写的
props 的 default 默认值
解决组件样式冲突
1 | <style lang='less' scoped> |
组件之间的数据共享
- 父组件向子组件共享数据需要使用自定义属性
1 | // 子组件 |
- 子组件向父组件共享数据
1 | // 子组件 |
兄弟组件之间的数据共享
在 vue2.x 中,兄弟组件之间数据共享的方案是 EventBus。
① 创建 eventBus.js 模块,并向外共享一个 Vue 的实例对象
② 在数据发送方,调用 bus.$emit(‘事件名称’, 要发送的数据) 方法触发自定义事件
③ 在数据接收方,调用 bus.$on(‘事件名称’, 事件处理函数) 方法注册一个自定义事件
1 | //eventBus.js |
ref 引用
ref 用来辅助开发者在不依赖于 jQuery 的情况下,获取 DOM 元素或组件的引用。每个 vue 的组件实例上,都包含一个 $refs 对象,里面存储着对应的 DOM 元素或组件的引用。默认情况下,组件的 $refs 指向一个空对象。
- 使用 ref 引用 DOM 元素
1 | <!--使用ref属性,为对应的DOM添加引用名称--> |
- 使用 ref 引用组件实例
1 | <!--使用ref属性,为对应的“组件"添加引用名称--> |
this.$nextTick(cb) 方法
组件的 $nextTick(cb) 方法,会把 cb 回调推迟到下一个 DOM 更新周期之后执行。通俗的理解是:等组件的DOM 更新完成之后,再执行 cb 回调函数。从而能保证 cb 回调函数可以操作到最新的 DOM 元素。
1 | <input type="text" v-if="inputVisible" ref="ipt"> |