Vue實現組件props雙向綁定解決方案

注意: 子組件不能直接修改prop過來的數據,會報錯

方案一:

  1. 用data對象中創建一個props屬性的副本

  2. watch props屬性 賦予data副本 來同步組件外對props的修改

  3. watch data副本,emit一個函數 通知到組件外

HelloWorld組件代碼如下:(代碼里面有相應的注釋)

<template><div class="hello"><h1 v-show="visible">測試顯示隱藏</h1><div @click="cancel">點我點我</div></div>
</template><script>
export default {name: 'HelloWorld',props: {value: {type: Boolean,default:false}},data () {return {visible: false}},watch:{value(val) {this.visible = val;},// 只有這一步 才觸發父組件的方法 由父組件的 paretnVisibleChange 方法去改變父組件的數據visible(val) { this.$emit("paretnVisibleChange",val); } },// 子組件修改的只能是子組件 本身的data數據methods:{cancel(){this.visible = !this.visible;}},
// 注意這段代碼 為了同步父組件的數據mounted() {if (this.value) {this.visible = true;}}
}
</script>
<style scoped></style>

父組件代碼如下:

<template><div id="app"><HelloWorld :value = 'visible' @paretnVisibleChange="visibleChange" /></div>
</template><script>
import HelloWorld from './components/HelloWorld'export default {name: 'App',components: {HelloWorld},data () {return {visible: true}},methods:{// 父子組件就是靠的這個方法改變數據的visibleChange(val){this.visible = val;}}
}
</script>

方案一 的缺點就是 父組件必須有個?visibleChange?這樣的方法,有點累贅。

?

這時候 想到了 v-model?

因為

<input v-model = 'someThing'>

是下面這段代碼的語法糖

<input :value = 'someThing'  @input = 'someThing = $event.target.value'>

也就是說 v-mode 自帶了 一個改變父組件的方法 類似方案一的 ??paretnVisibleChange

但是使用 v-model 的時候 需要注意兩點:

1. 子組件要接受 ?value ?屬性

2. value改變時 要觸發input 事件

?

方案二:

HelloWorld 子組件的代碼如下;

  <div class="hello"><h1 v-show="visible">測試顯示隱藏</h1><div @click="cancel">點我點我</div></div>
</template><script>
export default {name: 'HelloWorld',props: {value: {type: Boolean,default:true}},data () {return {visible: false}},watch:{value(val) {this.visible = val;},// 子組件 改變的就是這段代碼visible(val) {this.$emit("input",val);}},methods:{cancel(){this.visible = !this.visible;}},mounted() {if (this.value) {this.visible = true;}}
}
</script>

父組件代碼如下:(父組件省去了 paretnVisibleChange 方法)

<template><div id="app"><HelloWorld v-mode = 'visible'/></div>
</template><script>
import HelloWorld from './components/HelloWorld'export default {name: 'App',components: {HelloWorld},data () {return {visible: true}}
}
</script>

方案三:

vue 2.3.0之后新增了 .sync 屬性 使用方法跟 v-model ?類似 具體 請參考 :?https://cn.vuejs.org/v2/guide/components-custom-events.html#sync-修飾符

下面我寫了一個簡單的sync 的使用實例:

父組件的代碼如下:

?

<liis="DragCompent"v-for="(item, index) in layoutItem":item="item"v-model="cloneLeftItemText":leftDragItemIsDraged.sync = 'leftDragItemIsDraged':key="index"></li>

子組件的代碼如下:

props: {leftDragItemIsDraged: {type: Boolean,default: false}},
watch:{leftDragItemIsDraged(val) {this.thisLeftDragItemIsDraged = val;
},
thisLeftDragItemIsDraged(val){this.$emit('update:leftDragItemIsDraged', val)
}
}

?

效果如下:

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249188.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249188.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249188.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

統計詞頻問題

adict{} xinput().lower() #把單詞大寫字母改為小寫字母 for i in x:if i in [,,.,"",",!]:xx[:x.index(i)]x[x.index(i)1:] #把句子中的非字母字符用切片操作刪掉 asetset(x.split( )) #集合的好處在于不重復 alstx.split( ) for n in aset:tempdict{n:alst.…

正則表達式常用函數

<?php //preg_match("正則表達式","字符串")用于在字符串中查找匹配項 $email "987044391qq.com"; if (preg_match("/^([a-zA-Z0-9])([.a-zA-Z0-9_-])*([.a-zA-Z0-9_-])([.a-zA-Z0-9_-])([.a-zA-Z0-9_-])$/",$email)){ echo 匹…

利用js的閉包原理做對象封裝及調用方法

創建一個js文件&#xff0c;名為testClosure.js&#xff1a; ? 1 2 3 4 5 6 7 8 9 (function () { function a() { alert(i am a); } outFunc function () { a(); } })(); 這里不論寫多少個function,a b c d ...外面都調用不到&#xff0c;包括這里面va…

Flask系列06--(中間件)Flask的特殊裝飾器 before_request,after_request, errorhandler

一.使用 Flask中的特殊裝飾器(中間件)方法常用的有三個 app.before_request # 在請求進入視圖函數之前app.after_request # 在請求結束視圖函數之后 響應返回客戶端之前app.errorhandler(404) # 重定義錯誤信息before_request def func():passafter_request def func(ret): # …

Flask 中內置的 Session

Flask中的Session非常的奇怪,他會將你的SessionID存放在客戶端的Cookie中,使用起來也非常的奇怪 1. Flask 中 session 是需要 secret_key 的 from flask import session app Flask(__name__) app.secret_key "DragonFire" secret_key 實際上是用來加密字符串的,如果…

CSS像素、物理像素、邏輯像素、設備像素比、PPI、Viewport

最近看了很多這方面的文章&#xff0c;能搜到的基本看了個遍&#xff0c;但感覺還是似懂非懂&#xff0c;知道這個東西&#xff0c;很難說出這是個什么東西&#xff0c;先整理一些概念&#xff0c;慢慢消化&#xff0c;以后慢慢探索其中的原因。 1、PX(CSS pixels) 1.1 定義 …

【轉】10條你不可不知的css規則

10條你不可不知的css規則 Posted on 2006-12-20 10:33 雨中太陽 閱讀(343) 評論(1) 編輯 收藏 &#xff1a;【譯】10條你不可不知的css規則正文&#xff1a; Published December 6th, 2004 in CssStaff Tags: No Tags. 原文地址&#xff1a;Ten CSS Tricks You May not Know k…

Python 面向對象【1】

對象 屬性 方法面向對象特征&#xff1a;分裝 繼承 多態【不同對象對同一方法響應不同行動】類定義class xxx:........類對象類對象支持兩種操作&#xff1a;屬性引用和實例化 屬性引用 使用和 Python 中所有的屬性引用一樣的標準語法&#xff1a;類對象名.屬性名 類對象創建…

【前端面試】HTML5+CSS3初級面試1

最近剛好在看前端的面試&#xff0c;把看到的內容總結一下&#xff0c;方便大家一起學習。 1、簡單說一下對HTML5CSS3的了解。 HTML5和CSS3不僅是兩項新的Web技術標準&#xff0c;而且代表了下一代HTML和CSS技術。其未來的發展前景已經可以預見&#xff0c;那就是HTML5必將被越…

福大軟工 · 第八次作業(課堂實戰)- 項目UML設計(團隊)

1、隊伍信息&#xff1a; 隊伍名稱&#xff1a;彳艮彳亍團隊 學號名本次作業博客鏈接031602219奇豪(隊長)https://www.cnblogs.com/S031602219/p/9822576.html041602209毓明http://www.cnblogs.com/mingsonic/p/9820702.html041602204水源http://www.cnblogs.com/littlenorthwe…

【轉發】實現yolo3模型訓練自己的數據集總結

原文鏈接&#xff1a;實現yolo3模型訓練自己的數據集總結 經過兩天的努力&#xff0c;借鑒網上眾多博客&#xff0c;在自己電腦上實現了使用yolo3模型訓練自己的數據集并進行測試圖片。本文主要是我根據下面參考文章一步步實施過程的總結&#xff0c;可能沒參考文章中那么詳細&…

詳解 vue-cli 的打包配置文件代碼(帶注釋)

一、前言 對于webpack基礎不好&#xff0c;node指令不通的童鞋。估計對自己搭建Vue、react腳手架是相當頭疼的&#xff0c;有種無從下手的感覺。然而&#xff0c;從頭看這2塊&#xff0c;耗時太長&#xff0c;而且說實話得練才行&#xff0c;不練練手看不明白。那大多數人就采取…

NoClassDefFoundError

技術之路最公平也最殘酷的原因是&#xff1a;沒有捷徑&#xff0c;需要日積月累的積累&#xff0c;以及對技術持久的熱情。NoClassDefFoundError這個錯誤一般就兩種情況&#xff1a;1、沒有引入相應的jar包2、兩個jar包中都有這個class&#xff0c;無法確認是引用的哪一個&…

【記錄一下】從0到1 我的python開發之路

請設計實現一個商城系統&#xff0c;商城主要提供兩個功能&#xff1a;商品管理、會員管理。商品管理&#xff1a;- 查看商品列表 - 根據關鍵字搜索指定商品 - 錄入商品會員管理&#xff1a;【無需開發&#xff0c;如選擇則提示此功能不可用&#xff0c;正在開發中&#xff0c;…

Python10/22--面向對象編程/類與對象/init函數

類&#xff1a; 語法: class關鍵字 類名# 類名規范 大寫開頭 駝峰命名法class SHOldboyStudent: # 描述該類對象的特征 school "上海Oldboy" name "矮根" age 68 gender "unknown" # 在定義階段 # 只要包含該類的py被…

Django Form和ModelForm組件

Form介紹 我們之前在HTML頁面中利用form表單向后端提交數據時&#xff0c;都會寫一些獲取用戶輸入的標簽并且用form標簽把它們包起來。 與此同時我們在好多場景下都需要對用戶的輸入做校驗&#xff0c;比如校驗用戶是否輸入&#xff0c;輸入的長度和格式等正不正確。如果用戶輸…

ESLint 規則詳解

前端界大神 Nicholas C. Zakas 在 2013 年開發的 ESLint&#xff0c;極大地方便了大家對 Javascript 代碼進行代碼規范檢查。這個工具包含了 200 多條 Javascript 編碼規范且運行迅速&#xff0c;是幾乎每個前端項目都必備的輔助工具。可是&#xff0c;這么多規則&#xff0c;每…

全文搜索引擎 ElasticSearch 還是 Solr?

原文鏈接 最近項目組安排了一個任務&#xff0c;項目中用到了全文搜索&#xff0c;基于全文搜索 Solr&#xff0c;但是該 Solr 搜索云項目不穩定&#xff0c;經常查詢不出來數據&#xff0c;需要手動全量同步&#xff0c;而且是其他團隊在維護&#xff0c;依賴性太強&#xff0…

對局匹配

問題描述小明喜歡在一個圍棋網站上找別人在線對弈。這個網站上所有注冊用戶都有一個積分&#xff0c;代表他的圍棋水平。小明發現網站的自動對局系統在匹配對手時&#xff0c;只會將積分差恰好是K的兩名用戶匹配在一起。如果兩人分差小于或大于K&#xff0c;系統都不會將他們匹…

NodeJS作為Web架構中間層的使用

截至2016年12月&#xff0c;中國網民規模已達7.31億。傳統的網站系統是否能夠支撐得起如此龐大的且不斷增長的用戶訪問并且為用戶提供體驗友好的頁面&#xff1f; 一、傳統的前后端&#xff1a; 二、傳統的前后端分離問題&#xff1a; 性能問題&#xff1a; 1、渲染、數據都在…