最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue 2源碼解析Parse函數(shù)定義

 更新時間:2022年08月15日 14:56:59   作者:MiyueFE  
這篇文章主要為大家介紹了Vue 2源碼解析Parse函數(shù)定義,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

Parse 函數(shù)

baseCompile() 執(zhí)行過程中,首先就是通過 parse方法 解析 template模板字符串,生成對應(yīng)的 AST 抽象語法樹。

整個 parse函數(shù) 定義太長,這里省略幾個內(nèi)部方法

/**
 * Convert HTML string to AST.
 */
export function parse(template: string, options: CompilerOptions): ASTElement {
  warn = options.warn || baseWarn
  platformIsPreTag = options.isPreTag || no
  platformMustUseProp = options.mustUseProp || no
  platformGetTagNamespace = options.getTagNamespace || no
  const isReservedTag = options.isReservedTag || no
  maybeComponent = (el: ASTElement) =>
    !!(
      el.component ||
      el.attrsMap[':is'] ||
      el.attrsMap['v-bind:is'] ||
      !(el.attrsMap.is ? isReservedTag(el.attrsMap.is) : isReservedTag(el.tag))
    )
  transforms = pluckModuleFunction(options.modules, 'transformNode')
  preTransforms = pluckModuleFunction(options.modules, 'preTransformNode')
  postTransforms = pluckModuleFunction(options.modules, 'postTransformNode')

  delimiters = options.delimiters

  const stack: any[] = []
  const preserveWhitespace = options.preserveWhitespace !== false
  const whitespaceOption = options.whitespace
  let root
  let currentParent
  let inVPre = false
  let inPre = false
  let warned = false

  function warnOnce(msg, range) {
  }

  function closeElement(element) {
  }

  function trimEndingWhitespace(el) {
  }

  function checkRootConstraints(el) {
  }

  parseHTML(template, {
    warn,
    expectHTML: options.expectHTML,
    isUnaryTag: options.isUnaryTag,
    canBeLeftOpenTag: options.canBeLeftOpenTag,
    shouldDecodeNewlines: options.shouldDecodeNewlines,
    shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,
    shouldKeepComment: options.comments,
    outputSourceRange: options.outputSourceRange,
    
    start(tag, attrs, unary, start, end) {
    },

    end(tag, start, end) {},

    chars(text: string, start?: number, end?: number) {
    },
    
    comment(text: string, start, end) {
    }
  })
  return root
}

parse() 函數(shù)中,首先會定義以下方法:

定義 warn 警告函數(shù),用于在控制臺顯示錯誤提示

獲取 options 中的幾個標(biāo)簽判斷函數(shù),并定義一個 Vue 組件的判斷方法 maybeComponent:通過判斷當(dāng)前節(jié)點的 ast 對象的幾個屬性,來確實是不是一個組件

之后定義標(biāo)簽的處理方法(都是方法數(shù)組)

  • transforms :包含 modules 配置中的兩個處理方法,分別處理標(biāo)簽的 class 和 style
  • preTransforms:專門用來處理 input 的動態(tài)綁定,比如 <input v-model="data[type]" :type="type" />
  • postTransforms:這個在 web 端的模板編譯是沒有配置的,這里是一個空數(shù)組

stack:用來保存標(biāo)簽解析的一個棧,保證標(biāo)簽的匹配

定義 delimiters 分隔符和其他的一些標(biāo)志變量。

trimEndingWhitespace:刪除傳入 el 節(jié)點的尾隨空格節(jié)點,這里會判斷當(dāng)前解析的標(biāo)簽不在 pre 標(biāo)簽內(nèi)部

closeElement:處理節(jié)點的 if,else-if,else 等情況下的條件,并更新 inVPre,inPre 的狀態(tài)

checkRootConstraints:檢查組件根節(jié)點,警告不能使用 slot 或者 template 作為組件根節(jié)點,也不能在根節(jié)點使用 v-for 循環(huán)

最后,定義核心的解析方法 parseHTML

這里面的大部分變量和方法都是閉包形式,會在整個解析過程中保持狀態(tài)

parseHTML

parseHTML 就負(fù)責(zé)解析 template 字符串,生成 ast 對象,并通過閉包的方式將結(jié)果保存到 parse 函數(shù)定義的 root 變量。

