3. Vue单文件组件
传统组件的问题和解决方案
1.问题
- 全局定义 的组件必须保证组件的名称不重复
- 字符串模板缺乏语法高亮, 在HTML有多行的时候,需要用到丑陋的\
- 不支持 CSS意味着当HTML和JavaScript组件化时,CSS 明显被遗漏
- 没有构建步骤限制, 只能使用HTML和ES5 JavaScript,而不能使用预处理器(如: Babel)
2.解决方案
针对传统组件的问题,Vue 提供了一个解决方案一使用 Vue单文件组件。
Vue单文件组件的基本用法
单文件组件的组成结构
- template 组件的模板区域
- script 业务逻辑区域
- style 样式区域
<template>
<!--这里用于定义vue组件的模板内容-->
</temp1ate>
<script>
//这里用于定义vue组件的业务逻辑
export default {
data: () { return {} },//私有数据
methods: {} //处理函数
// ... 其它业务逻辑
</script>
//建议为每个style都添加一个scoped的指令,从而防止组件样式之间的冲突问题,保证每个组件的样式都是自己私有的,不会影响到其他的组件
<style scoped>
/*这里用于定义组件的样式*/
</style>
webpack中配置vue组件的加载器
1 运行 npm i vue-loader vue-template-compiler -D命令
2 在webpack.config.js配置文件中,添加vue-loader的配置如下:
//导入插件
const VueLoaderPlugin = require('vue-loader/lib/plugin')
module.exports={
module:{
rules:[
//...其他规则
{test:/\.vue$/,loader:'vue-loader'}
]
},
plugins:[
//...其它插件
new VueLoaderPlugin()//请确保引入这个插件!
]
}
在webapck项目中使用vue
1.运行npm i vue -S 安装vue
2.在src->index.js入口文件中,通过import vue from 'vue'来导入vue构造函数
3.创建vue的实例对象,并指定要控制的el区域
4.通过render函数渲染App根组件
//1.导入Vue构造函数
import Vue from 'vue'
//2.导入App根组件
import App from './components/App.vue'
const vm = new Vue({
//3.指定vm实例要控制的页面区域
el:'#app',
//4.通过render函数,把指定的组件渲染到el区域中
render:h=>h(App)
})
webpack打包发布
上线之前需要通过webpack将应用进行整体打包,可以通过package.json文件配置打包命令:
//在package.json文件中配置webpack打包命令
//该命令默认加载项目根目录中的webpack.config.js配置文件
"scripts":{
//用于打包的命令
"build":"webpack -p",
//用于开发调试的命令
"dev":"webpack-dev-server --open --host 127.0.0.1 --port 3000",
},
运行npm run build打包