// let p = new Proxy(target, handler);
// 参数target
// 用Proxy包装的目标对象(可以是任何类型的对象,包括原生数组,函数,甚至另一个代理)。
// 参数handler
// 一个对象,其属性是当执行一个操作时定义代理的行为的函数。
// 参数target
// 用Proxy包装的目标对象(可以是任何类型的对象,包括原生数组,函数,甚至另一个代理)。
// 参数handler
// 一个对象,其属性是当执行一个操作时定义代理的行为的函数。
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id="div1">
<input type="text" v-model="name"><br>
姓名:{{name}}<br>
年龄:{{age}}
</div>
</body>
<script>
let el=document.getElementById('div1');
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id="div1">
<input type="text" v-model="name"><br>
姓名:{{name}}<br>
年龄:{{age}}
</div>
</body>
<script>
let el=document.getElementById('div1');
let template=el.innerHTML;
let _data={
name: 'blue',
age: 18
};
name: 'blue',
age: 18
};
let data=new Proxy(_data, {
set(obj, name, value){
//alert(`有人视图设置 ${name}=>${value}`);
obj[name]=value;
set(obj, name, value){
//alert(`有人视图设置 ${name}=>${value}`);
obj[name]=value;
//数据变了
//console.log('数据变了');
render();
}
});
//console.log('数据变了');
render();
}
});
render();
function render(){
//渲染
el.innerHTML=template.replace(/\{\{\w+\}\}/g, str=>{
str=str.substring(2, str.length-2);
//渲染
el.innerHTML=template.replace(/\{\{\w+\}\}/g, str=>{
str=str.substring(2, str.length-2);
return _data[str];
});
});
//找所有的v-model
Array.from(el.getElementsByTagName('input'))
.filter(ele=>ele.getAttribute('v-model'))
.forEach(input=>{
let name=input.getAttribute('v-model');
input.value=_data[name];
Array.from(el.getElementsByTagName('input'))
.filter(ele=>ele.getAttribute('v-model'))
.forEach(input=>{
let name=input.getAttribute('v-model');
input.value=_data[name];
input.οninput=function (){
data[name]=this.value;
};
});
}
</script>
</html>
data[name]=this.value;
};
});
}
</script>
</html>