VUE单双向数据流及事件绑定

本文深入解析Vue中的数据绑定机制,包括单向数据流v-bind和双向数据流v-model的使用方法,以及事件绑定v-on的实践。通过实例演示了不同绑定方式如何影响页面与内存的交互,帮助读者理解Vue响应式系统的原理。

概述

#vue单向数据流绑定属性值  v-bind: (属性),简写:(属性)

例子:`<input v-bind:value="name" v-bind:class="name">`

 

- 单向数据绑定 内存改变影响页面改变

- v-bind就是对属性的简单赋值,当内存中值改变,还是会触发重新渲染

 

vue双向数据流  v-model ,只作用于有value属性的元素

例子:`<input v-model="name" v-bind:class="name">`

 

双向数据绑定  页面对于input的value改变,能影响内存中name变量

内存js改变name的值,会影响页面重新渲染最新值

 

 

事件绑定v-on:事件名="表达式||函数名" ,

简写:@事件名="表达式||函数名" 

事件名可以是原生也可以是自定义的

 

v-model 双向数据绑定,vue页面改变影响内存(js),内存(js)改变影响vue页面

v-bind 单向数据绑定只是内存(js)改变影响vue页面

代码

<!DOCTYPE html>

<html>

<head>

    <title></title>

</head>

<body>

    <div id="app"></div>



    <script type="text/javascript" src="vue.js"></script>

    <script type="text/javascript">

       console.log(this)

       new Vue({

           el:"#app",

           template:`

              <div>

              单向数据绑定

              <input type='text' v-bind:value="name" :class="name"><br>

              双向数据绑定

              <input type='text' v-model="name"></br>

              {{ name }}

              <button v-on:click="change">点击我改变name变量</button>

              </div>



           `,

           data:function(){

              return {

                  name:'hello'

              }

           },

           methods:{

              change:function(){

                  console.log(this)

                  this.name='我改变了,是在方法属性里面定义的方法'

              },

           }

       })

    </script>

</body>

</html>

运行效果

 

 

如果在单项的input的value改变,其他两处不会发生改变,只有第一处改变了

如果在双向的input的value发生了改变,所有三处都会变

点击按钮,也是三处都会变,因为在funtion直接改变了内存

 

vue中的this是vue封装好给我们使用的,跟平常方法里面的this是不同的

### Vue中的数据流双向绑定的概念及区别 #### 数据流Vue中,数据流是指父组件通过`props`将数据传递给子组件,而子组件不能直接修改这些`props`值。这种机制确保了数据的流动是向的,即从父组件流向子组件[^1]。如果需要更新父组件的数据,子组件可以通过事件(如`$emit`)通知父组件进行更改。这种方式使得数据流动更加清晰,便于调试和维护。 ```javascript // 父组件向子组件传递数据 <template> <child-component :message="parentMessage"></child-component> </template> <script> export default { data() { return { parentMessage: 'Hello from parent' }; } }; </script> ``` #### 双向绑定 双向绑定是Vue中通过`v-model`指令实现的一种特性,它允许数据和视图之间的同步更新[^4]。当用户在输入框中修改内容时,绑定的数据也会自动更新;反之,当数据发生变化时,视图也会随之更新。这种机制简化了表处理逻辑,但可能隐藏了一些复杂性,导致数据流不那么直观。 ```html <!-- 使用 v-model 实现双向绑定 --> <input v-model="inputValue" /> <p>当前输入值:{{ inputValue }}</p> <script> export default { data() { return { inputValue: '' }; } }; </script> ``` #### 区别 1. **数据流动方向**: - 数据流数据流动是明确的,从父组件到子组件。 - 双向绑定则模糊了数据流动的方向,数据和视图可以互相影响[^4]。 2. **调试与维护**: - 数据流由于其明确的数据流动方向,更容易追踪问题来源[^1]。 - 双向绑定虽然方便,但在复杂场景下可能导致难以预测的行为[^4]。 3. **适用场景**: - 数据流适合于大型应用或团队协作项目,因为它提供了更清晰的数据流动结构。 - 双向绑定更适合简的表处理或快速开发场景,能够显著减少代码量[^4]。 4. **底层实现**: - 数据流本质上依赖于事件机制,通过`$emit`等方式实现父子组件间的通信。 - 双向绑定则是基于观察者模式和发布订阅模式,通过监听数据变化并触发视图更新来实现[^5]。 #### 原理 - **数据流**:Vue通过`props`实现父组件向子组件的数据传递,并通过`$emit`事件机制让子组件通知父组件进行数据更新[^1]。 - **双向绑定**:Vue利用`Object.defineProperty`(在ES6环境中)或`Proxy`(在ES2015+环境中)对数据进行劫持,当数据发生变化时触发视图更新;同时通过监听DOM事件(如`input`事件)捕获用户输入并更新数据[^3]。 ### 总结 Vue中的数据流双向绑定各有优劣。数据流提供更清晰的数据流动方向,便于维护和调试;而双向绑定则简化了开发流程,尤其适用于表场景。开发者应根据实际需求选择合适的方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值