Vue 项目结构分析
项目文件结构,
直接拖文件夹到 IDEA 打开即可如果不知道怎么回事的可以去看我的上一篇博客
分析
Vue 请求页面执行流程
当我们输入 http://localhost:8080 , 你看到这个页面时怎么来的,这里涉及到如下文件
2. 分析执行流程
Vue 项目简写造成理解困难,测试梳理疑惑
1. 因为 Vue 默认生成的项目代码,使用了很多简写, 造成初学者理解困难,再给梳理一下
2. 整个页面渲染过程中,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' //完整写法是 import App from './App.vue'
import router from './router'//完整写法是 import router from './router/index.js'
Vue.config.productionTip = false
/* eslint-disable no-new */
new Vue({
el: '#app', //这里的#app 是挂到 index.html 的 <div id="app"></div>
router, //完整写法是 router: router, 第二个 router 是 import router[这里] from './router'
components: {App}, //完整写法是 components: { 'App':App } 因为名字相同可以省略 'App'
template: '<App/>' //这里的 '<App/>' 的 App 就是上面 components 引入的组件的名字
})
路由切换
1. 根据 Vue 请求执行流程,完成路由切换实例
2. 输入 http://localhost:8080/#/hell
<template>
<div>
<img src="@/assets/logo.png"/>
<h1>{{ mes }}</h1>
</div>
</template>
<script>
export default {
name: "Hello",
data() {//数据池
return {
mes: "Hello, Mary~"
}
}
}
</script>
<style scoped>
</style>
index.js
// @ 表示的是src目录
import Hello from "@/components/Hello"
Vue.use(Router)
export default new Router({
routes: [ //路由表
{
path: '/',
name: 'HelloWorld',
component: HelloWorld
},
{ //配置的一组路由
path: '/hello',
name: 'Hello',
component: Hello
}
ElementUI 使用
ElementUI 官网:
一句话: ElementUI 是组件库,网站快速成型工具
安装 element-ui 组件库,
cmd 下进入到项目,指令 npm i element-ui@2.12.0 , 这里 指定了版本,
应用实例-Vue 项目引入 ElementUI
在 Vue2 项目中, 使用 ElementUI 组件, 如图
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' //完整写法是 import App from './App.vue'
import router from './router'//完整写法是 import router from './router/index.js'
//引入 element-ui 库/样式,并使用
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);
Vue.config.productionTip = false
/* eslint-disable no-new */
new Vue({
el: '#app', //这里的#app 是挂到 index.html 的 <div id="app"></div>
router, //完整写法是 router: router, 第二个 router 是 import router[这里] from './router'
components: {App}, //完整写法是 components: { 'App':App } 因为名字相同可以省略'App'
template: '<App/>' //这里的 '<App/>' 的 App 就是上面 components 引入的组件的名字
})
引 入 element-ui 按钮组件
从文档拷贝即可
<!-- 组件的三个部分 template script style -->
<!-- template:页面部分 -->
<template>
<div>
<h1>Hello, {{name}}</h1>
<!-- element-ui 组件 -->
<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>
</div>
</template>
Axios
基本说明
- axios 是独立于 vue 的一个项目,不是 Vue 的一部分
- axios 通常和 Vue 一起使用,实现 Ajax 操作
- Axios 是一个基于 promise 的 HTTP 库
学习文档
Axios 库文件
1、使用 axios 需要引入 axios 库文件
2、可以直接引入
<script scr="unpkg.com/axios/dist/…>
3、也可以下载 axios.min.js
<script src="vue.js"></script>
<script src="axios.min.js"></script>
Axios 应用实例
● 需求: 在 Vue 项目中使用 Axios, 从服务器获取 json 数据, 显示在页面
1. axios.get() 表示发出ajax请求
2. http://localhost:63342/axios/data/response.data.json 表示请求的url要根据实际情况来填写
3. axios发出ajax请求的基本语法
axios.get(url).then(箭头函数).then(箭头函数)...catch(箭头函数)
(1) 如果get请求成功就进入到第一个then()
(2) 可以再 第一个then()中继续发出axios的ajax请求
(3) 如果有异常, 会进入到 catch(箭头函数)
4. list在生命周期函数created() 中调用-自己去回顾vue的生命周期函数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>axios的应用实例</title>
</head>
<body>
<!--页面视图-->
<div id="app">
<h1>{{msg}}</h1>
<table border="1" width="200">
<tr>
<td>名字</td>
<td>年龄</td>
</tr>
<tr v-for="monster in monsterList">
<td>{{monster.name}}</td>
<td>{{monster.age}}</td>
</tr>
</table>
</div>
<script src="vue.js"></script>
<script src="axios.min.js"></script>
<script>
new Vue({
el: "#app",
data: {
msg: "妖怪信息列表",
monsterList: [] //表示妖怪的信息数组
},
methods: {//自定义方法
list() {//发送ajax请求,获取数据 axios
/*
解读
1. axios.get() 表示发出ajax请求
2. http://localhost:63342/axios/data/response.data.json 表示请求的url
要根据实际情况来填写
3. axios发出ajax请求的基本语法
axios.get(url).then(箭头函数).then(箭头函数)...catch(箭头函数)
(1) 如果get请求成功就进入到第一个then()
(2) 可以再 第一个then()中继续发出axios的ajax请求
(3) 如果有异常, 会进入到 catch(箭头函数)
4. list在生命周期函数created() 中调用-自己去回顾vue的生命周期函数
*/
axios.get("http://localhost:63342/axios/data/response.data.json")
.then(responseData => {
console.log("responseData= ", responseData)
//使用JSON.stringify(json) 把json对象转成一个字符串,方便观察
console.log("responseData= ", JSON.stringify(responseData));
// console.log("responseData.data= ", responseData.data)
// console.log("responseData.data.data= ", responseData.data.data)
console.log("responseData.data.data.item= ", responseData.data.data.items)
//将妖怪列表数组信息, 绑定到 data数据池的 monsterList
this.monsterList = responseData.data.data.items;
//可以再次发出ajax请求, 故意发出了第二次ajax请求, 回顾promise发出多次请求如果不知道的可以看的专栏的promise
// return axios.get("http://localhost:63342/axios/data/response.data.json")
})
// .then(responseData => {
// console.log("第二次axios发出 ajax请求responseData= ", responseData)
// })
.catch(err => {
console.log("异常=", err)
})
}
},
created() {
this.list();
}
})
</script>
</body>
</html>
注意
responseData.data.data.items 之所以要二个data的原因是 第一个 .data的返回第一次请求的url的对象 第二个 .data才是返回需要的对象然后 .items读取
数据json
{
"success": true,
"message": "成功",
"data": {
"items": [
{
"name": "牛魔王",
"age": 800
},
{
"name": "红孩儿",
"age": 500
},
{
"name": "蜈蚣精",
"age": 200
}
]
}
}
注意事项和细节说明
1 将 JSON 对象转成 JSON.stringify(response)
2 格式化输出 JSON 字符串,方便观察分析到 www.json.cn看看