1. 程式人生 > 其它 >vue v-model響應式指令demo

vue v-model響應式指令demo

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
  
    <input type="text" v-model="animateChange">
    請輸入<input type="text"v-model="animateChange">
    <strong v-model="b"></strong>
    <strong v-model="gs"></strong>
</body>
<script>
    window.onload=function(){
        var allTags = document.body.getElementsByTagName('*')
        var inputs=document.getElementsByTagName('input')
        var selects = document.getElementsByTagName('select')
        for (var i=0;i<inputs.length;i++){
            inputs[i].addEventListener('input',function(){
                  if(this.attributes['v-model']){
                    for(var j=0;j<allTags.length;j++){
                        if (allTags[j].attributes['v-model']&&allTags[j].attributes['v-model'].value===this.attributes['v-model'].value){
                                   allTags[j].innerHTML = this.value
                                   allTags[j].value=this.value
                        }
                    }

                  } 
            })
        }
        
    }
    var allTags = document.body.getElementsByTagName('*')
  


    //響應式物件
    var obj = {
        b:0,
        c:'nmlgcb',
        nmlgcb:'diejdi'
        ,gs:'with nv'
     }

    // 為所有的變數新增響應式
    for(let n=0;n<Object.keys(obj).length;n++){
        //初始化賦值
        for(var h=0;h<allTags.length;h++){
            if (allTags[h].attributes['v-model']&&allTags[h].attributes['v-model'].value==Object.keys(obj)[n]){
                         allTags[h].innerHTML = obj[Object.keys(obj)[n]]
                         allTags[h].value = obj[Object.keys(obj)[n]]
                    }
        }
        //追蹤變化
        var newVal = obj.b
        Object.defineProperty(
        obj,Object.keys(obj)[n],{
            set:function(val){
                console.log('響應式更新...',val);
                for(var r=0;r<allTags.length;r++){
                    if (allTags[r].attributes['v-model']&&allTags[r].attributes['v-model'].value==Object.keys(obj)[n]){
                         allTags[r].innerHTML = val
                         allTags[r].value = val
                         newVal = val
                    }
                }
               
            },
            get:function(){
                return newVal
            }
            }
    )
    }
   setInterval(
      ()=>{
            obj.b++
        }
   ,1000)

</script>
</html>