摘要:在的學(xué)習(xí)中,一開始我是自己寫組件練手的,在這個(gè)過(guò)程中我遇到一個(gè)問(wèn)題父組件傳遞給子組件參數(shù)直接在子組件里直接使用是可以實(shí)時(shí)更新的如果在,等聲明或者直接賦值給的時(shí)候,再用的時(shí)候是不可以實(shí)時(shí)更新的內(nèi)部的是可以實(shí)時(shí)更新的但是內(nèi)部不可以強(qiáng)制去改變父元
在vue的學(xué)習(xí)中,一開始我是自己寫組件練手的,在這個(gè)過(guò)程中我遇到一個(gè)問(wèn)題:
props:父組件傳遞給子組件參數(shù)
(1)props直接在子組件里直接使用是可以實(shí)時(shí)更新的
(2)props如果在created,mounted等聲明或者直接賦值給data的時(shí)候,再用data的時(shí)候是不可以實(shí)時(shí)更新的
(3)內(nèi)部的data是可以實(shí)時(shí)更新的
(4)但是內(nèi)部不可以強(qiáng)制去改變父元素傳遞過(guò)來(lái)的props,這樣是官方不允許的而且是不嚴(yán)謹(jǐn)?shù)?/p>
那么,我在寫模態(tài)框組件的時(shí)候就產(chǎn)生一個(gè)很矛盾的問(wèn)題,如果父級(jí)props控制了組件內(nèi)部的顯示和隱藏,
內(nèi)部點(diǎn)擊模態(tài)框陰影的時(shí)候也可以讓其自動(dòng)隱藏,我到底去修改什么值,修改了之后怎么去改變父組件傳遞過(guò)來(lái)的props,
給全局一個(gè)反饋呢。
在看過(guò)文章和自己動(dòng)手操作后選取了一種方式,將內(nèi)部的data和props進(jìn)行關(guān)聯(lián),采用vue中v-modal的原理,值發(fā)生變化(input事件),
對(duì)應(yīng)的數(shù)據(jù)也發(fā)生相應(yīng)的改變:
不多說(shuō),直接貼代碼:
子組件:
template:
模態(tài)框
javascript:
import { mapState, mapActions } from "vuex" import _ from "lodash" export default { name: "msg-modal", data () { return { isShow: this.value } }, props: { value: { type: Boolean, default: false }, closeable: { type: Boolean, default: false }, btnTxt: { type: [String, Number], default: "確定" }, content: { default: "內(nèi)容" } }, watch: { value (val) { this.isShow = val; }, isShow (val) { this.$emit("input", val); } }, computed: { ...mapState({ allAnchorList: state => state.anchor.list.data }) }, methods: { ...mapActions(["removeAnchor"]), onClick () { this.$emit("onClick") }, onMaskClose () { if(!this.closeable) { return } Object.assign(this.$data, this.$options.data()) } } }
less:
.modal { position: fixed; z-index: 800; top: 0; left: 0; width: 100%; height: 100%; display: table; transition: all .3s; background-color: transparent; &.active{ opacity: 1; } .modal-mask { position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: -1; background-color: rgba(0, 0, 0, .5); } .modal-wrapper { display: table-cell; vertical-align: middle; .modal-container { width: 300px; margin: 0 auto; border-radius: 2px; //box-shadow: 0 2px 8px rgba(0, 0, 0, .33); transition: all .3s ease; font-family: Helvetica, Arial, sans-serif; .header{ position: relative; backgroud-color: #fff, min-height: 50px; } .modal-body { margin: 20px 0; } .footer { padding-bottom: 26px; overflow: hidden; border-bottom-left-radius: 4px !important; border-bottom-right-radius: 4px !important; background-color: #fff; .btn { height: 36px; line-height: 36px; width: 230px; margin: 0 auto; color: #fff; font-size: 14px; text-align: center; cursor: pointer; user-select: none; background-color: #2859ED; border-radius: 4px; } } } } }
父組件的引用:
template:
javascript:
樣式隨便寫的,
主要就是用vue的v-model原理,將值與被傳遞的props實(shí)現(xiàn)雙向綁定,
需要注意的是在組件mounted的時(shí)候需要對(duì)組件初始化中的傳遞的props賦值給綁定的v-model的value
自己也是才摸索vue全家桶階段,才沒(méi)做兩個(gè)項(xiàng)目
有不足的地方請(qǐng)大家見(jiàn)諒和指導(dǎo)
歡迎大家討論
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/100111.html
摘要:在項(xiàng)目中開始使用來(lái)構(gòu)建項(xiàng)目了,跟很大的一處不同在于取消了的雙向綁定,改成只能從父級(jí)傳到子級(jí)的單向數(shù)據(jù)流,初衷當(dāng)然是好的,為了避免雙向綁定在項(xiàng)目中容易造成的數(shù)據(jù)混亂。能不能不寫來(lái)實(shí)現(xiàn)的雙向綁定呢,答案是可以的。 在項(xiàng)目中開始使用vue2來(lái)構(gòu)建項(xiàng)目了,跟 vue1 很大的一處不同在于2 取消了props 的雙向綁定,改成只能從父級(jí)傳到子級(jí)的單向數(shù)據(jù)流,初衷當(dāng)然是好的,為了避免雙向綁定在項(xiàng)目...
摘要:儲(chǔ)存訂閱器因?yàn)閷傩员槐O(jiān)聽(tīng),這一步會(huì)執(zhí)行監(jiān)聽(tīng)器里的方法這一步我們把也給弄了出來(lái),到這一步我們已經(jīng)實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的雙向綁定了,我們可以嘗試把兩者結(jié)合起來(lái)看下效果??偨Y(jié)本文主要是對(duì)雙向綁定原理的學(xué)習(xí)與實(shí)現(xiàn)。 當(dāng)今前端天下以 Angular、React、vue 三足鼎立的局面,你不選擇一個(gè)陣營(yíng)基本上無(wú)法立足于前端,甚至是兩個(gè)或者三個(gè)陣營(yíng)都要選擇,大勢(shì)所趨。 所以我們要時(shí)刻保持好奇心,擁抱變化,...
摘要:在模式中一般把層算在層中,只有在理想的雙向綁定模式下,才會(huì)完全的消失。層將通過(guò)特定的展示出來(lái),并在控件上綁定視圖交互事件,一般由框架自動(dòng)生成在瀏覽器中。三大框架的異同三大框架都是數(shù)據(jù)驅(qū)動(dòng)型的框架及是雙向數(shù)據(jù)綁定是單向數(shù)據(jù)綁定。 MVVM相關(guān)概念 1) MVVM典型特點(diǎn)是有四個(gè)概念:Model、View、ViewModel、綁定器。MVVM可以是單向綁定也可以是雙向綁定甚至是不綁...
摘要:在的學(xué)習(xí)中,一開始我是自己寫組件練手的,在這個(gè)過(guò)程中我遇到一個(gè)問(wèn)題父組件傳遞給子組件參數(shù)直接在子組件里直接使用是可以實(shí)時(shí)更新的如果在,等聲明或者直接賦值給的時(shí)候,再用的時(shí)候是不可以實(shí)時(shí)更新的內(nèi)部的是可以實(shí)時(shí)更新的但是內(nèi)部不可以強(qiáng)制去改變父元 在vue的學(xué)習(xí)中,一開始我是自己寫組件練手的,在這個(gè)過(guò)程中我遇到一個(gè)問(wèn)題:props:父組件傳遞給子組件參數(shù)(1)props直接在子組件里直接使用...
閱讀 1053·2021-11-24 09:38
閱讀 1160·2021-11-23 09:51
閱讀 3123·2021-11-16 11:44
閱讀 1941·2021-09-22 15:52
閱讀 1779·2021-09-10 11:20
閱讀 1482·2019-08-30 13:47
閱讀 1407·2019-08-29 12:36
閱讀 3415·2019-08-26 10:43