vue教程中有这样一个注意事项:

第一种具体情况如下:

运行结果:

当利用索引改变数组某一项时,页面不会刷新。解决方法如下:

运行结果:

三种方式都可以解决,使用Vue.set、vm.$set()或者数组的splice方法。

在做项目的过程中,有个发现,先上代码:

第一个数组通过利用下标改变第二项,第二个数组使用$set()方法改变第二项,根据上面的代码,我们会知道:第一个数组的第二项改变不会在页面更新,只有第二个数组的更改会在页面更新。然而结果却是:

两个数组的的改变都在页面更新了。。

也就是说,$set()方法调用时,页面会全部更新一遍。

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. <script src="vue.js"></script>
  7. <style>
  8. .blue {
  9. color: blue;
  10. }
  11. </style>
  12. </head>
  13. <body>
  14. <div id="example-1">
  15. <ul>
  16. <template v-for="item in items">
  17. <li>
  18. {{$index}}.{{ item.msg }}
  19. <button v-on:click="f5(item)">vm.items.splice(index, 1)</button>
  20. <button v-on:click="f6(item)">vm.remove</button>
  21. </li>
  22. </template>
  23. </ul>
  24. <ul>
  25. <li>
  26. <button v-on:click="f1">vm.items[0] = {} 失效</button>
  27. </li>
  28. <li>
  29. <button v-on:click="f2">vm.items.$set(0, { childMsg: 'Changed!'}) </button>
  30. </li>
  31. <li>
  32. <button v-on:click="f3">vm.items.length = 0 失效</button>
  33. </li>
  34. <li>
  35. <button v-on:click="f4">vm.items={}</button>
  36. </li>
  37. </ul>
  38. <div class="blue">
  39. {{$data | json }}
  40. </div>
  41. <pre>
  42. 因为 JavaScript 的限制,Vue.js 不能检测到下面数组变化:
  43. 直接用索引设置元素,如 vm.items[0] = {};
  44. 修改数据的长度,如 vm.items.length = 0。
  45. </pre>
  46. </div>
  47. <script>
  48. var vm = new Vue({
  49. el: '#example-1',
  50. data: {
  51. items: [{
  52. msg: 'Foo'
  53. }, {
  54. msg: 'Bar'
  55. }, {
  56. msg: 'George'
  57. }]
  58. },
  59. methods: {
  60. f1: function() {
  61. vm.items[0] = {}; // 失效
  62. },
  63. f2: function() {
  64. vm.items.$set(0, {
  65. childMsg: 'Changed!'
  66. })
  67. vm.items.$set(2, {
  68. msg: 'dongtao!'
  69. })
  70. },
  71. f3: function() {
  72. vm.items.length = 0; // 失效
  73. },
  74. f4: function() {
  75. vm.items = {}
  76. },
  77. f5: function(item) {
  78. var index = this.items.indexOf(item) //Search an array for the item
  79. if (index !== -1) {
  80. this.items.splice(index, 1) //Selects a part of an array, and returns the new array
  81. }
  82. },
  83. f6: function(item) {
  84. this.items.$remove(item)
  85. }
  86. }
  87. })
  88. </script>
  89. </body>
  90. </html>

