基本使用
https://element.eleme.cn/#/zh-CN/component/installation
現在的前端開發更多的是關注邏輯,很少關注樣式,因為ui框架提供給我們足夠多的ui組件
我們學習vue使用ui框架,更多的是element-ui和iview-ui
如何使用ui框架,我們從element-ui入手
首先我們要安裝element-ui框架的依賴
npm i element-ui -S
- 第一步要在main.js中引入element-ui
- 第二步use使用
- 第三步要引入index.css文件
1 import Vue from 'vue' 2 // 相對路徑引入的App.vue文件 3 import App from './App.vue' 4 // 引入ui框架 5 import elementUi from 'element-ui' 6 //引入css 7 import 'element-ui/lib/theme-chalk/index.css' 8 //使用element-ui 9 Vue.use(elementUi) 10 new Vue({ 11 // 渲染節點 12 render: h => h(App), 13 }).$mount('#app')
然后我們就可以在全局使用element-ui
App.vue文件
1 <template> 2 <div> 3 <el-input v-model="input" placeholder="請輸入內容"></el-input> 4 </div> 5 </template> 6 <script> 7 export default { 8 } 9 </script> 10 <style lang="scss" scoped> 11 </style>
相關的組件css樣式位置:node_modules/element-ui/lib/theme-chalk,里面有所有的css樣式。
如何正確使用ui框架
以CheckBox組件為例
首先提供給我們多種樣式進行選擇
其次是當前的組件可用的屬性
最后是當前的組件可用的事件監聽
總結:
三步走,第一步先去找組件,第二步找對應的需要的樣式狀態,最后一步設置需要的屬性和事件(組件提供的可用的事件和屬性)
Form表單
由輸入框、選擇器、單選框、多選框等控件組成,用以收集、校驗、提交數據
如何進行校驗
首先要設置對應的rules規則
1 rules: { 2 name: [{ 3 required: true, 4 message: '請輸入活動名稱', 5 trigger: 'blur' 6 }, 7 { 8 min: 3, 9 max: 5, 10 message: '長度在 3 到 5 個字符', 11 trigger: 'blur' 12 } 13 ], 14 region: [{ 15 required: true, 16 message: '請選擇活動區域', 17 trigger: 'change' 18 }], 19 date1: [{ 20 type: 'date', 21 required: true, 22 message: '請選擇日期', 23 trigger: 'change' 24 }], 25 date2: [{ 26 type: 'date', 27 required: true, 28 message: '請選擇時間', 29 trigger: 'change' 30 }], 31 type: [{ 32 type: 'array', 33 required: true, 34 message: '請至少選擇一個活動性質', 35 trigger: 'change' 36 }] 37 }
然后在我們的el-form組件上添加rules屬性
1 <el-form ref="formName" :rules="rules" label-width="80px">
第三步要在我們的el-form組件上添加model屬性
model屬性接受的是一個對象,內容就是要和內部表單元素v-model綁定屬性
1 form: { 2 name: '', 3 region: '', 4 date1: '', 5 date2: '', 6 delivery: false, 7 type: [], 8 resource: '', 9 desc: '' 10 }
1 <el-form ref="formName" :model="form" :rules="rules" label-width="80px">
第三步在對應的需要校驗的表單元素上添加對應prop屬性,注意三者統一,rules規則里面的屬性和prop和v-model的屬性必須都一樣
1 <div class='info-box'> 2 <el-form ref="formName" :model="form" :rules="rules" label-width="80px"> 3 <el-form-item label="活動名稱" prop='name'> 4 <el-input v-model="form.name"></el-input> 5 </el-form-item> 6 <el-form-item label="活動區域" prop='region'> 7 <el-select v-model="form.region" placeholder="請選擇活動區域"> 8 <el-option label="區域一" value="shanghai"></el-option> 9 <el-option label="區域二" value="beijing"></el-option> 10 </el-select> 11 </el-form-item> 12 <el-form-item label="活動時間" prop='date1'> 13 <el-col :span="11"> 14 <el-date-picker type="date" placeholder="選擇日期" v-model="form.date1" style="width: 100%;"></el-date-picker> 15 </el-col> 16 <el-col class="line" :span="2">-</el-col> 17 <el-col :span="11"> 18 <el-time-picker placeholder="選擇時間" v-model="form.date2" style="width: 100%;"></el-time-picker> 19 </el-col> 20 </el-form-item> 21 <el-form-item label="即時配送"> 22 <el-switch v-model="form.delivery"></el-switch> 23 </el-form-item> 24 <el-form-item label="活動性質" prop='type'> 25 <el-checkbox-group v-model="form.type"> 26 <el-checkbox label="美食/餐廳線上活動" name="type"></el-checkbox> 27 <el-checkbox label="地推活動" name="type"></el-checkbox> 28 <el-checkbox label="線下主題活動" name="type"></el-checkbox> 29 <el-checkbox label="單純品牌曝光" name="type"></el-checkbox> 30 </el-checkbox-group> 31 </el-form-item> 32 <el-form-item label="特殊資源" prop='resource'> 33 <el-radio-group v-model="form.resource"> 34 <el-radio label="線上品牌商贊助"></el-radio> 35 <el-radio label="線下場地免費"></el-radio> 36 </el-radio-group> 37 </el-form-item> 38 <el-form-item label="活動形式" prop='desc'> 39 <el-input type="textarea" v-model="form.desc"></el-input> 40 </el-form-item> 41 <el-form-item> 42 <el-button type="primary" @click="submitForm">立即創建</el-button> 43 <el-button>取消</el-button> 44 </el-form-item> 45 </el-form> 46 </div>
最后的設置提交校驗
1 methods: { 2 submitForm() { 3 // refs選擇的是被校驗的表單from內部的表單,回調函數中valid是一個布爾值,如果是true則代表所有的表單元素都通過了校驗,如果有一個沒有通過校驗,會返回false 4 this.$refs['formName'].validate((valid) => { 5 if (valid) { 6 alert('submit!'); 7 } else { 8 console.log('error submit!!'); 9 return false; 10 } 11 }); 12 }, 13 }
如果加上校驗規則的表單元素會有紅色星號
提交時如果沒有通過
我們的表單校驗不僅僅只能進行必填校驗,還有自定義校驗
比如我們的name屬性校驗
1 name: [{ 2 required: true, 3 message: '請輸入活動名稱', 4 trigger: 'blur' 5 }, 6 { 7 validator: validatePass, 8 trigger: 'blur' 9 } 10 ]
validator的值validatePass是一個函數
1 const validatePass = function (rule, value, callback) { 2 if (value.length !== 11) { 3 return callback(new Error("請輸入正確的手機號")) 4 } 5 }
rule返回的是一個json,內部是校驗的一些信息
vlaue返回的是輸入的文本內容
callback是回調函數
一個表單元素可以設置一個或者多個校驗規則,第一個參數都是關於校驗的,最后一個參數trigger指的是觸發方式有兩種,分別是blur和change,blur用於輸入框指的是當光標失去焦點的時候觸發,change是當內容進行改變的時候觸發。
Table表格
用於展示多條結構類似的數據,可對數據進行排序、篩選、對比或其他自定義操作
表格是組合el-table和el-table-column的組合
data屬性是必要屬性,接收的是對應的需要加載顯示的table數據
table接收幾個必要屬性
data屬性時必要屬性,接收的是對應的需要加載顯示的table數據
1 <template> 2 <div> 3 <el-table :data="tableData" style="width:100%"> 4 <el-table-column prop="date" label="日期" width="180"> 5 </el-table-column> 6 <el-table-column prop="name" label="姓名" width="180"> 7 </el-table-column> 8 <el-table-column prop="address" label="地址"> 9 </el-table-column> 10 </el-table> 11 </div> 12 </template>
內部是el-table-column組件,該組件上有幾個必要的屬性
- prop屬性:需要加載的tableData中的json屬性值
- label屬性:顯示的表頭名稱
- width:當前列的寬度
1 data(){ 2 return { 3 tableData:[ 4 { 5 date: '2016-05-02', 6 name: '王小虎', 7 address: '上海市普陀區金沙江路 1518 弄' 8 }, 9 { 10 date: '2016-05-02', 11 name: '王小虎', 12 address: '上海市普陀區金沙江路 1518 弄' 13 }, 14 ] 15 } 16 }