Vue学习笔记三
来源:互联网 发布:第四套人民币淘宝 编辑:程序博客网 时间:2024/06/10 19:10
v-for中就地复用原则
当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用 “就地复用” 策略。如果数据项的顺序被改变,Vue将不是移动 DOM 元素来匹配数据项的顺序, 而是简单复用此处每个元素,并且确保它在特定索引下显示已被渲染过的每个元素。
解决方法:
建议尽可能使用 v-for 来提供 key ,除非 DOM 内容遍历起来非常简单,或者你是有意识的要依赖于默认行为以便获得性能提升。
如果不添加一个唯一的key值,那么选中复选框,删除以后,后面上来的元素还是处于选中状态
<div id="app"> <div v-for="(item,index) in items" :key="item.id"> <p>{{item.name}}---{{item.age}}---{{item.boy}}----<input type="checkbox">-------<span @click="deleteItem(index)">X</span></p> </div> </div> <script type="text/javascript"> var app = new Vue({ el: "#app", data: { items:[ {id:1,name:"xiaoD1",age:20}, {id:2,name:"xiaoD2",age:21}, {id:3,name:"xiaoD3",age:22}, {id:4,name:"xiaoD4",age:23}, ] }, methods: { deleteItem: function(index){ this.items.splice(index,1) } } }) </script>
数组更新中的几个变异方法
<div id="app"> <button @click="_pop">pop</button> <button @click="_shift">shift</button> <button @click="_unshift">unshift</button> <button @click="_reverse">reverse</button> </div> <script type="text/javascript"> var app = new Vue({ el: "#app", data: { items:[ {id:1,age:20}, {id:3,age:21}, {id:21,age:22}, ] }, methods: { _pop: function(){ var item = this.items.pop() // 取出最后一个元素 console.log(item) console.log(this.items) }, _shift: function(){ // 取出第一个元素 var item = this.items.shift(1) console.log(item) console.log(this.items) }, _unshift: function(){ // 添加一个元素,返回长度,添加在最前面 var length = this.items.unshift({id:4,age:23}) console.log(length) console.log(this.items) }, _reverse: function(){ var item = this.items.reverse(1) console.log(item) console.log(this.items) } } })
不能监测变动数组
利用索引设置一个项的时候
app.items[index] = newValue
解决方法一
app.set(app.items,index,newValue)
解决方法二
app.items.splice(index,1,newValue)
修改数组长度的时候
app.items.length = newLength
解决方法
app.items.splice(newLength)
对象更改监测
增加一个属性
var app = new Vue({ el: "#app", data: { items:{ id:1, name:"xiaoD", } } }) Vue.set(app.items,'age',27)
过滤数据
方法一:使用计算属性<div id="app"> <p v-for="n in evenNumbers">{{n}}</p> </div> <script type="text/javascript"> var app = new Vue({ el: "#app", data: { numbers:[1,2,3,4,5,6] }, computed: { evenNumbers: function(){ return this.numbers.filter(function(value){ return value % 2 == 0 }) } } }) </script>
方法一:使用方法
<div id="app"> <p v-for="n in even(numbers)">{{n}}</p> </div> <script type="text/javascript"> var app = new Vue({ el: "#app", data: { numbers:[1,2,3,4,5,6] }, methods: { even: function(numbers){ return numbers.filter(function(number) { return number % 2 == 0; }); } } }) </script>
v-for 和 v-if混合使用
<div id="app"> <p v-for="n in numbers" v-if="n % 2 ==1">{{n}}</p> </div> <script type="text/javascript"> var app = new Vue({ el: "#app", data: { numbers:[1,2,3,4,5,6] } }) </script>
阅读全文
0 0
- Vue学习笔记三
- Vue.js学习笔记(三)
- Vue.js学习笔记(三)
- vue学习笔记:vue-router
- vue.js学习笔记(三)--父子组件通信总结
- 从零开始学习Vue(三)
- 从零开始学习Vue(三)
- 从零开始学习Vue(三)
- 从零开始学习Vue(三)
- 从零开始学习Vue(三)
- 从零开始学习Vue(三)
- 从零开始学习Vue(三)
- 从零开始学习Vue(三)
- VUE 学习笔记 从零开始一步一步构建 VUE 单页应用(三)
- vue学习(三) vue组件
- Vue.js学习笔记
- Vue.js 学习笔记
- Vue.js学习笔记
- The Google File System : part6 MEASUREMENTS
- [USACO NOV]金发姑娘和N头牛解题报告
- 51nod 1537 分解(矩阵快速幂)
- windows下安装django的一种方法
- Spring学习(七)-Spring MVC 入门示例
- Vue学习笔记三
- JavaScript入门之JS中的内置对象
- 字符编码
- 初学Ajax
- JS和DOM操作面试笔试题,一不小心就被套路了—Node的三大属性
- HDU 5887 大体积 大价值 背包 搜索剪枝
- 编译原理与编译构造 课堂笔记1 导论
- Android的线程消息机制(Handler机制剖析)
- git 使用