欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

VUE 与后端交互项目总结

程序员文章站 2022-03-04 10:44:32
...

 

一  初始化等准备项

 

1.1 App.vue

        整体的样式可以在这个文件的 <style>这里修改

<template>
  <div id="app">
    <router-view/>
  </div>
</template>

<script>
export default {
  name: 'App'
}
</script>

<style>
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 10px;
}


</style>

 

1.2 axios 、elementUI、qs等项引入及预处理

      项目中用到接口调用,需要引入axios

      接口传入的参数,统一使用了formData格式,需要预处理,需要引入qs

      项目中使用的UI,使用了element UI ,也需要引入

      项目中使用自定义的CSS 替换element loading图,也需要引入

 

      在main.js中,

import Vue from 'vue'
import App from './App'
import router from './router'


  elementUI 、自定义CSS引入


import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);

//自定义的element UI loading样式,在element样式之后引入,覆盖element样式
import './assets/css/myCss.css'

 

 自定义的CSS保存在 src->assets->css目录下

  

.el-loading-spinner{
     /*这个是自己想设置的 gif 加载动图*/
     background-image:url('../img/loading.gif');
     background-repeat: no-repeat;
     background-size: 200px 120px;
     height:100px;
     width:100%;
     background-position:center;
     /*覆盖 element-ui  默认的 50%    因为此处设置了height:100%,所以不设置的话,会只显示一半,因为被top顶下去了*/
     top:40%;
 }
.el-loading-spinner .circular {
    /*隐藏 之前  element-ui  默认的 loading 动画*/

    display: none;

}

.el-loading-spinner .el-loading-text{
   /*为了使得文字在loading图下面*/
    margin:85px 0px;
}

 

axios、qs 引入及预处理

import axios from 'axios'
import qs from 'qs'
Vue.prototype.$axios = axios
Vue.prototype.$qs=qs

Vue.config.productionTip = false
axios.defaults.withCredentials = true  // 跨域请求凭证

// 配置axios post请求时发送formData(解决跨域问题)
axios.defaults.transformRequest = [function (data) {
  data = qs.stringify(data);
  return data;
}];

// axios 请求参数统一处理
// 请求参数增加ajax = 1
axios.interceptors.request.use(req => {
  if (req.method === 'get') {
    req.params = req.params || {}
    Object.assign(req.params, {
      ajax: 1,
      src: 2,
    })
  }
  if (req.method === 'post') {
    req.data = req.data || {}
    Object.assign(req.data, {
      ajax: 1,
      src: 2,
    })
  }
  return req;
})

 

二 compent使用

 

     2.1 新建两个compent,HelloWorld.vue  TestReq.vue

        并修改路由  

     

export default new Router({
  routes: [

    {
      path: '/Test',
      name: 'Test',
      component: Test
    },
    {
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld
    }
  ]
})

 

  2.2 elementui使用

<template>
  <div>
    <el-container
            v-loading="loading"
            element-loading-background="rgba(255, 255,255, 0.5)"
            element-loading-text="加载中..."
    >
        <el-header>全部({{courseListData.length}})</el-header>

        <el-main>
            <el-row  v-for="(oneCourse,nIndex) in courseListData" :key="nIndex">
                <div>
                  <img  :src=GetCourseImgSrc(nIndex) alt=""  class="courseImg" >
                  <div class="courseInfo_DIV"  @click="DivToWeb(nIndex)">
                       <p class="courseName">{{GetCourseName(nIndex)}}</p>
                  </div>

                </div>
            </el-row>
        </el-main>

        <el-footer v-if="bTeacherOrTutor">共{{nTotalEnrollStudent}}人</el-footer>
    </el-container>


  </div>
</template>

  2.3 axios应用

  

        startLoading()
       {
            this.loading=true;
        },

        endLoading(){
            this.loading=false;
        },

        Ajx_GetClassList()
        {
            this.startLoading();

            let params={
                 chapter_id: this.chapterID 
             };
            let that=this;

            this.$axios(
                {
                    url: url,
                    method:'POST',
                    data:params
                }
            ).then(res=>{

                    let ret=res.data
                    if(ret.errcode!=0){
                        return that.$message(
                            {
                                type:'warning',
                                message:ret.msg
                            }
                        )
                    }

                    that.courseListData=ret.course_list;
                    console.log(JSON.stringify(that.courseListData),"courseList");


                    let lengthInfo = {
                        nTotalClass:that.courseListData.length//通知cpp 最新的课程列表数目
                    }
                    //  debugger;
                    window.NimCefWebInstance.call('CefNotifyToCpp_ChooseClassListInfo', lengthInfo, () => {})
                
                    that.GetNumOfEnRoll(ret);
                    that.GetTotalMoney(ret);
                    that.endLoading();
                })
        },

 

  2.4  DIV 和BTN都有点击事件情况处理

         比如

                    <div class="courseInfo_DIV"  @click="DivToWeb(nIndex)">

                        <button class="btn" @click="AllowTakeClass(nIndex,$event)">点击按钮</button>
                    </div>

  阻止点击按钮事件,往上层传递

       AllowTakeClass(nIndex,event){
             event.stopPropagation(); //阻止点击事件往上层传送
       }

 

 

 

 

 

 

 

 

相关标签: VUE 入门学习