html双向绑定,双向绑定

单向绑定非常简单,就是把Model绑定到View,当我们用JavaScript代码更新Model时,View就会自动更新。

有单向绑定,就有双向绑定。如果用户更新了View,Model的数据也自动被更新了,这种情况就是双向绑定。

什么情况下用户可以更新View呢?填写表单就是一个最直接的例子。当用户填写表单时,View的状态就被更新了,如果此时MVVM框架可以自动更新Model的状态,那就相当于我们把Model和View做了双向绑定:

70fa711be236fcf7adba0dd923faf77f.png

在浏览器中,当用户修改了表单的内容时,我们绑定的Model会自动更新:

2147794c992ee633d143ed6999077979.png

在Vue中,使用双向绑定非常容易,我们仍然先创建一个VM实例:

$(function () {

var vm = new Vue({

el: '#vm',

data: {

email: '',

name: ''

}

});

window.vm = vm;

});

然后,编写一个HTML FORM表单,并用v-model指令把某个和Model的某个属性作双向绑定:

我们可以在表单中输入内容,然后在浏览器console中用window.vm.$data查看Model的内容,也可以用window.vm.name查看Model的name属性,它的值和FORM表单对应的是一致的。

如果在浏览器console中用JavaScript更新Model,例如,执行window.vm.name='Bob',表单对应的内容就会立刻更新。

除了可以和字符串类型的属性绑定外,其他类型的也可以和相应数据类型绑定:

多个checkbox可以和数组绑定:

Chinese

English

French

对应的Model为:

language: ['zh', 'en']

单个checkbox可以和boolean类型变量绑定:

对应的Model为:

subscribe: true; // 根据checkbox是否选中为true/false

下拉框绑定的是字符串,但是要注意,绑定的是value而非用户看到的文本:

Beijing

Shanghai

Guangzhou

对应的Model为:

city: 'bj' // 对应option的value

双向绑定最大的好处是我们不再需要用jQuery去查询表单的状态,而是直接获得了用JavaScript对象表示的Model。

处理事件

当用户提交表单时,传统的做法是响应onsubmit事件,用jQuery获取表单内容,检查输入是否有效,最后提交表单,或者用AJAX提交表单。

现在,获取表单内容已经不需要了,因为双向绑定直接让我们获得了表单内容,并且获得了合适的数据类型。

响应onsubmit事件也可以放到VM中。我们在

元素上使用指令:

其中,v-on:submit="register"指令就会自动监听表单的submit事件,并调用register方法处理该事件。使用.prevent表示阻止事件冒泡,这样,浏览器不再处理

的submit事件。

因为我们指定了事件处理函数是register,所以需要在创建VM时添加一个register函数:

var vm = new Vue({

el: '#vm',

data: {

...

},

methods: {

register: function () {

// 显示JSON格式的Model:

alert(JSON.stringify(this.$data));

// TODO: AJAX POST...

}

}

});

在register()函数内部,我们可以用AJAX把JSON格式的Model发送给服务器,就完成了用户注册的功能。

使用CSS修饰后的页面效果如下:

ea0740dce035bafa6ae5dc5064d0f02d.png

参考源码

在使用Ant Design Vue时,a-input输入框默认是单向绑定的,即只能通过v-model绑定输入框的值,而无法实现实时更新。如果要实现a-input输入框的双向绑定,可以通过监听input事件来实现。首先,需要给a-input添加一个id属性,例如id="myInput"。然后,在Vue的mounted生命周期钩子函数中,获取到该a-input元素,并通过addEventListener方法监听input事件。当input事件触发时,可以通过event.target.value来获取输入框的值,并将该值赋给Vue实例的data属性中的相应数据。这样就实现了a-input输入框的双向绑定。下面是一个示例代码: ```html <template> <div> <a-input id="myInput" v-model="inputValue"></a-input> <p>输入的值:{{ inputValue }}</p> </div> </template> <script> export default { data() { return { inputValue: '' } }, mounted() { const inputEl = document.getElementById('myInput') inputEl.addEventListener('input', (event) => { this.inputValue = event.target.value }) } } </script> ``` 通过以上代码,你可以实现a-input输入框的双向绑定,输入框中的值会实时更新到Vue实例的data属性中,并可以在模板中显示出来。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [input双向绑定详解](https://blog.csdn.net/qq_45992946/article/details/115951195)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Ant Design Vue 输入框绑定不上值解决方案](https://blog.csdn.net/qwe122343/article/details/115398890)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [解决vue项目input输入框双向绑定数据不实时生效问题](https://download.csdn.net/download/weixin_38701312/12924438)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值