01-基础-vue-cli 工具-介绍
内置开发时本地服务器,预览代码
npm install -g @vue/cli
# OR
yarn global add @vue/cli
命令说明
cd mq-project 代表进入文件夹 mq-project
npm run serve 代表启动vue项目(启动本地服务器,进行了编译等操作)【运行vue的命令】
mq-project # 项目目录
├── node_modules # 项目依赖的node包
├── public # 最终打包输出的静态文件目录
├── src # 业务文件夹
├── .gitignore # git提交忽略配置
└── babel.config.js # babel配置
├── package.json # 描述项目及项目所依赖的模块信息
├── package-lock.json
└── README.md # 项目说明
{
// 项目注册好的可执行命令
// npm run serve -> vue-cli-service serve
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
// 开发环境和生产环境都需要依赖的包
"dependencies": {
"core-js": "^3.6.5",
"vue": "^2.6.11"
},
// 开发环境所依赖的包
"devDependencies": {
"@vue/cli-plugin-babel": "^4.4.0",
"@vue/cli-plugin-eslint": "^4.4.0",
"@vue/cli-service": "^4.4.0",
"@vue/eslint-config-standard": "^5.1.2",
"babel-eslint": "^10.1.0",
"eslint": "^6.7.2",
"eslint-plugin-import": "^2.20.2",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^4.2.1",
"eslint-plugin-standard": "^4.0.0",
"eslint-plugin-vue": "^6.2.2",
"less": "^3.0.4",
"less-loader": "^5.0.0",
"vue-template-compiler": "^2.6.11"
}
}
注意:
- main.js 整个项目的入口文件 不能删除不能修改名称
- app.vue 整个项目的根组件 其他组件都是它的子孙组件
- components 放置我们组件的地方 名称是自定义的 但是不建议修改
- assets 方式应用的静态资源 图片 icons
1.SFC single file component 单文件组件
// 组件的模板 -> template选项
<template></template>
// 组件的脚本js逻辑 -> 除了template选项之外的其他所有组件项
<script></script>
// 组件的样式
<style></style>
2.vue-loader 转换器 将.vue文件转换成vue组件的配置项
.vue ->
{
components:{
},
data(){
return {
}
}
....
}
为什么要这么设计?
1.解决字符串模板没有语法提示
2.加入了编译的环节 有机会做一些提前优化和预编译语言处理(less)
3.让组件的结构更加清晰 每一个.vue文件就是一个独立的vue组件
插件
vscode -> vetur
components // 业务通用型组件(比较小 功能比较单一)
views // 放置路由路径对应的组件(往往比较大 级别比较高 功能比较多)
router // 放置路由初始化配置的文件
app.vue // 更组件
main.js // 入口文件
// 1.定义子组件
<template>
<div class="test">
我是TEST组件
{
{
name}}
</div>
</template>
<script>
// 写组件的配置项
export default {
data () {
return {
name: 'test'
}
}
}
</script>
// lang="less" 代表内部要使用less预处理器
// scoped 代表里面的样式只针对于当前组件生效
<style lang="less" scoped>
.test{
font-size:20px;
color:red;
}
</style>
2.子组件的使用
<template>
<div id="app">
我是根组件
<!--使用 -->
<Test></Test>
</div>
</template>
<script>
// 引入
import Test from './components/Test.vue'
export default {
name: 'App',
// 注册
components: {
Test
}
}
</script>
<style lang="less">
</style>
问题:
导入bootstrap
(打开终端然后使用命令运行则可)
npm install [email protected]
在main.js中通过import的方式导入即可
import ‘bootstrap/dist/css/bootstrap.css’
css-loader -> style-loader
<template>
<div id="app" class="container">
<!-- 头部区域 -->
<div class="row">
<div class="col-md-2">
<!-- 左侧导航区域 -->
</div>
<div class="col-md-10">
<!-- 右侧侧导航区域 -->
</div>
</div>
</div>
</template>
<template>
<nav class="navbar navbar-inverse">
<p class="navbar-text">米奇案例</p>
</nav>
</template>
<template>
<div class="list-group">
<router-link to="/mq" class="list-group-item">商品列表</router-link>
<router-link to="/zb" class="list-group-item">手机列表</router-link>
<router-link to="/jn" class="list-group-item">笔记本列表</router-link>
</div>
</template>
import Vue from 'vue'
import VueRouter from 'vue-router'
// 引入路由地址对应的组件
import case1 from '@/views/case1.vue'
import case2 from '@/views/case2.vue'
import case3 from '@/views/case3.vue'
import ZbList from '@/views/ZbList.vue'
import JnList from '@/views/JnList.vue'
// 使用插件,必须在vue实例化之前
Vue.use(VueRouter)
// 配置路由规则
const routes = [
{
path: '/', redirect: '/mq' },
{
path: '/case1', component: case1},
{
path: '/case2', component: case2},
{
path: '/case3', component: case3 },
{
path: '/zb', component: ZbList },
{
path: '/jn', component: JnList },
]
// 实例化路由
const router = new VueRouter({
routes
})
// 导出路由
export default router
注意:
<template>
<div class="list">
<button class="btn btn-primary">添加英雄</button>
<hr />
<table class="table table-striped">
<thead>
<tr>
<th>ID</th>
<th>商品名称</th>
<th>小米</th>
<th>创建时间</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr>
<td>1001</td>
<td>米奇</td>
<td>男</td>
<td>7/31</td>
<td>
<button
class="btn btn-success"
style="margin-right:10px"
>编辑</button>
<button class="btn btn-danger">删除</button>
</td>
</tr>
<tr>
<td colspan="5" style="text-align:center">暂无数据</td>
</tr>
</tbody>
</table>
</div>
</template>
<template>
<div class="hore-add">
<h3>添加商品</h3>
<hr />
<form class="form-horizontal">
<div class="form-group">
<label class="col-sm-2 control-label">商品名称</label>
<div class="col-sm-10">
<input type="text" class="form-control" style="width:200px" />
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">商品价格</label>
<div class="col-sm-10">
<input type="radio" value="昂贵" /> 昂贵
<input type="radio" value="便宜" /> 便宜
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button class="btn btn-primary">添加</button>
</div>
</div>
</form>
</div>
</template>
<template>
<div class="hore-edit">
<h3>编辑商品</h3>
<hr />
<form class="form-horizontal">
<div class="form-group">
<label class="col-sm-2 control-label">商品名称</label>
<div class="col-sm-10">
<input type="text" class="form-control" style="width:200px" />
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">商品价格</label>
<div class="col-sm-10">
<input type="radio" value="昂贵" /> 昂贵
<input type="radio" value="便宜" /> 便宜
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button class="btn btn-primary">保存</button>
</div>
</div>
</form>
</div>
</template>