为了账号安全,请及时绑定邮箱和手机立即绑定

vue中watch的newVal和oldVal相同

vue中watch的newVal和oldVal相同

尚方宝剑之说 2019-03-20 19:15:06
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组件,触发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: {  // 深度监听  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/#...注意:在变异 (不是替换) 对象或数组时,旧值将与新值相同,因为它们的引用指向同一个对象/数组。Vue 不会保留变异之前值的副本。替换了对象也不起作用,是我哪里写错了吗? 望各路大神帮忙,我折腾一天了。
查看完整描述

1 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

let copySearch = {...this.search}这个也不算深复制吧,属性gather还是对同一个数组的引用吧


查看完整回答
反对 回复 2019-03-23
  • 1 回答
  • 0 关注
  • 391 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信