成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

vue 封裝面包屑組件教程

瀏覽:64日期:2022-10-27 13:40:37

我看過一篇關于程序員寫博客的文章,他說很多的程序員過了兩年寫了很多的代碼,但是回想起來自己具體做了哪些技術點,遇到坑幾乎沒有印象,所以說文字是記錄的最好方式,好記性不如爛筆頭,可以方便自己以后查看,在寫的過程中也會再加深一遍印象,我也來折騰折騰。

第一次寫文章就寫一個比較有意義的吧,18年四月末來到目前所在的這家公司,熟悉了一周環境和代碼后,新的任務就是使用vue+element-ui來重構之前老版本的項目,我主要負責就是用戶管理的一個模塊,因為之前沒有用過vue所以惡補了一周的vue了解了一些指令和vuex就開始做項目,排版使用的就是element-ui,這個ui框架用起來是比較方便的,因為對于金融行業pc端來說頁面沒有太炫他華麗,這個ui框架剛好符合我們的需求

遇到的第一個功能點就是面包屑,因為每個頁面都會需要用到,所以經理提議把它封裝起來

效果圖

vue 封裝面包屑組件教程

子組件

首先新建一個頁面(子組件),把頁面的基本樣式實現出來,這里是自己寫的div+css

子組件是封裝好的一個例子,而父組件是每一個頁面,頁面中需要用到面包屑時就引入

vue 封裝面包屑組件教程

父組件

調用子組件

引入子組件路徑

注冊組件

給子組件傳的值

vue 封裝面包屑組件教程

局部組件注冊在components,可以在里面注冊多個

vue 封裝面包屑組件教程

這個里面涉及到一個點就是父組件給子組件傳參

總的來說父傳子就是這三個步驟:父組件中定義值、調用子組件并引用、在引用的標簽上給子組件傳值。

獲取父組件的數據的方式props,定義接收值的類型,文章中接收值的類型是數組

但是有要注意的點:

子組件接受的父組件的值分為——引用類型和普通類型兩種,

普通類型:字符串(String)、數字(Number)、布爾值(Boolean)、空(Null)

引用類型:數組(Array)、對象(Object)

其中,普通類型是可以在子組件中更改,不會影響其他兄弟子組件內同樣調用的來自父組件的值,

但是,引用類型的值,當在子組件中修改后,父組件的也會修改,那么后果就是,其他同樣引用了改值的子組件內部的值也會跟著被修改。除非你有特殊的要求這么去做,否則最好不要這么做。

補充知識:vue element組件實現步驟條形式的復雜表單信息的注冊

實際效果如下

vue 封裝面包屑組件教程

vue代碼如下

