1. 程式人生 > >Vue2.x 踩坑記錄(持續更新)

Vue2.x 踩坑記錄(持續更新)

踩坑少年歡樂多0.0

記錄下自己開發過程中遇到的坑,避免以後遇到了又一臉懵逼。(之前已經踩過很多坑了,沒有及時記錄,之後優化程式碼的時候再看到或者後續開發中遇到坑會更新到文章中。)

  • computed修改data返回的資料


出處是黃神的課程,原始碼是vue1.x,在2.x版本就會有這個問題,但專案還是可以正常跑起來的。

修改方法很簡單,官方API寫的很明白了,給出官方示例:

var vm = new Vue({
  data: { a: 1 },
  computed: {
    // 僅讀取
    aDouble: function () {
      return this.a * 2
    },
    // 讀取和設定
    aPlus: {
      get: function () {
        return this.a + 1
      },
      set: function (v) {
        this.a = v - 1
      }
    }
  }
})
vm.aPlus   // => 2
vm.aPlus = 3
vm.a       // => 2
vm.aDouble // => 4

計算屬性預設只有getter,示例中計算屬性aDouble依賴vm.a,當vm.a發生變化時,所以依賴vm.aDouble的繫結也會更新。給出的錯誤程式碼中就是因為在計算屬性listShow的getter中修改了所依賴的fold,因此產生副作用(side-effect)。在這種情況下,我們應該給計算屬性新增一個setter,就像官方示例的vm.aPlus一樣。

  • 列表渲染,陣列更新檢測


原始碼是這樣的,我想通過點選事件修改flagMap中的值,進而控制對應列表的展示隱藏。結果是陣列更新了,但是v-show狀態並未改變。

問題原因在於,Vue不能檢測以下變動的陣列:

  1. 利用索引值設定某項的值,(上面程式碼展示的)
  2. 修改陣列長度
看一下官方給出的示例:
var vm = new Vue({
  data: {
    items: ['a', 'b', 'c']
  }
})
vm.items[1] = 'x' // 不是響應性的
vm.items.length = 2 // 不是響應性的

解決方法如下:

toggleList(index) {
      this.$set(this.flagMap, index, !this.flagMap[index]);
    }

同樣的,Vue也不能檢測到物件屬性的新增和刪除,也可以用set解決。具體請看官方文件

相關推薦

Vue2.x 記錄持續更新

踩坑少年歡樂多0.0記錄下自己開發過程中遇到的坑,避免以後遇到了又一臉懵逼。(之前已經踩過很多坑了,沒有及時記錄,之後優化程式碼的時候再看到或者後續開發中遇到坑會更新到文章中。)computed修改data返回的資料出處是黃神的課程,原始碼是vue1.x,在2.x版本就會有這

docker-6-記錄持續更新

windows 下 dokcer build 後出現 windows 下 dokcer build 後出現許可權設定問題 這個許可權是指哪個目錄,然後怎麼設定? SECURITY WARNING: You are building a Docker image from Windows ag

weex+vue2.x 實錄不定期更新

sta 為什麽 第一個 new 新手 runtime 顯示空白 rom mod 執行 npm start 顯示空白頁面 這個是開始使用weex就出現的一個大坑,說實話對新手真的很不友好。 1、打開控制臺顯示:Cannot assign to read only pr

前端開發日誌持續更新。。。

1、火狐瀏覽器對event的支援,如果var e = window.event就會出錯,解決辦法:var e = event || window.event; 2、event.target和event.currentTarget的區別 3、使用axios進行跨域請求時要對option請求時,後端要對

mysql常用函式以及記錄持續更新

函式 字串轉int:         CONVERT(ID,SIGNED) 字串拼接:         #拼接字串(某一欄位為NULl,返回NUll)     &

Golang語法的總結持續更新

*本來這篇是想寫docker的基本操作總結的。。。想想還是寫這個吧。。。→_→* 變數宣告使用 := 方式時,左值必須是未宣告的,否則會出現編譯錯誤 //.\main.go:8:4: no

weex 持續更新中……

消失了一個月,努力為新專案倒騰 weex 中,記錄一下遇到的問題。之後還會持續更新~ 目前,我使用的 weex 都是在整合Weex到Android來做的,專案使用的是 weex-toolkit

C++ 編程技巧筆記記錄持續更新

