欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue查找指令和模板思路詳解

 更新時間:2023年10月16日 09:11:24   作者:BNTang  
這篇文章主要介紹了vue查找指令和模板,基本思路是需要判斷當前遍歷到的節(jié)點是一個元素還是一個文本,隨著思路的展開我們就來實現(xiàn)這個功能,需要的朋友可以參考下

本文要實現(xiàn)的是查找指令和模板。

大致的思路是這樣的:

  • 遍歷所有的節(jié)點
  • 需要判斷當前遍歷到的節(jié)點是一個元素還是一個文本
  • 如果是一個元素, 我們需要判斷有沒有v-model屬性
  • 如果是一個文本, 我們需要判斷有沒有{{}}的內容

那么隨著思路的展開,接下來我們就來實現(xiàn)這個功能。

首先我們編寫一個 buildTemplate 方法,主要功能是利用指定的數(shù)據(jù)編譯內存中的元素:

buildTemplate(fragment) {
    let nodeList = [...fragment.childNodes];

    // 1.遍歷所有的節(jié)點
    nodeList.forEach(node => {

    });
}

buildTemplate 方法定義在 Compiler 類中,我們需要在 compile 方法中調用它:

// 2.利用指定的數(shù)據(jù)編譯內存中的元素
this.buildTemplate(fragment);

然后我們在 buildTemplate 方法中完善我們的代碼,這里我就先直接上完整的實現(xiàn)代碼:

buildTemplate(fragment) {
    let nodeList = [...fragment.childNodes];

    // 1.遍歷所有的節(jié)點
    nodeList.forEach(node => {
        // 2.需要判斷當前遍歷到的節(jié)點是一個元素還是一個文本
        if (this.vm.isElement(node)) {
            // 是一個元素
            this.buildElement(node);
        } else {
            // 不是一個元素
            this.buildText(node);
        }
    });
}

buildElement(node) {
    // 可以通過 node.attributes 獲取到當前元素上所有的屬性
    let attrs = [...node.attributes];

    // 1.遍歷所有的屬性
    attrs.forEach(attr => {
        let {name, value} = attr;
        if (name.startsWith('v-')) {
            console.log('是Vue的指令, 需要我們處理', name);
        }
    });
}

buildText(node) {
    // 可以通過 node.textContent 獲取到當前文本節(jié)點的內容
    let content = node.textContent;

    // 編寫一個正則表達式, 用來匹配 {{}}
    // 如下正則表達式的含義是: 匹配 {{}} 中間的內容
    // /: 正則表達式通常以斜杠 / 開始和結束,表示正則表達式的開始和結束。
    // \{ 和 \}: 這些是轉義字符,用于匹配實際的花括號 { 和 }?;ɡㄌ栐谡齽t表達式中具有特殊意義,因此需要使用反斜杠進行轉義。
    // \{\{ 和 \}\}: 這是正則表達式的起始和結束部分,用于匹配雙花括號 {{ 和 }}。
    // .+?: 這部分用于匹配雙花括號內的任意字符,. 表示匹配任意字符,+ 表示匹配一個或多個前面的字符,? 表示非貪婪匹配,即盡可能匹配最短的內容。這樣確保匹配到最近的結束雙花括號 }}。
    // /g: g 是正則表達式的標志,表示全局匹配,即匹配字符串中的所有符合條件的部分。
    // /i: i 也是正則表達式的標志,表示不區(qū)分大小寫匹配,這意味著 {{...}} 和 {{...}} 都會被匹配到。
    // 因此,這個正則表達式可以用于在字符串中找到并提取所有的 {{...}} 結構,不區(qū)分大小寫,不貪婪匹配,且匹配所有出現(xiàn)的情況。
    let reg = /\{\{.+?\}\}/gi;
    if (reg.test(content)) {
        console.log('是一個文本節(jié)點, 需要我們處理', content);
    }
}

