美文网首页
数据驱动-2019-12-28-p1.1

数据驱动-2019-12-28-p1.1

作者: 增商 | 来源:发表于2019-12-28 21:00 被阅读0次

接着上节:我们其实是借助vm这个视图层的中间人来联动实现了V-MODEL下面我们来看看具体是如何做到的
1.拿到模板querySelector 只要拿到元素就拿到模板了
2.拿到数据data computed....
3.数据模板结合得到html元素
4.放到页面中

整个替换

图片.png

手写仿照

      let tmpNode = document.querySelector("#app"); //元素得到模板得到

拿到模板

图片.png
拿到数据
图片.png
如何放置?当我们html复杂的嵌套时解决办法递归 or 队列(深度优先,广度优先)
 <div id="app">
      <h3>{{name}}</h3>
      <div>
        <span>
          <h4>{{name}}--{{msg}}</h4>
        </span>
      </div>
    </div>

这里我们先来一些测试

图片.png
我们需要匹配txt拿到{{...}}双括号里的值,这里双括号是两个,所以我们需要匹配两次,这个正则的意思是,.+要匹配多个字符串,?是贪婪的意思截止到下一个花括号开头停止
我们在箭头函数穿的值,也就是它匹配几次的返回结果,这里显然是两次,并且返回了我们预期的值
undefined之所以是这个值,是因为没有返回值
图片.png
这就有值了
这里注意的是我们需要圆括号里的东西
注意:我们的正则/{{(.+?)}}/g 花括号里的只有一个圆括号,这里表示一组,又因为前面有值的缘故我们需要返回值需要两个参数
图片.png
let tmpNode = document.querySelector("#app"); //元素得到模板得到
      let data = {
        //数据
        name: "imycode",
        massage: "这是一个伟大的尝试"
      };

      let rk = /\{\{(.+?)\}\}/g;
      // .+ 任意的字符 ? 取贪婪

      //如何放到模板当中(??)
      function compiler(template, data) {
        //template now is DOM
        // 在vue中是字符串 -> AST 抽象语法树 ->Vnode ->DOM

        let childNodes = template.childNodes;
        for (let i = 0; i < childNodes.length; i++) {
          //取出子元素 文本节点和元素节点
          let type = childNodes[i].nodeType; //节点类型1=>元素 3=>文本
          if (type === 3) {
            //文本节点{{}}
            let txt = childNodes[i].nodeValue; //存储的文本
            // console.log(" tag " + txt);

            txt = txt.replace(rk, function(_, g) {
              //replace使用正则匹配一次函数就会被调用一次
              //函数第0个参数表示匹配到的内容,函数的第n个参数表示第n组
              console.log(g);

              let key = g.trim(); //有可能两边有东西
              let value = data[key];
              //将{{ xxx }} 用value替换
              return value;
            });
            childNodes[i].nodeValue = txt;
          } else if (type === 1) {
            //元素节点有没有子元素
            compiler(childNodes[i], data);
          }
        }
      }

      compiler(tmpNode, data);

相关文章

  • 数据驱动-2019-12-28-p1.1

    接着上节:我们其实是借助vm这个视图层的中间人来联动实现了V-MODEL下面我们来看看具体是如何做到的1.拿到模板...

  • 数据驱动和关键字驱动对比

    数据驱动 和 关键字驱动 数据驱动和关键字驱动简单例子(登录) 数据驱动:程序和数据分离,测试数据存入一个文件中,...

  • 2020 vuejs 数据驱动(Zig)

    数据驱动 Vue.js 的核心思想就是数据驱动。那么什么是数据驱动呢? 数据驱动就是视图由数据决定,数据作为主动。...

  • 提升数据驱动能力的意义

    人人都在谈数据驱动,如数据化管理、数据驱动的运营、或者数据驱动的测试等,关于数据驱动的应用的讨论很多,那么,数据到...

  • 数据驱动_前三章回顾_极光_-2020-01-09

    12.28早上 -- 开篇数据驱动12.28晚上 -- 数据驱动p1.112.29早上 -- 回顾数据驱动...

  • python selenium 数据驱动测试 _笔记

    python selenium 数据驱动测试 1、概念 数据驱动:测试数据的改变引起执行结果的改变叫数据驱动; 关...

  • 自动化测试:数据驱动和POM

    本期主要内容 ▲ 数据驱动ddt ▲ 页面对象模型POM 数据驱动 数据驱动:从数据文件读取输入数据,而后将测试数...

  • Java数据库配置(一)

    1.加载驱动 Class.forname(数据库驱动名); 1.1.下载驱动 在加载数据库驱动之前,我们要下载数据...

  • vue学习大纲7:vuejs核心和vue.js的devtools

    vuejs核心: 数据驱动 组件化 数据驱动 DOM是数据的一种自然映射即:数据驱动dom变化,dom是数据的一种...

  • MySQL之JDBC(重点)

    十、JDBC(重点) 1.数据库驱动 驱动:声卡、显卡以及数据库等都需要驱动。 程序会通过数据库驱动,和数据库打交...

网友评论

      本文标题:数据驱动-2019-12-28-p1.1

      本文链接:https://www.haomeiwen.com/subject/glysoctx.html