算法 模板函數 () 不必要 過大 默認構造函數 函數 容易 [] 前言: 希望通過閱讀《Effective C++》系列《Expectional C++》系列等書 挑選出一些個人覺得重要的條款/經驗/技巧進行記錄總結。 類/對象: 1.基類析構函數應總是public

jmeter分布式壓測實踐及記錄linux壓力機

分享 server 以及 rop lib 記錄 src 連接拒絕 hit 1、分布式機器需要調度機以及壓力機都安裝好jmeter 1) 因為本機是mac,所以直接把本機器的jmeter壓縮打包,上傳到服務器解壓即可。或者在服務器上自行下載安裝jmeter。配置壓力機的j

jmeter分散式壓測實踐及記錄linux壓力機

1、分散式機器需要排程機以及壓力機都安裝好jmeter   1) 因為本機是mac,所以直接把本機器的jmeter壓縮打包,上傳到伺服器解壓即可。或者在伺服器上自行下載安裝jmeter。配置壓力機的jmeter系統變數: p.p1 { margin: 0.0px 0.0px 0.0px 0.0p

mdk錯誤記錄持續更新

1、 warning: #61-D: integer operation result is out of range 由於編譯器預設signed int即32位有符號整數型別,而1<<31實際為0x80000000, 這樣就有可能改寫了符號位(最高位) 依此類推,(2<&

Laya載入unity場景記錄AS3語言

1.千萬不要用高版本的unity使用laya的外掛,因為他們目前最新的2.0的外掛也就支援到unity5.6.x,不然迎接你的將會是最少兩個錯誤。 2.如果之前用的1.x版本的laya轉成2.x版本的引擎的話將會出現一片bug,因為2.x很多api不向下相容,甚至Dicti

java知識點記錄持續更新

1.如果另一個類中的那個方法是私有的話,就不能直接呼叫到,如果是其他型別的話看情況,如果是靜態的(static)話,直接用類名可以呼叫到,如果是非靜態的,就需要利用另一個類的例項(也就是用那個類生成的物件 new一個來呼叫)來呼叫。 舉例 class A{ public st

正則表示式學習記錄持續更新

特殊字元含義: 字元 含義 字元 含義 * 匹配前面的子表示式零次或多次 + 匹配一次或多次 $ 匹配輸入字串的結尾位置,設定RegExg物件的

ionic爬過的各種持續更新

1:判斷當前裝置是否ios/andriod: <script type="text/javascript"> var u = navigator.userAgent; var isAndroid = u.indexOf('Android') > -1 |

cocos2d-x學習資源整理持續更新

書籍資料: 《cocos2d-x權威指南》 cocos2d x 2.01版本 《Cocos2d-x高階開發教程:製作自己的《捕魚達人》》 《Cocos2D-X遊戲開發技術精解》 《cocos2dx遊戲開發之旅 》  閱讀其中1、2本即可,剩下的就要看自己的實踐。書籍一般選擇

Unity開發過程中遇到的部分問題記錄持續更新

Unity報錯Invalid normalized color        編譯時無錯,開啟介面時就報上面錯誤。這是因為Color構造方法裡r,g,b,a的值取值範圍是0到1。而Color32構造方法的取值範圍是0到255。 Unity報錯Request error (

Matplotlib 記錄持續更新

Matplotlib 繪圖 記錄 在這裡記錄一下平時使用Matplotlib繪圖的時候遇到的一些零散的知識點,以後在遇到類似的問題,就在這裡找啦。 Sactter函式格式 scatter(x, y, s=None, maker=None, cma

C++ 程式設計技巧筆記記錄持續更新

目錄 類/物件 1.多型基類的解構函式應總是public virtual,否則應為protected 2.編譯器會隱式生成預設構造,複製構造,複製賦值,析構,(C++11)移動構造,(C++11)移動賦值的inline函式

記錄某專案中的與解決持續更新

前言 最近參加了某個比賽, 我所選的賽題就是個類似知乎這樣的安卓app,由於著手近一個月了,踩了不少坑,之前沒怎麼記錄,估計事後也會忘記乾淨。 因此特開一帖,在此記錄下相關的坑。 記錄 寫完某個Recyclerview的item佈局和相關介面卡後, 然後展示的時候, 發現顯示出來的Item數量小於