好了,我們來看一下效果,我們在瀏覽器中打開,然后打開控制臺,可以看到如下的效果:

發(fā)現(xiàn),只有 v-model 指令被處理, {{}} 沒有被處理,如下圖我框出了 <p>

也就是說我們循環(huán)節(jié)點的時候,只循環(huán)了一層,沒有循環(huán)到 <p> 標簽中的文本節(jié)點,所以我們需要修改一下 buildTemplate 方法, 讓它支持遞歸,處理子元素(處理后代):

// 處理子元素(處理后代)
this.buildTemplate(node);

改造后,我們再來看一下效果,可以看到 {{}} 也被處理了:

好了,到這里我們就實現(xiàn)了查找指令和模板的功能,下一篇我們來繼續(xù)完善一下我們的不完整的代碼,一步一步來慢慢撕。

到此這篇關于vue查找指令和模板的文章就介紹到這了,更多相關vue查找指令和模板內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Vue.js 中 axios 跨域訪問錯誤問題及解決方法

    Vue.js 中 axios 跨域訪問錯誤問題及解決方法

    這篇文章主要介紹了Vue.js 中 axios 跨域訪問錯誤問題及解決方法,非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2018-11-11
  • vue實現(xiàn)類似淘寶商品評價頁面星級評價及上傳多張圖片功能

    vue實現(xiàn)類似淘寶商品評價頁面星級評價及上傳多張圖片功能

    最近在寫一個關于vue的商城項目,然后集成在移動端中,開發(fā)需求中有一界面,類似淘寶商城評價界面!接下來通過本文給大家分享vue實現(xiàn)類似淘寶商品評價頁面星級評價及上傳多張圖片功能,需要的朋友參考下吧
    2018-10-10
  • elementPlus?的el-select在提示框關閉時自動彈出的問題解決

    elementPlus?的el-select在提示框關閉時自動彈出的問題解決

    這篇文章主要介紹了elementPlus?的el-select在提示框關閉時自動彈出閉時自動彈出的問題,主要問題就是因為filterable屬性,根本解決方案是選中的時候讓他失去焦點?el-select有一個visible-change事件,下拉框出現(xiàn)/隱藏時觸發(fā),感興趣的朋友跟隨小編一起看看吧
    2024-01-01
  • 利用vue-router實現(xiàn)二級菜單內容轉換

    利用vue-router實現(xiàn)二級菜單內容轉換

    這篇文章主要介紹了如何利用vue-router實現(xiàn)二級菜單內容轉換,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Vue+penlayers實現(xiàn)多邊形繪制及展示

    Vue+penlayers實現(xiàn)多邊形繪制及展示

    這篇文章主要為大家詳細介紹了Vue+penlayers實現(xiàn)多邊形繪制及展示,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • vue移動端設置全屏背景的項目實踐

    vue移動端設置全屏背景的項目實踐

    本vue移動端項目設置全屏背景,關鍵是要找對文件,然后添加background屬性即可,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2023-08-08
  • 詳解vue.js下引入百度地圖jsApi的兩種方法

    詳解vue.js下引入百度地圖jsApi的兩種方法

    這篇文章主要介紹了詳解vue.js下引入百度地圖jsApi的兩種方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • vue實現(xiàn)樹形表格

    vue實現(xiàn)樹形表格

    這篇文章主要為大家詳細介紹了vue實現(xiàn)樹形表格,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 詳解Vue如何將多個空格被合并顯示成一個空格

    詳解Vue如何將多個空格被合并顯示成一個空格

    這篇文章主要為大家詳細介紹了在Vue中如何將多個空格被合并顯示成一個空格,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-04-04
  • vue組件命名和props命名代碼詳解

    vue組件命名和props命名代碼詳解

    在本篇內容里小編給大家講的是關于vue組件命名和props命名的相關知識點內容,有興趣的朋友們可以學習下。
    2019-09-09

最新評論