vue+element遇到的對象屬性監聽問題


當使用element的dialog組件時,賦值對象時監聽出了問題。

賦值步驟:

initUpdate: function (obj) {
      this.loadingMapFunc();
      this.clearDate();//先clear對象
      this.updateBeforeData = this.copyDeep(obj);
      //然后給對象賦值
      for (var key in this.formDatas) {
        this.$set(this.formDatas, key, obj[key]);
      }//賦值完並沒有進入監聽的方法(即使屬性值前后不同)
      setTimeout(
        function () {
          this.$set(this.formDatas, "areaId", obj["areaId"]);
        }.bind(this),
        500
      );
    },

監聽方法:

computed: {
    dataListNew() {
      return JSON.parse(JSON.stringify(this.formDatas));//使用深度復制避免引用的值相同
    },
  },
  watch: {
    dataListNew: {
      handler: function (val, oldVal) {
        if (val.townId != oldVal.townId) {
            //業務邏輯
        }
      },
      deep: true,
    },
  },

即使使用深度監聽也無法解決監聽不到對象屬性變化的問題,后來使用了dialog的關閉摧毀節點的屬性后就可以了。

 

<el-dialog
      :title="dialogTitle"
      :visible.sync="dialogOption"
      width="60%"
      :close-on-click-modal="false"
      :destroy-on-close="true"
    >
      <form-widget ref="_formWidget" :areas="areas" @queryData="queryNewData"></form-widget>
      <span slot="footer" class="dialog-footer">
        <button type="button" class="btn btn-primary" @click="confirmDataFunc">確定</button>
        <button type="button" class="btn btn-default" @click="dialogOption=false">取消</button>
      </span>
</el-dialog>

問題雖然解決,其原理還是很模糊,求解答!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM