模板字符串实例:模板编译

直接上代码,不懂看注释即可

        //定义模板
        let template = `
    <ul>
      <% for(let i=0; i < data.supplies.length; i++) { %>
        <li><%= data.supplies[i] %></li>
      <% } %>
    </ul>
    `;
    //模板编译函数
        function compile(template) {
          const evalExpr = /<%=(.+?)%>/g;
          const expr     = /<%([\s\S]+?)%>/g;
          //使用正则表达式将其转换为JavaScript表达式字符串
          template = template
            .replace(evalExpr, "`); \n  echo( $1 ); \n  echo(`")
            .replace(expr, "`); \n $1 \n  echo(`");

          template = "echo(`" + template + "`);";
          //将template封装在script函数中返回
          let script = `(function parse(data){
                  let output = "";
              
                  function echo(html){
                    output += html;
                  }
              
                  ${template}
              
                  return output;
                })`;

          return script;
        }

        let parse2        = eval(compile(template));
        let box           = document.getElementById("box");
            box.innerHTML = parse2({ supplies: ["AAA", "BBB", "CCC"] });
            console.log(parse2({ supplies: ["AAA", "BBB", "CCC"] }))
            /**
             * 
    <ul>
      
        <li>AAA</li>
      
        <li>BBB</li>
      
        <li>CCC</li>
      
    </ul>
            */
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容