解決使用el-cascader"報錯TypeError: Cannot read property 'level' of null"

1、what?
在使用Cascader 級聯選擇器中的el-cascader組件進行級聯效果實現的時候,想要實現級聯選擇器中根據指定條件默認選中級聯選項的效果,但是設置完默認選項之后雖然可以顯示預想的效果,但是總是會報以上的錯誤。

2、why?
因為Cascader下拉進行顯示的數據是由后臺接口進行提供,在進行默認值顯示修改時,將后臺返回的數據賦值給v-model綁定的數據,進行如此的賦值是能夠實現默認值改變顯示的,但是在改變榜單類型后,Cascader的options動態的進行了改變,使得Cascader的綁定數值在下拉選項中不存在。總之就是因為點擊或者選中了父節點改變了菜單的類型,從而options進行動態得改變了,改變之后因為沒有了這個父節點就會產生報錯。當然,只要activePath 不改變就會產生報錯。

在改變菜單類型,然后options改變之后,只需要通過重新渲染Cascader組件就可以解決了。
我使用了如下的方法進行重新渲染Cascader解決的:
給Cascader設置了一個key值(注意需要在先初始化:optionsKey: 1)

具體如下:

<el-cascader
              :key="optionsKey"
              :options="options"
              :props="optionProps"
              v-model="classData"
              @change="classChange"
              clearable
            ></el-cascader>
data () {
    return {
     optionsKey: 1,//聯級選擇的key
      optionsData: [],
      options: [], // 菜單目錄
      classData: [], // 選中的菜單分類
}
}

每次請求菜單時,都key都+1 , ++this.optionsKey

    getClassData () {
      this.$api.post('/statistics/getqualitytab', {}, (res) => {
        if (res.status) {
          ++this.optionsKey
          this.optionsData = res.data
          if (this.titleId === 1) {
            this.options = this.optionsData.filter((item) => {
              return item.id !== '33'
            })
          } else {
            this.options = this.optionsData.filter((item) => {
              return item.id === '33'
            })
          }
        } else {
          this.$notify.warning({
            title: '提示',
            message: res.msg
          })
        }
      })
    },
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容