首页IT科技vue数据双向绑定是什么意思(vue数据双向绑定)

vue数据双向绑定是什么意思(vue数据双向绑定)

时间2025-05-05 15:22:10分类IT科技浏览3569
导读:5.Vue数据双向绑定 5.1.什么是双向数据绑定...

5.Vue数据双向绑定

5.1.什么是双向数据绑定

Vue.js 是一个 MVVM 框架          ,即数据双向绑定                ,即当数据发生变化的时候      ,视图也就发生变化          ,当视图发生变化的时候               ,数据也会跟着同步变化           。这也算是 Vue.js 的精髓之处了                。

值得注意的是      ,我们所说的数据双向绑定     ,一定是对于 UI 控件来说的               ,非 UI 控件不会涉及到数据双向绑定     。单向数据绑定是使用状态管理工具的前提     。如果我们使用 vuex           ,那么数据流也是单项的     ,这时就会和双向数据绑定有冲突                。

5.2 怎么实现双向数据绑定 v-model v-model 指令可以在表单及元素上创建双向数据绑定          。它会根据控件类型自动选取正确的方法来更新元素     。它负责监听用户的输入事件以更新数据               ,并对一些极端场景进行一些特殊处理                。 注意:v-model 会忽略所有表单元素的 value           、checked                、selected 特性的初始值而总是将 Vue 实例的数据作为数据来源          。你应该通过 JavaScript 在组件的 data 选项中声明初始值!

测试案例:

用非v-model方式的时候           ,是不能双向绑定的

