Vue 项目结构分析和 ElementUI 使用

124 阅读3分钟

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 官网:

element.eleme.cn/#/zh-CN

一句话: 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

基本说明

  1. axios 是独立于 vue 的一个项目,不是 Vue 的一部分
  2. axios 通常和 Vue 一起使用,实现 Ajax 操作
  3. Axios 是一个基于 promise 的 HTTP 库

学习文档

javasoho.com/axios/

 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看看