vue.js中使用set方法 this.$set的更多相关文章

  1. vue.js 中使用(...)运算符报错的解决方法

    vue.js 中使用(...)运算符报错的解决方法 Syntax Error:Unexpected token(XX:X) }, computed:{ ...mapGetters([ 'pageSiz ...

  2. vue.js中父组件触发子组件中的方法

    知识点:vue.js中,父组件的method中,触发子组件中的方法,获得子组件中的定义的属性 (1)子组件 : child_crud.js var html_child_crud= "< ...

  3. vue.js中,input和textarea上的v-model指令到底做了什么?

    v-model是 vue.js 中用于在表单表单元素上创建双向数据绑定,它的本质只是一个语法糖,在单向数据绑定的基础上,增加了监听用户输入事件并更新数据的功能: 对,它本质上只是一个语法糖,但到底是一 ...

  4. 实例分析Vue.js中 computed和methods不同机制

    在vue.js中,有methods和computed两种方式来动态当作方法来用的 1.首先最明显的不同 就是调用的时候,methods要加上() 2.我们可以使用 methods 来替代 comput ...

  5. Vue.js中使用select选择下拉框

    在Vue.js中使用select选择下拉框有两种方法: 第一种: Add.html: <select v-model="sysNotice.noticeType" id=&q ...

  6. vue.js 中双向绑定的实现---初级

    1. 1 我们看到的变量,其实都不是独立的,它们都是windows对象上的属性 <!DOCTYPE html> <html lang="en"> <h ...

  7. 浅析Vue.js 中的条件渲染指令

    1 应用于单个元素 Vue.js 中的条件渲染指令可以根据表达式的值,来决定在 DOM 中是渲染还是销毁元素或组件. html: <div id="app"> < ...

  8. vue.js 中 data, prop, computed, method,watch 介绍

    vue.js 中 data, prop, computed, method,watch 介绍 data, prop, computed, method 的区别 类型 加载顺序 加载时间 写法 作用 备 ...

  9. angular.js和vue.js中实现函数去抖(debounce)

    问题描述 搜索输入框中,只当用户停止输入后,才进行后续的操作,比如发起Http请求等. 学过电子电路的同学应该知道按键防抖.原理是一样的:就是说当调用动作n毫秒后,才会执行该动作,若在这n毫秒内又调用 ...

随机推荐

  1. 原始提货单OBL

    转: 原始提货单OBL 什么是原始提货单OBL? 原始提货单Original Bill of Lading,简称OBL.是货运单据或运输合同,可作为货物标题和装运收据.该文件确认承运人已收到货物.签发 ...

  2. HDOJ-1257(贪心/动态规划)

    最少拦截系统 HDOJ-1257 我做这题的思路就是采用暴力或者贪心.也就是每次循环选出从第一个未被选择的元素开始,依次把后面可以选择的元素作为一个系统.最后统计可以有多少个系统. 还有人的思路就是利 ...

  3. Java基础:运算符

    算数运算符:+,-,*,/,%,++,-- 赋值运算符:= 关系运算符:>,<,>=,<=,==,!=,instanceof 逻辑运算符:&&,||,! 位运算 ...

  4. Mysql给外网IP授权访问

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'58.221.44.174' IDENTIFIED BY 'njqt123456' WITH GRANT OPTION; ...

  5. CF482E ELCA

    一.题目 点此看题 二.解法 题目的提示已经足够明显了吧,肯定是要写一个 \(\tt link-cut-tree\) .我们只需要求出总和,再除以方案数就是期望.然后可以算每个点为 \(\tt lca ...

  6. python爬虫加定时任务,制作微信提醒备忘录

    一.任务的记录与提取 1.1 制作每日任务 为了便于爬取,推荐使用网页版的在线记事本,现在这种工具很多,我选择"石墨文档"进行操作演示.记录内容的 格式可以根据自己的需求和爬虫自行 ...

  7. P1008_三连击(JAVA语言)

    /*  * 题目描述 将1,2,⋯,9共9个数分成3组, 分别组成3个三位数,且使这3个三位数构成1:2:3的比例,试求出所有满足条件的3个三位数. 输入输出格式 输入格式: 木有输入 输出格式: 若 ...

  8. C++覆盖,隐藏,重载

    code[class*="language-"], pre[class*="language-"] { color: rgba(51, 51, 51, 1); ...

  9. 10、MyBatis教程之一对多处理

    11.一对多处理 一对多的理解: 一个老师拥有多个学生 如果对于老师这边,就是一个一对多的现象,即从一个老师下面拥有一群学生(集合)! 1.实体类编写 @Data public class Stude ...

  10. SDK音频测试流程

    概述 在上篇文章中,给小伙伴们讲述了sdk模板在渲染中的流程,我们简单来回顾一下,主要讲述了数据创建.素材替换.音频.文字等四部分,在上次讲述中也因为时间于原因没有特别仔细的去讲述他们.上次我们说到最 ...