摘要:在父組件使用方法父組件模擬異步數(shù)據(jù)異步的數(shù)據(jù)子組件使用來(lái)監(jiān)聽(tīng)父組件改變的,使用來(lái)代替既然只會(huì)執(zhí)行一次,但是又想監(jiān)聽(tīng)改變的值做其他事情的話(huà),可使用這個(gè)方法。
我一直都相信,決定未來(lái)的是自信與成長(zhǎng)速度,成長(zhǎng)的過(guò)程中,整理是一個(gè)非常重要的環(huán)節(jié),接下來(lái)是我整理的系統(tǒng)組件開(kāi)發(fā)常用的部分。
本文的主要內(nèi)容有:
1.table內(nèi)編輯 2.高度不固定,顯示隱藏過(guò)渡動(dòng)畫(huà) 3.解決vue父組件傳遞props異步數(shù)據(jù)到子組件的問(wèn)題一、vue table內(nèi)編輯
需求:
1.table點(diǎn)擊編輯按鈕時(shí),顯示input(此input可修改table里某一行某一列的內(nèi)容)、取消按鈕、保存按鈕。
2.點(diǎn)擊保存按鈕,則保存編輯后的內(nèi)容,點(diǎn)擊取消則不保存。
思路:
1.點(diǎn)擊編輯時(shí)編輯按鈕隱藏,保存和取消顯示??墒褂?set,在每一行數(shù)據(jù)里增加一個(gè)屬性edit,this.$set(v, "edit", false);,組件標(biāo)簽里用v-show=“scope.row.edit 進(jìn)行顯示隱藏。$set官方解釋?zhuān)ㄏ蝽憫?yīng)式對(duì)象中添加一個(gè)屬性,并確保這個(gè)新屬性同樣是響應(yīng)式的,且觸發(fā)視圖更新。它必須用于向響應(yīng)式對(duì)象上添加新屬性)。
2.編輯由于input是雙向綁定,輸入的時(shí)候就改變了數(shù)據(jù),點(diǎn)擊取消時(shí),需恢復(fù)原來(lái)的數(shù)據(jù)。需 “拷貝” 一份原來(lái)的數(shù)據(jù),如取消則使用這個(gè)數(shù)據(jù)。代碼有兩部分,一部分是只針對(duì)一列,名字寫(xiě)實(shí),理解思路。另一部分是實(shí)際項(xiàng)目開(kāi)發(fā)能用到的,每一列都可編輯,并且名字可變。代碼如下:
(1)理解思路,title列進(jìn)行可編輯
請(qǐng)求table數(shù)據(jù) this.$http.get(this.tableUrl).then(response => { let commTable1 =response.data.tableData; this.list = commTable1 .map(v => { this.$set(v, "edit", false); v.oldTitle = v.title ; return v }) }) 點(diǎn)擊保存 save(row) { row.edit = false row.oldTitle = row.title } 點(diǎn)擊取消 cancel(row) { row.title = row.oldTitle row.edit = false }
(2)table每一列進(jìn)行編輯
table請(qǐng)求數(shù)據(jù) this.$http.get(this.tableUrl).then(response => { response = response.data; let commTable1 =response.tableData; this.commTable= commTable1.map(v => { for(var obj in v){ v[`old${obj}`]=v[obj] } this.$set(v, "edit", false); return v }) }); 點(diǎn)擊保存 save(row) { for(var obj in row){ let str = ""; if(obj.indexOf("old")>-1){ str = obj.replace("old",""); row[obj]=row[str]; } } row.edit = false } } 點(diǎn)擊取消 cancel(row) { let str = ""; if(obj.indexOf("old")>-1){ str = obj.replace("old",""); row[str]=row[obj]; } } row.edit = false; }二、高度不固定,上下滑動(dòng)動(dòng)畫(huà)
不管是vue的過(guò)渡動(dòng)畫(huà),還是element的過(guò)渡動(dòng)畫(huà),都是需要高度固定,無(wú)法滿(mǎn)足需求。接下來(lái)是一個(gè)大神封裝的一個(gè)函數(shù)式組件,這個(gè)組件只適用于單個(gè)內(nèi)容,如果內(nèi)容是v-for循環(huán),且高度不固定,我做了一下改裝,使用的是vue 的transition-group。Vue.JS實(shí)現(xiàn)垂直方向展開(kāi)、收縮不定高度模塊的JS組件
const elTransition = "0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out" const Transition = { "before-enter" (el) { el.style.transition = elTransition if (!el.dataset) el.dataset = {} el.dataset.oldPaddingTop = el.style.paddingTop el.dataset.oldPaddingBottom = el.style.paddingBottom el.style.height = 0 el.style.paddingTop = 0 el.style.paddingBottom = 0 }, "enter" (el) { el.dataset.oldOverflow = el.style.overflow if (el.scrollHeight !== 0) { el.style.height = el.scrollHeight + "px" el.style.paddingTop = el.dataset.oldPaddingTop el.style.paddingBottom = el.dataset.oldPaddingBottom } else { el.style.height = "" el.style.paddingTop = el.dataset.oldPaddingTop el.style.paddingBottom = el.dataset.oldPaddingBottom } el.style.overflow = "hidden" }, "after-enter" (el) { el.style.transition = "" el.style.height = "" el.style.overflow = el.dataset.oldOverflow }, "before-leave" (el) { if (!el.dataset) el.dataset = {} el.dataset.oldPaddingTop = el.style.paddingTop el.dataset.oldPaddingBottom = el.style.paddingBottom el.dataset.oldOverflow = el.style.overflow el.style.height = el.scrollHeight + "px" el.style.overflow = "hidden" }, "leave" (el) { if (el.scrollHeight !== 0) { el.style.transition = elTransition el.style.height = 0 el.style.paddingTop = 0 el.style.paddingBottom = 0 } }, "after-leave" (el) { el.style.transition = "" el.style.height = "" el.style.overflow = el.dataset.oldOverflow el.style.paddingTop = el.dataset.oldPaddingTop el.style.paddingBottom = el.dataset.oldPaddingBottom } } export default { name: "VerticalToggle", functional: true, render (h, { children }) { const data = { on: Transition } return h("transition", data, children) } }
組件中可這樣使用
import verticalToggle from "./vertical-toggle.js";以上適用于單個(gè)內(nèi)容,如果內(nèi)容是v-for循環(huán),且高度不固定,使用的是vue 的transition-group **vue組件:** 123
{{item2.name}}
方法:
enter(el){ el.style.height = el.scrollHeight + "px"; el.style.paddingTop = el.dataset.oldPaddingTop el.style.paddingBottom = el.dataset.oldPaddingBottom }, beforeLeave(el){ el.dataset.oldPaddingTop = el.style.paddingTop el.dataset.oldPaddingBottom = el.style.paddingBottom el.dataset.oldOverflow = el.style.overflow el.style.height = el.scrollHeight + "px" el.style.overflow = "hidden" }, leave(el){ el.style.height = 0 el.style.paddingTop = 0 el.style.paddingBottom = 0 },
}
css:
.fade2-enter-active,.fade2-leave-active { transition: all .5s; } .fade-enter,.fade2-enter,.fade-leave-to,.fade2-leave-to{ height: 0px; }
如果有需求是還要在顯示的組件里添加內(nèi)容,則還需下面代碼,因?yàn)閠his.$refs不支持響應(yīng),所以就在updated生命周期里寫(xiě)了。
updated() { if(this.flog1){ for(let obj of this.list){ let index=this.list.indexOf(obj) this.$refs.fade[index].style.height="auto"; } this.flog2=false; } },三、解決vue父組件傳遞props異步數(shù)據(jù)到子組件的問(wèn)題
data為異步獲取的數(shù)據(jù),想傳遞給子組件使用
父組件子組件child.vue 子組件{{childData}}
子組件的html中的{{childData}}的值會(huì)隨著父組件的值而改變,但是created里面的卻不會(huì)發(fā)生改變(生命周期問(wèn)題)
解決辦法:我這里給出我經(jīng)常用的兩種常用的解決方案,還有其他的解決方案 https://www.jb51.net/article/...。
1.在父組件使用v-if 方法
父組件
2.子組件使用watch來(lái)監(jiān)聽(tīng)父組件改變的prop,使用methods來(lái)代替created,既然created只會(huì)執(zhí)行一次,但是又想監(jiān)聽(tīng)改變的值做其他事情的話(huà),可使用這個(gè)方法。
子組件{{childData}}
以上是整理的內(nèi)容。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/95855.html
摘要:使用插件安裝使用測(cè)試訪(fǎng)問(wèn)頁(yè)面注意大大的紅字,如果要在本項(xiàng)目下測(cè)試,需要修改項(xiàng)目名稱(chēng),不然報(bào)項(xiàng)目名字和包名字是一致的錯(cuò),無(wú)法安裝的如下結(jié)束語(yǔ)這個(gè)筆記繼上一篇插件開(kāi)發(fā)流程詳解從開(kāi)發(fā)到發(fā)布至一,替換了開(kāi)發(fā)和測(cè)試的項(xiàng)目架構(gòu)。 前記:上一篇 https://www.cnblogs.com/adouw...,說(shuō)到了一個(gè)完整的vue插件開(kāi)發(fā)、發(fā)布的流程,總結(jié)下來(lái)就講了這么一個(gè)事,如何注入vue,...
摘要:五六月份推薦集合查看最新的請(qǐng)點(diǎn)擊集前端最近很火的框架資源定時(shí)更新,歡迎一下。蘇幕遮燎沈香宋周邦彥燎沈香,消溽暑。鳥(niǎo)雀呼晴,侵曉窺檐語(yǔ)。葉上初陽(yáng)乾宿雨,水面清圓,一一風(fēng)荷舉。家住吳門(mén),久作長(zhǎng)安旅。五月漁郎相憶否。小楫輕舟,夢(mèng)入芙蓉浦。 五、六月份推薦集合 查看github最新的Vue weekly;請(qǐng)::點(diǎn)擊::集web前端最近很火的vue2框架資源;定時(shí)更新,歡迎 Star 一下。 蘇...
摘要:五六月份推薦集合查看最新的請(qǐng)點(diǎn)擊集前端最近很火的框架資源定時(shí)更新,歡迎一下。蘇幕遮燎沈香宋周邦彥燎沈香,消溽暑。鳥(niǎo)雀呼晴,侵曉窺檐語(yǔ)。葉上初陽(yáng)乾宿雨,水面清圓,一一風(fēng)荷舉。家住吳門(mén),久作長(zhǎng)安旅。五月漁郎相憶否。小楫輕舟,夢(mèng)入芙蓉浦。 五、六月份推薦集合 查看github最新的Vue weekly;請(qǐng)::點(diǎn)擊::集web前端最近很火的vue2框架資源;定時(shí)更新,歡迎 Star 一下。 蘇...
摘要:鑒于該篇文章閱讀量大,回復(fù)的同學(xué)也挺多的,特地抽空寫(xiě)了一篇下的使用方法,傳送門(mén)使用構(gòu)建單頁(yè)應(yīng)用新篇華麗的分割線(xiàn)原文地址前言在最近學(xué)習(xí)的時(shí)候,看到國(guó)外一篇講述了如何使用和來(lái)構(gòu)建一個(gè)簡(jiǎn)單筆記的單頁(yè)應(yīng)用的文章。 鑒于該篇文章閱讀量大,回復(fù)的同學(xué)也挺多的,特地抽空寫(xiě)了一篇 vue2.0 下的 vuex 使用方法,傳送門(mén):使用 Vuex + Vue.js 構(gòu)建單頁(yè)應(yīng)用【新篇】 ---------...
閱讀 3681·2021-11-24 09:39
閱讀 2637·2021-11-15 11:37
閱讀 2365·2021-11-11 16:55
閱讀 5713·2021-10-14 09:43
閱讀 3785·2021-10-08 10:05
閱讀 3089·2021-09-13 10:26
閱讀 2398·2021-09-08 09:35
閱讀 3589·2019-08-30 15:55