鍍金池/ 問(wèn)答/HTML/ vue中watch的newVal和oldVal相同

vue中watch的newVal和oldVal相同

data() {
    ...,
    search: {
      gather: [],
      page: {
        current: 1,
        size: 5
      }
    }
},
methods() {
  ...,
  // 新增搜索條件
  addSearch() {
    const input = this.searchInput

    let copySearch = {...this.search}

    copySearch.gather.push({
      fieldName: this.searchColumns[input.field],
      field: input.field,
      terms: input.terms,
      value: input.value
    })
    console.log('search===copySearch:', this.search === copySearch)
    this.search = copySearch

    input.field = ''
    input.terms = ''
    input.value = ''
  },
  // 刪除搜索條件。由Tag組件,觸發(fā)on-close
  deleteSearch(event, item) {
    const index = this.search.gather.indexOf(item)
    let copySearch = {...this.search}
    copySearch.gather.splice(index, 1)
    
    console.log('search===copySearch:', this.search === copySearch)
    this.search = copySearch
  },
},
watch: {
  // 深度監(jiān)聽(tīng)
  search: {
    handler: function(newS, oldS) {
      console.log(newS)
      console.log(oldS)
      console.log('newS===oldS:', newS === oldS)
      if (newS.gather.length !== oldS.gather.length) {
        this.page.current = 1
      }
      this.tableNewData()
    },
    deep: true
  }
}

圖片描述

https://cn.vuejs.org/v2/api/#...
注意:在變異 (不是替換) 對(duì)象或數(shù)組時(shí),舊值將與新值相同,因?yàn)樗鼈兊囊弥赶蛲粋€(gè)對(duì)象/數(shù)組。Vue 不會(huì)保留變異之前值的副本。

替換了對(duì)象也不起作用,是我哪里寫(xiě)錯(cuò)了嗎? 望各路大神幫忙,我折騰一天了。

回答
編輯回答
冷溫柔

let copySearch = {...this.search}這個(gè)也不算深復(fù)制吧,屬性gather還是對(duì)同一個(gè)數(shù)組的引用吧

2018年3月23日 07:46