<template> <div id='bdy'> <Head/> <div class='tbody'> <el-steps :active='active' finish-status='success'> <el-step></el-step> <el-step></el-step> <el-step></el-step> <el-step></el-step></el-steps><!-- 個人信息 --> <el-form ref='form' :model='form' label-width='80px'><div v-if='active==1'> <el-form-item label='上傳頭像' prop='imageUrl'> <el-upload action='https://jsonplaceholder.typicode.com/posts/' :show-file-list='false' :on-success='handleAvatarSuccess' :before-upload='beforeAvatarUpload' > <img v-if='form.imageUrl' :src='http://www.piao2010.com/bcjs/form.imageUrl' class='avatar'> <i v-else class='el-icon-plus avatar-uploader-icon'></i></el-upload> </el-form-item></div><div v-if='active==2'><el-form-item label='真實姓名' prop='username'> <el-input v-model='form.username'></el-input> </el-form-item> <el-form-item label='手機號碼' prop='tell'> <el-input type='text' v-model='form.tell' autocomplete='off'></el-input> </el-form-item> <el-form-item label='身份證' prop='indentity'> <el-input type='text' v-model='form.indentity' autocomplete='off'></el-input> </el-form-item></div><div v-if='active==3'> <el-form-item label='專長領域:' prop='area'> <br> <el-checkbox-group v-model='form.area' @change='handleCheckedCitiesChange' > <el-checkbox v-for='city in form.cities' :label='city' :key='city'>{{city}}</el-checkbox> </el-checkbox-group> </el-form-item> <el-form-item label='從業資質:' prop='quality'> <br> <el-radio-group v-model='form.quality'> <el-radio :label='0'>國家二級咨詢師</el-radio> <el-radio :label='1'>國家三級咨詢師</el-radio> <el-radio :label='2'>注冊系統咨詢師</el-radio> <el-radio :label='3'>注冊系統督導師</el-radio> <el-radio :label='4'>其他</el-radio> </el-radio-group></el-form-item></div><div v-if='active==4'><el-form-item label='證書編號' prop='number'> <el-input type='text' v-model='form.number' autocomplete='off'></el-input> </el-form-item> <el-form-item label='從業年限' prop='time'> <el-input type='text' v-model='form.time' autocomplete='off'></el-input> </el-form-item> <el-form-item label='個人簡介' prop='instroduce'> <el-input type='text' v-model='form.instroduce' autocomplete='off'></el-input> </el-form-item> <el-form-item> <el-button type='primary' @click='onSubmit'>申請入駐</el-button> </el-form-item></div><el-button @click='next' v-if='active<4'>下一步</el-button> <el-button @click='pre' v-if='active>1'>上一步</el-button> </el-form> </div></div></template><style>.tbody{ width:80%; margin-left:10%; margin-top: 2%;}/* 表單 */.avatar-uploader .el-upload { border: 1px dashed #d9d9d9; border-radius: 6px; cursor: pointer; position: relative; overflow: hidden; } .avatar-uploader .el-upload:hover { border-color: #409EFF; } .avatar-uploader-icon { font-size: 28px; color: #8c939d; width: 178px; height: 178px; line-height: 178px; text-align: center; } .avatar { width: 178px; height: 178px; display: block; }</style><script>//表單js代碼import Head from '../../components/common/Head';import axios from 'axios';import Qs from 'qs';import router from '../../router/router.js'; const cityOptions = [’婚姻家庭’, ’情緒管理’, ’戀愛心理’, ’個人成長’,’人際關系’,’心理健康’,’職場心理’,’親子教育’,’性心理’]; export default{ components: { Head }, data() { return { active: 1, form: { area: [’個人成長’], checkAll: false, cities: cityOptions, isIndeterminate: true, quality: 0, imageUrl: ’’, username : ’’, tell: ’’, indentity: ’’, number:’’, instroduce:’’, time:’’ } } }, methods: { onSubmit() { //this.form.checkedCities獲取多選框的內容 zxs[this.form.radio] this.form.imageUrl //開始提交 在這里進行跨域請求 this.axios({ method: 'post', url: '/api/PsychoSys/tuser.action', data: Qs.stringify(this.form) }) .then(res => { this.$router.push('/tinfo'); }) .catch(function(err) { console.log(err); }); /*在這里進行跨域請求*/ //開始提交 }, handleAvatarSuccess(res, file) { this.form.imageUrl = URL.createObjectURL(file.raw); }, beforeAvatarUpload(file) { const isJPG = file.type === ’image/jpeg’; const isLt2M = file.size / 1024 / 1024 < 2; if (!isJPG) { this.$message.error(’上傳頭像圖片只能是 JPG 格式!’); } if (!isLt2M) { this.$message.error(’上傳頭像圖片大小不能超過 2MB!’); } return isJPG && isLt2M; }, handleCheckAllChange(val) { this.form.area = val ? cityOptions : []; this.isIndeterminate = false; }, handleCheckedCitiesChange(value) { let checkedCount = value.length; this.checkAll = checkedCount === this.form.cities.length; this.isIndeterminate = checkedCount > 0 && checkedCount < this.form.cities.length; }, next() { if (this.active++ > 3) this.active = 1; }, pre() { if (this.active-- < 2) this.active = 1; } } } //表單js代碼</script>

后臺是用java的ssh框架做的

package cn.com.service;import java.io.IOException;import java.util.List; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Repository;import org.springframework.transaction.annotation.Transactional; import cn.com.bean.Teacher; import com.opensymphony.xwork2.ModelDriven;@Repository(value='teacherUser')@Scope('prototype')public class TeacherUser implements ModelDriven<Teacher>{ @Autowired private SessionFactory sf; @Autowired private Teacher tea; private List<String> area; public List<String> getArea() { return area; } public void setArea(List<String> area) { this.area = area; } @Transactional public String regedit_user(){ //普通用戶注冊 ,用戶名不能重復 Session session=sf.getCurrentSession(); //查詢是否重復 String sql='from Teacher where username=?'; Query query=session.createQuery(sql); query.setString(0, tea.getUsername()); Teacher t=(Teacher)query.uniqueResult(); String toast=''; String [] zxs ={'國家二級咨詢師','國家三級咨詢師','注冊系統咨詢師','注冊系統督導師','其他'}; String q=''; if(t!=null){ toast='fail'; }else{ //處理數據 Integer o=Integer.parseInt(tea.getQuality()); tea.setQuality(zxs[o]); tea.setAreas(area.toString()); toast='success'; session.save(tea); } HttpServletResponse response = ServletActionContext.getResponse(); response.setCharacterEncoding('utf-8'); try { response.getWriter().write(toast); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } public Teacher getModel() { return tea; }}

以上這篇vue 封裝面包屑組件教程就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Vue
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
日韩午夜精品视频| 在线免费观看日本欧美| 久久人人九九| 一区二区三区在线免费观看| 97久久精品人人做人人爽| 欧美福利视频导航| 久久精品国产99国产精品| 日韩午夜一区| 亚洲免费资源在线播放| 亚洲激情亚洲| 欧美日韩国产色站一区二区三区| 偷偷要91色婷婷| 蜜桃av综合| 午夜伊人狠狠久久| 老鸭窝91久久精品色噜噜导演| 亚洲成人av一区二区| 国产日韩欧美一区| 亚洲成人综合视频| 老妇喷水一区二区三区| 日韩和的一区二区| 一本高清dvd不卡在线观看| 天天做天天摸天天爽国产一区 | 久色婷婷小香蕉久久| 欧美日韩中文另类| 国产一区 二区| 日韩欧美国产三级| 91亚洲国产成人精品一区二三| 国产亚洲成av人在线观看导航 | 欧美自拍偷拍午夜视频| 经典三级在线一区| 日韩一区二区在线看片| 成人中文字幕在线| 337p粉嫩大胆色噜噜噜噜亚洲| av高清久久久| 国产精品国产三级国产专播品爱网| 亚洲日本视频| 香蕉影视欧美成人| 在线免费视频一区二区| 国产成人免费视频一区| 26uuu精品一区二区| 国产一区二区三区无遮挡| 一区二区三区欧美在线观看| 久久久久一区| 久久精品免费看| 日韩欧美一区中文| 欧美va亚洲va| 欧美日本一区| 亚洲午夜电影在线| 欧美日免费三级在线| 国产露脸91国语对白| 久久综合色鬼综合色| 精品成人一区| 午夜影视日本亚洲欧洲精品| 欧美精品123区| 欧美一区影院| 一区二区三区在线观看国产| 色国产综合视频| 国产不卡视频一区| 国产精品欧美一级免费| 国产一区二区你懂的| 精久久久久久久久久久| 精品乱人伦小说| 亚洲小说欧美另类婷婷| 亚洲大片在线观看| 在线电影国产精品| 色综合天天性综合| 亚洲永久免费av| 欧美在线一区二区三区| heyzo一本久久综合| 亚洲精品中文在线影院| 欧美亚洲图片小说| 91丨九色丨蝌蚪丨老版| 亚洲第一二三四区| 欧美大胆人体bbbb| 亚洲经典三级| 久久精品国产99国产| 91精品国产91久久综合桃花| 欧美精品三区| 日日夜夜精品视频天天综合网| 日韩精品一区二区三区在线观看 | 日韩亚洲精品在线| 精品一区二区影视| 欧美激情一区二区三区不卡 | 久热精品在线| 97久久人人超碰| 亚洲第一久久影院| 精品国内片67194| 亚洲人成在线影院| 精品在线免费视频| 中文一区二区完整视频在线观看| 久久黄色网页| 91免费视频大全| 日韩综合一区二区| 久久精品人人做人人综合| 亚洲综合日韩| 成人精品国产福利| 久久国产精品99久久久久久老狼 | 日本成人中文字幕| 中文无字幕一区二区三区| 在线亚洲人成电影网站色www| 欧美高清视频一区| 久久er精品视频| 日韩一区在线播放| 日韩一区二区在线看| 亚洲专区欧美专区| 99麻豆久久久国产精品免费优播| 亚洲国产成人精品视频| 国产亚洲精品超碰| 欧美性做爰猛烈叫床潮| 尹人成人综合网| 国产成人av一区二区三区在线观看| 一区二区免费在线| 91成人网在线| 激情欧美一区二区三区| 国产精品自在在线| 亚洲最色的网站| 久久尤物电影视频在线观看| 色呦呦国产精品| 国产精品啊啊啊| 国产91丝袜在线观看| 欧美一区二区三区影视| 久久精品天堂| 很黄很黄激情成人| 成人深夜福利app| 奇米影视7777精品一区二区| 亚洲婷婷在线视频| 精品国产露脸精彩对白| 欧美日韩一区高清| 国产精品久久亚洲7777| 欧美大香线蕉线伊人久久国产精品| 久久精品久久综合| 亚洲成人精品一区| 中文字幕制服丝袜一区二区三区| 精品国产一区二区三区四区四| 久久一区二区三区av| 欧美国产免费| 成人av手机在线观看| 精品一区二区三区免费观看 | 激情综合在线| 99国产欧美久久久精品| 色欧美片视频在线观看| 国产精品日韩欧美一区二区| 亚洲天堂男人| 91麻豆高清视频| 国产成人精品亚洲日本在线桃色 | 亚洲女人的天堂| 国产精品免费看片| 久久久国产精品麻豆| 精品少妇一区二区三区| 日韩一区二区三区在线| 69精品人人人人| 欧美日韩亚洲另类| 在线观看免费成人| 在线国产电影不卡| 一本色道久久综合狠狠躁的推荐| 一区二区精品| 1024成人| 国产精品大片| 91啪亚洲精品| 91亚洲国产成人精品一区二三| 成人黄页在线观看| 成人综合在线观看| 丁香激情综合国产| 国产精品1024| 高清beeg欧美| 波多野结衣中文一区| 成人福利视频在线| 成人av网在线| 91免费看片在线观看| 欧美三级乱码| 91久久精品国产91久久性色tv| 一区二区冒白浆视频| 国产偷久久久精品专区| 亚洲一区二区在线免费观看| 亚洲欧美日韩综合国产aⅴ| 噜噜噜噜噜久久久久久91| 麻豆精品视频| 在线免费精品视频| 欧美另类一区二区三区| 欧美一区二区网站| 精品免费国产二区三区| 国产婷婷色一区二区三区在线| 欧美激情一区二区三区蜜桃视频 | 精品区一区二区| 精品久久久三级丝袜| 久久综合av免费| 国产欧美日产一区| 亚洲视频在线一区观看| 亚洲精品福利视频网站| 亚洲国产日韩av| 青青草原综合久久大伊人精品 | 影音先锋久久资源网| 好看的日韩av电影| 99视频精品| 色婷婷综合激情| 欧美日韩国产a| 久久综合色之久久综合| 国产精品入口麻豆原神| 亚洲人成网站精品片在线观看| 亚洲综合一区二区精品导航|