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