Element-Ui和Vue项目的结合 实现前后台分离

Element-Ui和Vue项目的结合

第一步:使用脚手架创建一个Vue项目

     vue init webpack 项目名     创建在线项目

     vue init webpack 项目名     创建离线项目 

第二步:在项目中下载element-ui的模板

     cd pro01    cd 项目名

     npm install element-ui -S   

第三步:在项目中引入element-ui 

     在项目中src目录下找到main.js,并在指定位置添加三行代码(main.js是入口文件,所以在这里引入就行,页面就不用引入了)

     import Vue from 'vue'
 
     import ElementUI from 'element-ui' //新添加1
     import 'element-ui/lib/theme-chalk/index.css' //新添加2,避免后期打包样式不同,要放在import App from './App';之前
      
     import App from './App'
     import router from './router'

     Vue.use(ElementUI)   //新添加3
     Vue.config.productionTip = false

第四步:Vue+ElementUI设计登陆页面

附上我自己的代码  Login.vue

<template>
	<el-form class="login-container">
		<h2 class="title">用户登录</h2>
	  <el-form-item label="用户名" prop="pass">
	    <el-input type="text" v-model="username" placeholder="用户名" autocomplete="off"></el-input>
	  </el-form-item>
	  <el-form-item label="密码" prop="checkPass">
	    <el-input type="password" v-model="password" placeholder="密码" autocomplete="off"></el-input>
	  </el-form-item>
	  <el-form-item>
	    <el-button type="primary" @click="submitForm()" style="width:100% ;">提交</el-button>
	  </el-form-item>
	</el-form>
</template>


<script>
	export default {
	  name: 'Login',
	  data () {
	    return {
	      username:null,
	      password:null
	    }
	  },
	  methods:{
		  submitForm:function(){
			  let users={
				  uname:this.username,
				  pass:this.password
			  }
			  console.log(users);
			  

		  }
	  }
	}
</script>

<style>
	/*大的外面的框*/
	.login-container {
			border-radius: 10px;
			margin: 0px auto;
			width: 350px;
			padding: 30px 35px 15px 35px;
			background: #fff;
			border: 1px solid #eaeaea;
			text-align: left;
			box-shadow: 0 0 20px 2px rgba(0, 0, 0, 0.1);
		}
	/*登录的字体*/
		.title {
			margin: 0px auto 40px auto;
			text-align: center;
			color: #505458;
		}
</style>

实现前后台分离

后台就是springboot+ssm的一个项目

前台就是刚刚附的Login.vue的组件

在后台项目中需要加一个类:CORSConfiguration.java

package com.ywy.configuaction;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

@Configuration
public class CORSConfiguration extends WebMvcConfigurationSupport {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedMethods("*")
                .allowedOrigins("*")
                .allowedHeaders("*");
        super.addCorsMappings(registry);
    }
}

注1:为了解决跨域的问题

          会一直报错:“http://127.0.0.1:8848' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header”
           因为使用了前后端分离开发,跨域访问了,解决方案:需要配置tomcat允许跨域访问,
           tomcat跨域配置方法很多,但最简单的方式是自己写一个过滤器CorsFilter实现,添加一个响应头
           Access-Control-Allow-Origin即可
           httpResponse.addHeader("Access-Control-Allow-Origin", "*");//*表示任何域名
           httpResponse.addHeader("Access-Control-Allow-Origin", "http://localhost:80"); 

           Access-Control-Allow-Origin:*                           #则允许所有域名的脚本访问该资源。
           Access-Control-Allow-Origin:https://www.fujieace.com    #允许特定的域名访问 

   注2:axios.get提交没有问题,axios.post提交后台接收不到数据
           因为POST提交的参数的格式是Request Payload,这样后台取不到数据的(详情见资料“05 Vue中axios踩坑之路-POST传参 - RainSun - CSDN博客.mht”),
           解决方案:使用qs.js库,将{a:'b',c:'d'}转换成'a=b&c=d'

   注3:为简化axios使用,还可以使用axios全局配置及拦截器,详情见资料“api/http.js”
           axios.defaults.baseURL = 'https://api.example.com';
           //axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;//自定义请求头,添加认证令牌
           axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

前台的提交,使用axios

 qs: qs.js它是一个url参数转化的js库。用法就两个:
      var obj = qs.parse('a=b&c=d');  //将URL解析成对象的形式:{a:'b',c:'d'}
      var str = qs.stringify(obj);    //将对象 序列化成URL的形式,以&进行拼接:a=b&c=d'

1. axios
      axios是vue2提倡使用的轻量版的ajax。它是基于promise的HTTP库。它会从浏览器中创建XMLHttpRequest(原生的ajax对象),与Vue配合使用非常好。
   
   注.题外话:
      vue.js有著名的全家桶系列:vue-router,vuex, vue-resource,再加上构建工具vue-cli,就是一个完整的vue项目的核心构成。
      其中vue-resource是Vue.js的一款插件,它可以通过XMLHttpRequest或JSONP发起请求并处理响应,但在vue更新到2.0之后,
      作者就宣告不再对vue-resource更新,而是推荐的axios

2.GET提交
      axios.get('/user', {//注意数据是保存到json对象的params属性
        params: {
          ID: 12345
        }
      }).then(function (response) {
        console.log(response);
      }).catch(function (error) {
        console.log(error);
      });

 3.POST提交
      axios.post('/user', {//注意数据是直接保存到json对象
        firstName: 'Fred',
        lastName: 'Flintstone'
      }).then(function (response) {
        console.log(response);
      }).catch(function (error) {
        console.log(error);
      });

<script>
	import axios from 'axios'
	import qs from 'qs'
	export default {
	  name: 'HelloWorld',
	  data () {
	    return {
	      username:null,
	      password:null
	    }
	  },
	  methods:{
		  submitForm:function(){
			  let users={
				  uname:this.username,
				  pass:this.password
			  }
			  console.log(users);
			  var url='http://localhost/userlogin';//提交路径
			  //get方式提交
			  /* axios.get(url, {//注意数据是保存到json对象的params属性
			          params: {
			            uname:this.username,
						pass:this.password
			          }
			   }).then(function (response) {
			          console.log(response);
			   }).catch(function (error) {
			          console.log(error);
			   }); */
			   //post方式提交
			   var str=qs.stringify(users);
			   axios.post(url, str).then(function (response) {
			           console.log(response);
			   }).catch(function (error) {
			           console.log(error);
			   });

		  }
	  }
	}
</script>
发布了62 篇原创文章 · 获赞 6 · 访问量 2571

猜你喜欢

转载自blog.csdn.net/qq_44424498/article/details/102909412