<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>vue</title>
<script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
<script src="num.js"></script>
</head>
<body>
<div id="div1">
<number objname="mydata" keys="val1"></number>
<number objname="mydata" keys="val2"></number>
<number objname="mydata" keys="val3"></number>
<p>第一个输入框的内容是: {{val1}}</p>
<p>第二个输入框的内容是: {{val2}}</p>
<p>第三个输入框的内容是: {{val3}}</p>
</div> <script>
var mydata = new Vue({
el: '#div1',
data: {
val1: '',
val2: '',
val3: ''
}
})
</script>
</body>
</html>
num.js的代码:
Vue.component('number', {
props: ['objname', 'keys'],
template: '<input type="text" v-model="con">',
data: function(){
return {
con: ''
}
},
watch: {
con: function(val){
this.con = val.replace(/D/g, '');
eval(this.objname+'[this.keys]=this.con');
}
},
})运行效果图:

这样,输入框限制了只能输入数字,也和数据绑字了,但这只是单向的绑字,输入框的内容改变了,外面的数据会跟着改变,但外面的数据改变了,输入框的内容不会跟着改变,所以,现在只是单向的绑定。在页面下面再添加三个普通的输入框,三个输入框分别绑定val1、val2、val3

这个时候到页面上操作就会发现,上面的输入框内容改变会影响下面的,但下面的输入框内容改变了,就不会影响上面的输入框的内容

这个时候,要实现反向的绑定,那就需要在组件里为外面的数据添加监听器。有对象,有属性名,为它加监听器,是可以加的,但是外面的属性要绑定哪个组件里的输入框呢?所以组件上要再添加一个属性ref,这个ref是vue定义的一个属性,用来找子组件的。这样,代码最终就变成
<div id="div1">
<number ref="val1" objname="mydata" keys="val1"></number>
<number ref="val2" objname="mydata" keys="val2"></number>










