前后端分離及Element的使用


1. 前后端分離

1.1 什么是前后端分離

  在傳統的web應用開發中,大多數的程序員會將瀏覽器作為前后端的分界線。將瀏覽器中為用戶進行頁面展示的部分稱之為前端,而將運行在服務器,為前端提供業務邏輯和數據准備的所有代碼統稱為后端。

  很多人誤以為前后端分離只是一種web應用開發模式,只要在web應用的開發期進行了前后端開發工作的分工就是前后端分離。  (前后端分工)

  其實前后端分離並不只是開發模式,而是web應用的一種架構模式。在開發階段,前后端工程師約定好數據交互接口,實現並行開發和測試;在運行階段前后端分離模式需要對web應用進行分離部署前后端之前使用HTTP或者其他協議進行交互請求

1.2 前后端分離開發的理解

交互形式:

代碼形式:

 

 

(1) 前后端未分離:(同一個項目)

前端代碼和后端代碼放到同一個項目中(前端代碼里面包含后端代碼,比如jsp)。

(2) 前后端半分離:(很少使用)

代碼倉庫:前端代碼和后端代碼分開進行開發,前端無法進行單獨測試,需要后端代碼支持。

(3) 前后端分離:

不同的項目,前端和后端代碼分別放在不同的項目,部署到不同的服務里面。

1.3 前后端分離的優勢

(1) 分工合作,為優質產品打造精益團隊,專業的人做專業的事

(2) 提高開發效率,並行開發

(3) 完美應對復雜多變的前端需求

(4) 增強代碼的可維護性

2. 搭建前端服務

(1) 創建一個static web project

(2) 安裝腳手架npm install -g @vue/cli

(3) vue init webpack 項目名

(4) cd 項目名

  npm run dev  運行服務

如何去設置代理:

npm config set proxy=null

npm config set registry https://registry.npm.taobao.org

3. Element

Element,一套為開發者、設計師和產品經理准備的基於 Vue 2.0 的桌面端組件庫

(1) 安裝

npm i element-ui-S

(2) 引入element-ui在main.js

import ElementUI from 'element-ui'; //引入核心js組件
import 'element-ui/lib/theme-chalk/index.css';//引入依賴的樣式
Vue.use(ElementUI) //引用

(3) 在vue頁面使用element-ui的組件

 1 <div id="app">
 2       <el-button @click="visible = true">Button</el-button>
 3       <el-dialog :visible.sync="visible" title="Hello world">
 4         <p>Try Element</p>
 5       </el-dialog>
 6     </div>
 7 <script>
 8   export default {
 9     name: 'elementUi01',
10     data () {
11       return {
12         msg: 'Welcome to Your Vue.js App',
13         visible:false
14       }
15     }
16   }
17 </script>

element-ui的組件:

el-button 按鈕

el-tree 樹形

el-table表格

el-form表單

el-pagination分頁

el-container容器

el-layout布局

el-tabs頁簽 選項卡

el-dialog對話框

el-alert 提示框

……

具體使用可以查看官網網站:https://element.eleme.cn/#/zh-CN

4. mockjs

mockjs:前端工程師用來產生模擬數據的

安裝:

(1) npm install mockjs

(2) userMock.js文件引用 mockjs

let Mock = require('mockjs')

(3) 在js生成數據,攔截axios請求

 1 let Mock = require("mockjs")
 2 var dataList = [];
 3 for(var i = 0;i < 101;i++) {
 4   dataList.push(Mock.mock({
 5     'id': '@increment',
 6     'name': '@cname',
 7     'phone': /^1[0-9]{10}$/,
 8     'email': '@email',
 9     'address': '@county(true)',
10     'createTime': '@date("yyyy-MM-dd")'
11   }));
12 }
13 function pagination(index, size, list) {
14   return list.slice((index - 1) * size, index * size);
15 }
16 //攔截axios請求
17 Mock.mock(new RegExp('/user/list'), 'post', (opts) => {
18   var list = dataList;
19   var index = JSON.parse(opts.body).page;
20   var size = 10;
21   var total = list.length
22   list = pagination(index, size, list)
23   return {
24     'total': total,//總的條數
25     'data': list//分頁之后的數據
26   }
27 })

(4) 安裝axios

npminstall axios --save

 1 <template>
 2   <div>
 3     <!--工具條-->
 4     <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
 5       <el-form :inline="true">
 6         <el-form-item>
 7           <el-input placeholder="關鍵字"></el-input>
 8         </el-form-item>
 9         <el-form-item>
10           <el-button type="primary">查詢</el-button>
11         </el-form-item>
12         <el-form-item>
13           <el-button type="primary">新增</el-button>
14         </el-form-item>
15       </el-form>
16     </el-col>
17     <el-table
18       :data="users"
19       style="width: 100%"
20       border
21       height="450px"
22     >
23       <el-table-column
24         prop="name"
25         label="姓名"
26         width="180">
27       </el-table-column>
28       <el-table-column
29         prop="address"
30         label="地址">
31       </el-table-column>
32       <el-table-column
33         prop="email"
34         label="郵件">
35       </el-table-column>
36       <el-table-column
37         prop="phone"
38         label="電話">
39       </el-table-column>
40       <el-table-column
41         prop="createTime"
42         label="創建時間"
43         width="180">
44       </el-table-column>
45       <el-table-column
46         fixed="right"
47         label="操作"
48         width="100">
49         <template slot-scope="scope">
50           <el-button @click="handleClick(scope.row)" type="text" size="small">查看</el-button>
51           <el-button type="text" size="small">編輯</el-button>
52         </template>
53       </el-table-column>
54     </el-table>
55     <el-col :span="24" class="toolbar">
56       <el-pagination layout="prev, pager, next" @current-change="handleCurrentChange" :page-size="10" :total="total" style="float:right;">
57       </el-pagination>
58     </el-col>
59   </div>
60 </template>
61 <script>
62   export default {
63     data() {
64       return {
65         users: [],
66         total:0,
67         page:1
68       }
69     },
70     methods:{
71       getUsers(){
72         //這個是對象  {key:value}
73         let para = {
74           page:this.page
75         }
76         //加載數據
77         //發送ajax 從后台查詢出來...沒有寫后台 --模擬后台數據 mockjs
78         this.$http.post('/user/list',para).then(res=>{
79           this.users = res.data.data;
80           this.total = res.data.total;
81         });
82       },
83       handleCurrentChange(val){
84         //把當前頁 賦值給page這個字段
85         this.page = val;
86         this.getUsers();
87       }
88     },
89     mounted(){
90       //頁面加載完之后執行的方法
91       this.getUsers();
92     }
93   };
94 </script>

(5) 注意事項

在main.js中引入usermock.js

 

1 import axios from 'axios'
2 import UserMock from './usermock.js'
3 //配置axios的全局基本路徑
4 axios.defaults.baseURL = ''
5 //全局屬性配置,在任意組件內可以使用this.$http獲取axios對象
6 Vue.prototype.$http = axios


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM