<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          前端每日一題(10.20題目+10.19答案)

          共 1102字,需瀏覽 3分鐘

           ·

          2022-10-24 22:13


          前端獵手
           鏈接每一位開發(fā)者,讓編程更有趣兒!
          關(guān)注


          哈嘍,大家好

          我是法醫(yī)


          快來(lái)和法醫(yī)一起看看

          今天的前端每日一題吧


          10月20日~面試題:


          10月19日~參考答案:


          v-model 雙向綁定的原理是什么?

          v-model 本質(zhì)就是 :value + input 方法的語(yǔ)法糖??梢酝ㄟ^(guò) model 屬性的 propevent 屬性來(lái)進(jìn)行自定義。原生的 v-model,會(huì)根據(jù)標(biāo)簽的不同生成不同的事件和屬性。

          例如:

          • texttextarea 元素使用 value 屬性和 input 事件
          • checkboxradio 使用 checked 屬性和 change 事件
          • select 字段將 value 作為 prop 并將 change 作為事件

          以輸入框?yàn)槔?,?dāng)用戶在輸入框輸入內(nèi)容時(shí),會(huì)觸發(fā) input 事件,從而更新 value。而 value 的改變同樣會(huì)更新視圖,這就是 vue 中的雙向綁定。雙向綁定的原理,其實(shí)現(xiàn)思路如下:

          首先要對(duì)數(shù)據(jù)進(jìn)行劫持監(jiān)聽,所以我們需要設(shè)置一個(gè)監(jiān)聽器 Observer,用來(lái)監(jiān)聽所有屬性。如果屬性發(fā)上變化了,就需要告訴訂閱者 Watcher 看是否需要更新。

          因?yàn)橛嗛喺呤怯泻芏鄠€(gè),所以我們需要有一個(gè)消息訂閱器 Dep 來(lái)專門收集這些訂閱者,然后在監(jiān)聽器 Observer 和訂閱者 Watcher 之間進(jìn)行統(tǒng)一管理的。

          接著,我們還需要有一個(gè)指令解析器 Compile,對(duì)每個(gè)節(jié)點(diǎn)元素進(jìn)行掃描和解析,將相關(guān)指令對(duì)應(yīng)初始化成一個(gè)訂閱者 Watcher,并替換模板數(shù)據(jù)或者綁定相應(yīng)的函數(shù),此時(shí)當(dāng)訂閱者 Watcher 接收到相應(yīng)屬性的變化,就會(huì)執(zhí)行對(duì)應(yīng)的更新函數(shù),從而更新視圖。

          因此接下去我們執(zhí)行以下 3 個(gè)步驟,實(shí)現(xiàn)數(shù)據(jù)的雙向綁定:

          1. 實(shí)現(xiàn)一個(gè)監(jiān)聽器 Observer,用來(lái)劫持并監(jiān)聽所有屬性,如果有變動(dòng)的,就通知訂閱者。

          2. 實(shí)現(xiàn)一個(gè)訂閱者 Watcher,可以收到屬性的變化通知并執(zhí)行相應(yīng)的函數(shù),從而更新視圖。

          3. 實(shí)現(xiàn)一個(gè)解析器 Compile,可以掃描和解析每個(gè)節(jié)點(diǎn)的相關(guān)指令,并根據(jù)初始化模板數(shù)據(jù)以及初始化相應(yīng)的訂閱器。

          流程圖如下:


          每天都會(huì)有一道面試題,大家的積極參與和討論,是我繼續(xù)下去的動(dòng)力,希望大家踴躍互動(dòng),共同進(jìn)步!保持學(xué)習(xí),每天進(jìn)步一點(diǎn)點(diǎn)!


          大家可以將自己的想法在評(píng)論區(qū)留言,答案我會(huì)在明天每日一題中公布!



          RECOMMEND


          推薦閱讀

             

          我的年中總結(jié):生活可能就是這樣,看似平淡,也始終向前

          堅(jiān)持的最高境界——善護(hù)念

          一入“遠(yuǎn)程”終不悔,有人歡喜有人愁

          程序員的快樂(lè)到底是什么?

          程序猿終身學(xué)習(xí)有必要嗎?這篇文章就是最好的答案

          2022程序員跳槽不完全指南


          瀏覽 30
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  av中文天堂 | 亚洲AV成人片无码网站 | 美女扒开超粉嫩的尿囗让人桶91 | 男女啪啪18秘 免费网站 | 豆花视频在线网站 |