函數(shù)接收 template 字符串 與 解析配置 options 兩個參數(shù),并且 options 需要包含以下四個方法:

start:用來解析標(biāo)簽的開始部分(匹配到標(biāo)簽開始部分時調(diào)用)

end:用來解析結(jié)束標(biāo)簽(匹配到標(biāo)簽結(jié)束部分時調(diào)用)

**chars **:文本處理,解析到文本部分時調(diào)用

comment:注釋處理,用來解析注釋部分,在碰到注釋時調(diào)用

以上就是Vue 2源碼解析Parse函數(shù)定義的詳細(xì)內(nèi)容,更多關(guān)于Vue Parse函數(shù)定義的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 一文解決vue2 element el-table自適應(yīng)高度問題

    一文解決vue2 element el-table自適應(yīng)高度問題

    在寫公司后臺項目的時候遇到一個需求,要求表格頁面不能有滾動條,所以必須封裝一個公共方法來實現(xiàn)表格自適應(yīng)高度,本問小編給大家介紹了如何解決vue2 element el-table自適應(yīng)高度問題,需要的朋友可以參考下
    2023-11-11
  • 手把手帶你封裝一個vue component第三方庫

    手把手帶你封裝一個vue component第三方庫

    這篇文章主要介紹了手把手帶你封裝一個vue component第三方庫,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • vue中表格設(shè)置某列樣式、不顯示表頭問題

    vue中表格設(shè)置某列樣式、不顯示表頭問題

    這篇文章主要介紹了vue中表格設(shè)置某列樣式、不顯示表頭問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue項目打包部署流程分析

    vue項目打包部署流程分析

    這篇文章主要介紹了vue項目打包部署流程,本文通過實例圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • Vue使用Ref跨層級獲取組件的步驟

    Vue使用Ref跨層級獲取組件的步驟

    這篇文章主要介紹了Vue使用Ref跨層級獲取組件的步驟,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2021-01-01
  • vuejs+element UI點擊編輯表格某一行時獲取內(nèi)容填入表單的示例

    vuejs+element UI點擊編輯表格某一行時獲取內(nèi)容填入表單的示例

    這篇文章主要介紹了vuejs+element UI點擊編輯表格某一行時獲取內(nèi)容填入表單的示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • Nginx配置Vue項目,無法按路徑跳轉(zhuǎn)及刷新404的解決方案

    Nginx配置Vue項目,無法按路徑跳轉(zhuǎn)及刷新404的解決方案

    這篇文章主要介紹了Nginx配置Vue項目,無法按路徑跳轉(zhuǎn)及刷新404的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • vue監(jiān)聽用戶輸入和點擊功能

    vue監(jiān)聽用戶輸入和點擊功能

    這篇文章主要為大家詳細(xì)介紹了vue監(jiān)聽用戶輸入和點擊功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • vue學(xué)習(xí)筆記之作用域插槽實例分析

    vue學(xué)習(xí)筆記之作用域插槽實例分析

    這篇文章主要介紹了vue學(xué)習(xí)筆記之作用域插槽,結(jié)合實例形式分析了vue.js作用域插槽基本使用方法及操作注意事項,需要的朋友可以參考下
    2020-02-02
  • Vue中props用法介紹

    Vue中props用法介紹

    這篇文章主要給大家分享的是 Vue中props用法介紹,? 在Vue中通過props,可以將原本孤立的組件串聯(lián)起來,也就是可以子組件可以接收父組件傳遞過來的data,下面我們一起進入文章看看內(nèi)容的詳細(xì)介紹吧,需要的朋友也可以參考一下
    2021-11-11

最新評論

肃宁县| 华安县| 甘洛县| 芦溪县| 郑州市| 白山市| 黎川县| 山阳县| 顺昌县| 巴楚县| 库伦旗| 中方县| 苏州市| 柳河县| 青阳县| 吴忠市| 鄂托克前旗| 灵山县| 镇康县| 白山市| 车致| 新民市| 诏安县| 菏泽市| 咸阳市| 肇源县| 荥经县| 尼木县| 犍为县| 内黄县| 依安县| 昆山市| 朔州市| 楚雄市| 独山县| 遂溪县| 内黄县| 收藏| 聂拉木县| 合作市| 楚雄市|