中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么解決Vue綁定對象與數組變量更改后無法渲染的問題

發布時間:2021-09-09 13:46:51 來源:億速云 閱讀:429 作者:chen 欄目:開發技術

本篇內容主要講解“怎么解決Vue綁定對象與數組變量更改后無法渲染的問題”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么解決Vue綁定對象與數組變量更改后無法渲染的問題”吧!

項目場景:

在頁面顯示上有一個<ul>標簽,我們需要動態進行列表數據的展示,而由于我們的頁面上除了列表值,還有其他的值要進行展示,因此列表數據的數據結構是某個對象下面的數組,在動態修改數據后發現沒有進行自動渲染。

問題描述:

在點擊按鈕“click me!”時雖然數據有變化且在控制臺進行了輸出,但是列表數據并沒有發生渲染。
代碼如下:

<script src="https://unpkg.com/vue/dist/vue.js"></script>
<div id="app">
  <button @click="pushDataToDataList">click me!</button>
  <ul>
    <li v-for="(item, i) in form.dataList" :key="item">
      {{ i + ":" + item }}
    </li>
  </ul>
</div>
<script>
  let app = new Vue({
    data: function() {
      return {
        form: {}
      }
    },
    methods: {
      pushDataToDataList() {
        if (this.form.dataList == null) {
          this.form.dataList = []
        }
        this.form.dataList.push("abc" + this.form.dataList.length)
        console.log(this.form.dataList)
      }
  }
  }).$mount('#app')
</script>

怎么解決Vue綁定對象與數組變量更改后無法渲染的問題

原因分析:

在查閱了官方文檔后我們發現下面這段話

由于 JavaScript 的限制,Vue 不能檢測數組和對象的變化。盡管如此我們還是有一些辦法來回避這些限制并保證它們的響應性。

  1. 對于對象:Vue 無法檢測 property 的添加或移除。由于 Vue 會在初始化實例時對 property 執行 getter/setter 轉化,所以 property 必須在 data對象上存在才能讓 Vue 將它轉換為響應式的。

  2. 對于數組:Vue 不能檢測以下數組的變動:

  • 當你利用索引直接設置一個數組項時,例如:vm.items[indexOfItem] = newValue

  • 當你修改數組的長度時,例如:vm.items.length = newLength

原因到這里就明了了,我們的數據沒有進行渲染是因為在一開始,data下的form中就沒有dataList這個屬性,因此在后續即使該值產生了變化,Vue也就無法檢測到它的改變。而且不僅僅是對數組,即使是js對象也是一樣的。除此之外,直接按下標修改數組的元素,也不會觸發視圖渲染
會觸發數組渲染的有以下數組方法:

  • push(element) // 在數組末尾添加元素

  • pop() // 刪除數組最后一個元素并將其返回

  • shift() // 刪除數組第一個元素并將其返回

  • unshift(ele1, ele2, …, eleN) // 向數組的開頭添加一個或更多元素,并返回新的長度

  • splice(start, deleteCount?, …item) // 刪除數組中的元素并在該元素所在位置替換為新元素

  • sort() // 對數組進行排序,會修改數組元素的位置

  • reverse() // 倒轉數組元素,會修改數組元素的位置

解決方案:

1.在data下的form對象中,設置dataList屬性。由于前端在對數據進行處理時就知道代碼的結構是什么,提前設置好了也便于后續的開發理解。建議使用

data: function() {
  return {
    form: {
      dataList: null
    }
  }
}

2.使用this.$set()方法

pushDataToDataList() {
  if (this.form.dataList == null) {
    // 先在form下設置下dataList屬性
    this.$set(this.form, 'dataList', [])
  }
  this.form.dataList.push("abc" + this.form.dataList.length)
  console.log(this.form.dataList)
}

到此,相信大家對“怎么解決Vue綁定對象與數組變量更改后無法渲染的問題”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

vue
AI

桓台县| 科尔| 新源县| 开鲁县| 敦化市| 双桥区| 南漳县| 沾化县| 古交市| 随州市| 津南区| 松溪县| 贵定县| 南开区| 芦溪县| 冷水江市| 马公市| 元氏县| 逊克县| 安仁县| 广安市| 从化市| 濮阳市| 修武县| 弋阳县| 包头市| 城市| 连山| 曲松县| 大渡口区| 进贤县| 汉阴县| 凤冈县| 东乌珠穆沁旗| 广西| 江山市| 天全县| 弋阳县| 都江堰市| 永年县| 上饶市|