Vue2 脚手架模块化开发
1.为什么需要 Vue Cli 脚手架?
目前开发模式的问题
- 开发效率低 2. 不够规范 3. 维护和升级, 可读性比较差
2.需求分析/图解
- 需求: 演示使用 Vue 脚手架进行模块化开发, 输入不同的 url, 切换不同页面.
- 完成功能如图
3.Vue Cli 文档地址
https://cli.vuejs.org/zh/
4.环境配置,搭建项目
-
搭建 Vue 脚手架工程,需要使用到 NPM(node package manager), npm 是随 nodejs 安装 的一款包管理工具, 类似 Maven。所以我们需要先安装 Nodejs
-
为了更好兼容 ,这里我们安装 node.js10.16.3再对 Node 升级.
-
如果以前安装过 node.js , 为防止版本冲突,先卸载之, 如果你没安装 nodejs, 就不用管
-
下载 node.js10.16.3 地址: https://nodejs.org/en/blog/release/v10.16.3/
-
安装 node.js10.16.3 , 直接下一步即可
-
验证是否安装成功, 如果看到不到, 退出 cmd, 重新开一个窗口测试即可
-
先删除以前的 cli 版本<不论是之前未下载或没有下载>
npm uninstall vue-cli -g
- 安装淘宝镜像-cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
npm 和 cnpm 的区别
1) 两者之间只是 node 中包管理器的不同, 都可以使用
2) npm 是 node 官方的包管理器。cnpm 是个中国版的 npm,是淘宝定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm
3) 如果因为网络原因无法使用 npm 下载,那 cnpm 这个就派上用场了
4) 小结: npm 和 cnpm 只是下载的地址不同,npm 是从国外下载东西,cnpm 是从国内 下载东西
9.安装 webpack 和 webpack-cli ,(webpack 是一个 打包工具) 指令:
npm install webpack@4.41.2 webpack-cli -D
10.安装vue脚手架
npm install -g @vue/cli@4.0.3
11.确认 Vue-Cli 版本
12.创建目录 llp-vue_project, 并 cmd 到该目录
13.使用 webpack 创建 vue 脚手架项目 (如果出现了 downloading template…, 60s 退出窗口,重新来操作一次即可.)
如果出现
npm install -g @vue/cli-init
14. 浏览器: http://localhost:8080
5.IDEA 打开项目,运行项目
- 将 Vue 脚手架项目,直接拖到 IDEA,就可以打开
- 配置 NPM
- 效果
6.Vue 项目结构分析
- 先说项目文件结构, 直接拖文件夹到 IDEA 打开即可
7.Vue 请求页面执行流程
- 当我们输入 http://localhost:8080 , 你看到这个页面时怎么来的,这里涉及到如下文件
2. 分析执行流程
8.Vue 项目简写造成理解困难,测试梳理疑惑
- 因为 Vue 默认生成的项目代码,使用了很多简写
- 整个页面渲染过程中,main.js 是中心,也是连接各个组件,路由器的关键,分析下 main.js, 并 做 测 试 ( 通过修改成完整的写法 就会清晰很多 )
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App.vue'
import router from './router/index'
Vue.config.productionTip = false
/* eslint-disable no-new */
new Vue({
el: '#app',
router: router,
//App对应App.vue
components: {'app': App},
template: '<app/>'
})
9.路由切换
1.需求说明/图解
-
根据 Vue 请求执行流程,完成路由切换实例
-
输入 http://localhost:8080/#/hello
-
输入 http://localhost:8080/#/
2.代码实现
1.新增组件,src\components\Hello.vue
<template>
<div>
<h1>hello,{{mes}}</h1>
</div>
</template>
<script>
export default {
name: 'hello',
data () {
return {
mes: 'llp'
}
}
}
</script>
<style scoped>
h1, h2 {
font-weight: normal;
}
</style>
2.新增路由,src\router\index.js
import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
//推荐使用@符号,不用考虑后续目录的切换
import Hello from "@/components/Hello";
Vue.use(Router)
export default new Router({
routes: [
{
path: '/',
name: 'HelloWorld',
component: HelloWorld
},
{
name: 'hello',
path: '/hello',
component: Hello
}
]
})
3.完成测试 http://localhost:8080/#/hello
3.路由切换-应用实例
1、需求说明/图解, 输入: http://localhost:8080/#/llp
2、代码实现
1.新建LLP.vue组件
<!--模板:表示页面视图html-->
<template>
<div>
<h1>{{ msg }}</h1>
<!-- 使用elementUI的组件-按钮-->
<el-row>
<el-button>默认按钮</el-button>
<el-button type="primary">主要按钮</el-button>
<el-button type="success">成功按钮</el-button>
<el-button type="info">信息按钮</el-button>
<el-button type="warning">警告按钮</el-button>
<el-button type="danger">危险按钮</el-button>
</el-row>
<el-input-number style="width: 300px" v-model="num" @change="handleChange" :min="1" :max="5"
label="描述文字"></el-input-number>
<!-- 引入el-table-->
<el-table
:data="tableData"
stripe
style="width: 70%;margin-top: 10px;margin-bottom: 10px">
<el-table-column
prop="date"
label="日期"
width="180">
</el-table-column>
<el-table-column
prop="name"
label="姓名"
width="180">
</el-table-column>
<el-table-column
prop="address"
label="地址">
</el-table-column>
</el-table>
<!-- 引入树形控件 el-tree-->
<el-tree :data="data" :props="defaultProps" style="margin-left: 100px" @node-click="handleNodeClick"></el-tree>
<table>
<tr>
<td>第1行第1列</td>
<td>第1行第2列</td>
<td>第1行第3列</td>
</tr>
<tr>
<td rowspan="2">第2行第1列</td>
<td>第2行第2列</td>
<td>第2行第3列</td>
</tr>
<tr>
<td>第3行第2列</td>
<td>第3行第3列</td>
</tr>
<tr>
<td rowspan="2">第4行第1列</td>
<td>第4行第2列</td>
<td>第4行第3列</td>
</tr>
<tr>
<td>红烧肉<img src="@/assets/2.png" width="100"></td>
<td>第5行第3列</td>
</tr>
</table>
</div>
</template>
<!--定义数据和操作方法, 默认导出-->
<script>
export default {
name: "llp",
data() {//数据池
return {
data: [{
label: '家用电器',
children: [{
label: '电视',
children: [{
label: '教育电视'
},
{
label: '全面屏电视'
}
]
}]
}, {
label: '一级 2',
children: [{
label: '二级 2-1',
children: [{
label: '三级 2-1-1'
}]
}, {
label: '二级 2-2',
children: [{
label: '三级 2-2-1'
}]
}]
}, {
label: '一级 3',
children: [{
label: '二级 3-1',
children: [{
label: '三级 3-1-1'
}]
}, {
label: '二级 3-2',
children: [{
label: '三级 3-2-1'
}]
}]
}],
defaultProps: {
children: 'children',
label: 'label'
},
msg: "Welcome to LLP!",
num: 1,
tableData: [{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1517 弄'
}, {
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀区金沙江路 1519 弄'
}, {
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀区金沙江路 1516 弄'
}]
}
},
methods: {
handleChange(value) {
//这里我们可以获取到用户增加/减少的值
console.log(value);
}
}
}
</script>
<!--样式,css, 可以去修饰页面视图
前端的要求不高,但是也要会一点
margin: 0 auto; 0 表示上下的边距, auto表示左右居中
-->
<style scoped>
div {
width: 900px;
background-color: aliceblue;
margin: 0 auto;
}
table, tr, td {
border: 1px solid red;
border-collapse: collapse;
}
table {
margin: 0 auto;
width: 600px;
height: 380px;
}
h1 {
color: red;
}
</style>
2.路由index.js新增路由
{ //配置的一组路由
path: '/llp',
name: 'llp',
component: LLP
}
10. ElementUI 使用
1.ElementUI官网
https://element.eleme.cn/#/zh-CN
2.ElementUI 是组件库,网站快速成型工具
3.应用实例-Vue 项目引入 ElementUI
1.需求说明/图解
- 在 Vue2 项目中, 使用 ElementUI 组件, 如图
完成测试, 浏览器: http://localhost:8080/#/llp
2.代码演示
- 安装 element-ui 组件库, cmd 下进入到项目,指令,这里指定了版本
npm i element-ui@2.12.0
- 修改src\main.js
// 引入elementUI组件库
import ElementUI from ‘element-ui’;
import ‘element-ui/lib/theme-chalk/index.css’;
Vue.config.productionTip = false//使用ElementUI插件
Vue.use(ElementUI);
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App.vue'
import router from './router' //import router from './router/index'
// 引入elementUI组件库
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.config.productionTip = false
//使用ElementUI插件
Vue.use(ElementUI);
/* eslint-disable no-new */
new Vue({
el: '#app',
router: router,
components: {'app': App},
template: '<app/>'
})
3.修改LLP.vue
<!-- 使用elementUI的组件-按钮-->
<el-row>
<el-button>默认按钮</el-button>
<el-button type="primary">主要按钮</el-button>
<el-button type="success">成功按钮</el-button>
<el-button type="info">信息按钮</el-button>
<el-button type="warning">警告按钮</el-button>
<el-button type="danger">危险按钮</el-button>
</el-row>
<el-input-number style="width: 300px" v-model="num" @change="handleChange" :min="1" :max="5"
label="描述文字"></el-input-number>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/81276.html