<div id="app"> <input type="text" :value="msg" /> <div>{{msg}}</div> </div> <script> var app = new Vue({ el:#app, data:{ msg:"hello" } }); </script>

改为v-model方式绑定:

<div id="app"> <input type="text" v-model="msg" /> <div>{{msg}}</div> </div> <script> var app = new Vue({ el:#app, data:{ msg:"hello" } }); </script>

案例2:

<div id="app"> <select v-model="selected"> <option value="">--请选择--</option> <option value="北京">北京</option> <option value="上海">上海</option> <option value="武汉">武汉</option> </select> <p>{{selected}}</p> </div> <script> var v= new Vue({ el:"#app", data:{selected: } }); </script>

案例3:

<div id="app"> <input type="checkbox" id="jack" value="吃饭" v-model="checkedValues"> <label for="jack">吃饭</label> <input type="checkbox" id="john" value="睡觉" v-model="checkedValues"> <label for="john">睡觉</label> <input type="checkbox" id="mike" value="打豆豆" v-model="checkedValues"> <label for="mike">打豆豆</label> <div>选中的值: </div> <ul> <li v-for="item in checkedValues" >{{item}}</li> </ul> </div> <script type="text/javascript"> var v = new Vue({ el: #app, data: { checkedValues:[] } }); </script>

6.Vue事件绑定

v-on   v-on:事件名 = “方法名           ”   简写方式: @事件名 = “方法名                ”   事件名有哪些: click|keydown|keyup|mouseover|mouseout|自定义事件名

测试案例1:

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript" src="js/vue.js" ></script> </head> <body> <div id="app"> <input type="button" value="-" v-on:click="sub" /> <input type="text" v-model="num" /> <input type="button" value="+" @click="plus" /> </div> <script> var v=new Vue({ el:"#app", data:{ num:1 }, methods:{ sub:function(){ if(this.num>0) this.num-=1; }, plus:function(){ this.num=parseInt(this.num)+1; } } }) </script> </body> </html>

v-on: 可以简化为@

<div id="app"> <input type="button" value="-" @click="sub" /> <input type="text" v-model="count" /> <input type="button" value="+" @click="plus" /> </div>

测试案例2:

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript" src="js/vue.js" ></script> </head> <body> 输入分数,按回车               ,显示等级 <div id="app"> <div>等级:{{level}}</div> <input type="text" v-on:keyup.enter="show" v-model="score" /> </div> <script type="text/javascript"> var app = new Vue({ el: #app, data: { level: , score: }, methods: { show: function () { if(this.score>=0 && this.score<60) this.level="D"; else if(this.score<80) this.level="C"; else if(this.score<90) this.level="B"; else this.level="A"; } } }) </script> </body> </html>

测试结果:

7.综合案例

根据前面学习的vue的基础语法和事件绑定                ,实现一下商品的查询,添加          ,删除功能。

测试案例:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript" src="js/vue.js"></script> </head> <body> <div id="app"> <div style="text-align: center;" > <div > <h3 >商品操作页面</h3> </div> <div style="text-align:center"> 序号:<input type="text" v-model="id"/> 名称:<input type="text" v-model="name"/> 价格:<input type="text" v-model="price"/> <input type="button" value="添加" @click="add()"/><br/> 搜索:<input type="text" v-model="searchKey"/> </div> </div> <table style="width: 800px; margin-left: auto; margin-right: auto;" border="1"> <header> <tr> <td>序号</td> <td>名称</td> <td>价格</td> <td>操作</td> </tr> </header> <tbody> <tr v-for="item in search(searchKey)" :key="item.id"> <td>{{ item.id }}</td> <td>{{ item.name }}</td> <td>{{ item.price }}</td> <!-- .prevent阻止事件的默认行为                ,这里是阻止超链接默认的跳转功能--> <td><a href="" @click.prevent="del(item.id)">删除</a></td> </tr> </tbody> </table> </div> <script type="text/javascript"> var vm = new Vue({ el : "#app", data:{ id:, name:, searchKey:, list:[ {id:1,name:T恤,price:100}, {id:2,name:西装,price:500}, {id:3,name:连衣裙,price:200}, {id:4,name:衬衫,price:150} ] }, methods:{ add(){ //将表单中的数据组装为一个商品对象 var good = { id:this.id, name:this.name, price:this.price }; //存入list中 this.list.push(good); //将表单数据清空 this.id = this.name = this.price=; }, del(id){ //遍历查询 var index = this.list.findIndex( item => { if(id == item.id){ return true; } }); this.list.splice(index,1);//JavaScript中的splice(index,i)方法:从已知数组的index下标开始      ,删除i个元素 }, search(searchKey){ //filter() 方法创建一个新的数组          ,新数组中的元素是数组中符合条件的所有元素组合而成 return this.list.filter(item => { if(item.name.includes(searchKey)){ return item; } }); } } }) </script> </body> </html>

测试结果:

8.Template 标签

template的作用是模板占位符               ,可帮助我们包裹元素      ,但在循环过程当中     ,template不会被渲染到页面上

比如:

<div v-for="value in user">{{value}}</div>

这个循环是做在div上面的               ,如果需要循环的内容很多           ,比如span标签也要做这个循环

<div v-for="value in user">{{value}}</div> <span v-for="value in user">{{value}}</span>

则需要把循环提出来,但这样会多一个div标签

<div v-for="value in user"> <div>{{value}}</div> <span>{{value}}</span> </div>

如果不想多一个标签     ,可以用template               ,template不会渲染到页面上

<template v-for="value in user"> <div>{{value}}</div> <span>{{value}}</span> </template>

另外           ,template可以用到制作模板                。

方法1:直接在vue对象中定义

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript" src="js/vue.js" ></script> </head> <body> <!--这里会显示template里的内容--> <div id="app"> </div> <script> var v = new Vue({ el:"#app", data:{ msg:"daimenglaoshi" }, template:"<div>{{msg}}</div>"//模板中只能有一个根元素 }); </script> </body> </html>

方法2:写在template标签里

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript" src="js/vue.js" ></script> </head> <body> <!--这里会显示template标签里的内容--> <div id="app"></div> <!--此处template标签必须在vue绑定的元素外面定义,并且在页面中不显示下面的template标签中的内容--> <template id="temp"> <div>{{msg}}<div> </template> <script> let vm = new Vue({ el:"#app", data:{ msg:"daimenglaoshi" }, //通过该属性可以将自定义的template属性中的内容全部替换app的内容               ,并且会覆盖里面原有的内容                ,并且在查看dom结构时没有template标签 template:"#temp" }); </script> </body> </html>

方法3:写在script标签里

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript" src="js/vue.js" ></script> </head> <body> <div id="app"></div> <script type="x-template" id="temp"> <div>{{msg}}</div> </script> <script> var v = new Vue({ el:"#app", data:{ msg:"daimenglaoshi" }, template:"#temp"//模板中只能有一个根元素 }); </script> </body> </html>

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
python中==与=的区别(python PyQt事件处理实现上下文菜单)