站長(zhǎng)資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        vue是單項(xiàng)數(shù)據(jù)流還是雙向數(shù)據(jù)流

        vue是單項(xiàng)數(shù)據(jù)流。雖然vue有雙向綁定“v-model”,但是vue父子組件之間數(shù)據(jù)傳遞,仍然還是遵循單向數(shù)據(jù)流的,父組件可以向子組件傳遞props,但是子組件不能修改父組件傳遞來(lái)的props,子組件只能通過(guò)事件通知父組件進(jìn)行數(shù)據(jù)更改。

        vue是單項(xiàng)數(shù)據(jù)流還是雙向數(shù)據(jù)流

        本教程操作環(huán)境:windows7系統(tǒng)、vue2.9.6版,DELL G3電腦。

        雙向綁定

        簡(jiǎn)而言之,雙向綁定就是model的更新會(huì)觸發(fā)view的更新,view的更新會(huì)觸發(fā)model的更新,它們的作用是相互的
        [圖片上傳失敗…(image-81a06f-1556975918443)]

        單向數(shù)據(jù)流

        簡(jiǎn)而言之,單向數(shù)據(jù)流就是model的更新會(huì)觸發(fā)view的更新,view的更新不會(huì)觸發(fā)model的更新,它們的作用是單向的

        vue是單項(xiàng)數(shù)據(jù)流還是雙向數(shù)據(jù)流

        這不是廢話嗎,誰(shuí)都知道的

        下面就是真正的干貨了,板凳坐好

        <ul> <li>Vue是單向數(shù)據(jù)流,不是雙向綁定</li> <li>Vue的雙向綁定不過(guò)是語(yǔ)法糖</li> <li>Object.definePropert是用來(lái)做響應(yīng)式更新的</li> </ul>

        v-model的實(shí)現(xiàn)原理

        • 放在組件上

        父組件

          <AnalysisSub v-model="phoneInfo" :zip-code.sync="zipCode" /

        子組件

        <template>   <div>     <input       :value="phoneInfo.phone"       type="number"       placeholder="手機(jī)號(hào)"       @input="handlePhoneChange"     />     <input       :value="zipCode"       type="number"       placeholder="郵編"       @input="handleZipCodeChange"     />   </div></template><script>export default {   name: "PersonalInfo",   model: {     prop: "phoneInfo", // 默認(rèn) value     event: "change" // 默認(rèn) input   },   props: {     phoneInfo: Object,     zipCode: String   },   methods: {     handlePhoneChange(e) {       this.$emit("change", {         ...this.phoneInfo,         phone: e.target.value       });     },     handleZipCodeChange(e) {       this.$emit("update:zipCode", e.target.value);     }   } };</script>

        父組件的寫(xiě)法等同于

         <AnalysisSub :phone-info="phoneInfo" @change="val => (phoneInfo = val)"     :zip-code="zipCode"  @update:zipCode="val => (zipCode = val)"/>
        • 放在input元素上

        其實(shí)上文已經(jīng)體現(xiàn)了

        <input v-model=“phoneInfo.phone”/> <input :value="PhoneInfo.phone" @input="val => { PhoneInfo.phone = val }"

        以上兩句是相等的

        TIPS

        model 2.2.0+

        允許一個(gè)自定義組件在使用 v-model 時(shí)定制 prop 和 event。默認(rèn)情況下,一個(gè)組件上的 v-model 會(huì)把 value 用作 prop 且把 input 用作 event,但是一些輸入類型比如單選框和復(fù)選框按鈕可能想使用 value prop 來(lái)達(dá)到不同的目的。使用 model 選項(xiàng)可以回避這些情況產(chǎn)生的沖突。

        .sync修飾符 2.3.0+

        在有些情況下,我們可能需要對(duì)一個(gè) prop 進(jìn)行“雙向綁定”。不幸的是,真正的雙向綁定會(huì)帶來(lái)維護(hù)上的問(wèn)題,因?yàn)樽咏M件可以修改父組件,且在父組件和子組件都沒(méi)有明顯的改動(dòng)來(lái)源。

        總結(jié)

        所以說(shuō)呢, vue還是單向數(shù)據(jù)流,v-model只不過(guò)是語(yǔ)法糖,它是:value="sth"@change="val => sth = val"的簡(jiǎn)寫(xiě)形式。我們通常在面試當(dāng)中被提問(wèn),Vue是怎么實(shí)現(xiàn)數(shù)據(jù)響應(yīng)式更新的,面試官期望聽(tīng)到的回答是通過(guò)Object.defineProperty()getset方法來(lái)實(shí)現(xiàn)響應(yīng)式更新。

        v-model和.sync修飾符分別在組件單個(gè)屬性、多個(gè)屬性需要雙向綁定下使用,這是二者使用的場(chǎng)景

        贊(1)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
        主站蜘蛛池模板: 国产精品美女久久久m| 蜜芽亚洲av无码精品色午夜| 亚洲AV无码精品无码麻豆| 日本精品久久久久中文字幕8| 久久久精品视频免费观看| 精品免费视在线观看| 精品卡一卡二卡乱码高清| 免费短视频软件精品一区二区| 一区二区精品在线| 国产韩国精品一区二区三区久久 | 亚洲精品国产成人99久久| 精品日韩亚洲AV无码一区二区三区| 久久亚洲av无码精品浪潮| 国产内地精品毛片视频| 欧美精品/日韩精品/国产精品| 国产精品无码专区| 亚洲AV成人精品一区二区三区| 亚欧乱色国产精品免费视频| 精品无码久久久久久久久久| 亚洲国产精品线在线观看| 国产精品2019| 99热成人精品热久久669| 国产综合色在线精品| 久久成人国产精品| 久久国产精品成人片免费| 精品少妇无码AV无码专区| 国产午夜无码精品免费看动漫| 欧美精品亚洲精品日韩传电影| 香蕉久久夜色精品升级完成| 一本一本久久a久久综合精品蜜桃 一本一道精品欧美中文字幕 | 欧美精品播放| 国产欧美一区二区精品性色99| 国产综合色产在线精品| 精品国产福利尤物免费| 精品亚洲视频在线观看| 日韩精品无码免费视频| 亚洲精品成人网久久久久久| 亚洲精品中文字幕无码蜜桃| 四虎国产精品永久在线| 精品国际久久久久999波多野| 国产乱人伦精品一区二区在线观看|