zoukankan      html  css  js  c++  java
  • 模仿vue的v-model

    思路:1,解析tag,

               2, 生成dom

               3,绑定事件

               4,添加响应式

     在原生的html里面 非原生标签是不能被识别的,我们可以利用这一特性做文章 假设 vue 会解析template中的内容

    <html>
    <head>
    <title>My first three.js app</title>



    </head>

    <body>
    <div id="div1">
    <template>
    <input v-model="wocao">
    <input v-model="dede" />

    </template>
    </div>
    </body>

    <script>
    window.onload = function(){
    let div1 = document.getElementById('div1');
    let Vue={
    vnode:{}
    }
    let documentstring=''
    function genDirect(html){
    let re = /<template>[^]+</template>/g;
    documentstring = html.match(re)[0].replace('<template>','').replace('</template>','')
    }
    //分割字符串提取出input框
    function getOutinput(){
    let reinput = /<s{0,}input[^>]{0,}/{0,1}>/g;
    let inputlist = documentstring.match(reinput);

    // console.log(inputlist);
    for(let j=0;j<inputlist.length;j++){
    let re = /v-models{0,}=s{0,}"[^>]{1,}"s{0,}/;
    let tempnode = document.createElement('input');
    let results
    try{
    results = inputlist[j].match(re)[0].replace(/v-models{0,}=s{0,}"/,'').replace(/"s{0,}/,'');

    }catch(e){

    }
    div1.appendChild(tempnode);

    if(results){
    Vue[results] = '';
    Vue.vnode[results] = tempnode
    tempnode.oninput = function(){
    Vue[results] = this.value;

    }
    }


    }
    }
    //添加响应式
    function responseMode(){

    for(let key in Vue){
    if(key!='vnode'){
    let tempx=null;
    Object.defineProperty(Vue,key,{
    get:function(){
    return tempx
    },
    set:function(val){

    tempx = val;
    update(tempx,key);
    }
    })

    }


    }

    }
    //更新界面
    function update(value,key){
    Vue.vnode[key].value = value;
    console.log('输入的值为'+Vue[key])
    }
    genDirect(div1.innerHTML);
    getOutinput();
    responseMode();

    }

    </script>
    </html>

    结果如图

  • 相关阅读:
    ant design pro梳理
    JSON.stringify()
    数组小细节
    js this细节
    策略模式解决if-else过多
    使用useState的赋值函数异步更新问题
    Hook
    React Api
    Intent
    树的非递归遍历
  • 原文地址:https://www.cnblogs.com/tony-stark/p/12553377.html
Copyright © 2011-2022 走看看