Vue ソース コードの探索: 口ひげテンプレート エンジン (9) は、単一レイヤーの類似しない結果トークンを dom 文字列に変換します。

さて、前回の記事で dom 構造のテンプレート文字列をトークン データ構造に変換するコードを作成しました。
次はデータと組み合わせたトークンを使用して dom 文字列を生成する必要があります。

まず、テンプレート文字列とデータ構造を調べてみましょう。
まず、このデータからデータが取得され、次にテンプレート文字列ステートメントで最初にオブジェクト内の Students ループが使用され
、次に各生徒のリストと各添字を使用してループが開始されます。
ここに画像の説明を挿入
これは、テンプレート文字列と応答データ間の相互作用として理解することもできます

次に、src の下に renderTemplate.js というファイルを作成します。
この関数の機能は、トークンを配列から文字列に変換することです。
最初にこのように書きましょう

/*
    将tokens数组转为模板字符串
*/
export default function renderTemplate(tokens,data) {
    
    
    console.log(tokens,data);
}

まず関数構造を公開し、
パラメータとして、処理したトークン配列と先ほど見たデータを受け取ります。

次に、src の下に作成された Index.js を開いて
、この renderTemplate をインポートして使用します。
ここに画像の説明を挿入
ここでは、renderTemplate をインポートして
、その戻り値を受け取ります。渡すのは、以前に処理したトークン配列と、以前に使用したことのないデータです。

次に、プロジェクトを実行する
ここに画像の説明を挿入
と、renderTemplate 内のトークンとデータが正常に出力されたことがわかりますが、renderTemplate が戻り値を書き込んでいないため、出力 renderTemplate の戻り結果は現在利用できないはずです。

したがって、トークンとデータを操作する方法を見つける必要があります。

しかし、現在の構造はまだ少し複雑なので、www の下にあるindex.html を次のように変更します。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script src = "/xuni/bundle.js"></script>
    <script>
        let templateStr = `
            <div>
                我超喜欢我家的{
       
       {name}},我家{
       
       {name}}也超喜欢我
            </div>
        `;
        let data = {
      
      
            name: "小猫猫",
        }
        GrManagData.render(templateStr,data);
    </script>
</body>
</html>

このようにして、データの全体的な結果は非常に単純になります。
ここに画像の説明を挿入
次に、renderTemplate コードを次のように変更します。

/*
    将tokens数组转为模板字符串
*/
export default function renderTemplate(tokens,data) {
    
    
    //创建一个字符串  保存结果
    let resultStr = "";
    //先循环遍历tokens 数组
    for(let i = 0;i < tokens.length; i++){
    
    
        //定义一个token变量  接收当前遍历的下标
        let token = tokens[i];

        //判断当前是不是text  文本类型的
        if(token[0] == "text") {
    
    
            //因为  text表示内容只是单纯文本 直接追加到结果字符串上就行了
            resultStr += token[1];
        } /* 判断到如果是name变量名称类型 */ else if(token[0] == "name") {
    
    
            //在data中找到对应的字段 然后追加在结果字符串上
            resultStr += data[token[1]];
        }
    }
    //输出最后结果字符串
    console.log(resultStr);
}

まず、コンテンツを格納する結果文字列を定義し
、トークンをループします。前に formConversToken を処理したとき、中括弧の外側の定義が名前として定義され、通常の
テキスト タイプが直接名前として定義されたことを今でも覚えています。結果の文字列に追加されます。

次に名前があり、それをデータ内の対応するフィールドと照合して追加する必要があります。
これは一目瞭然です。
最後に結果
を出力します。結合の結果は次のようになります
ここに画像の説明を挿入
。私たちのHTMLコンテンツ
ここに画像の説明を挿入
、問題ありません

以下では、シャープ記号を使用したループ文字列の処理を続けます。

おすすめ

転載: blog.csdn.net/weixin_45966674/article/details/132080643