element-ui的el-tree多選樹(shù)(復(fù)選框)父子節(jié)點(diǎn)關(guān)聯(lián)問(wèn)題

需求

選中父節(jié)點(diǎn)歼秽,子節(jié)點(diǎn)默認(rèn)全選,取消一個(gè)子節(jié)點(diǎn)看疗,那么這個(gè)子節(jié)點(diǎn)的所有父節(jié)點(diǎn)都取消掉選中狀態(tài),但是其兄弟節(jié)點(diǎn)不會(huì)受影響睦授。

場(chǎng)景

場(chǎng)景一: 點(diǎn)擊‘你好’两芳,所有子節(jié)點(diǎn)全選中


image.png
image.png

場(chǎng)景二: 點(diǎn)擊‘再見(jiàn)’,取消‘再見(jiàn)’和‘你好’節(jié)點(diǎn)

image.png
image.png

場(chǎng)景三:點(diǎn)擊‘3’去枷,最下層節(jié)點(diǎn)‘4’也會(huì)被選中怖辆。取消最下層節(jié)點(diǎn)‘4’,節(jié)點(diǎn)‘3’也會(huì)被取消


image.png
image.png

代碼

以下為完整代碼:

<template>
  <div class="custom-tree-container">
    <div class="block">
      <p>使用 scoped slot</p>
      <el-tree
        :data="treeList"
        ref="tree"
        @check="clickDeal"
        :check-strictly="true"
        show-checkbox
        node-key="id"
        default-expand-all
        :expand-on-click-node="false"
        @check-change="checkChange"
        :props="leftProps"
      >
        <span class="custom-tree-node" slot-scope="{ node, data }">
          <span>{{ node.label }}</span>
        </span>
      </el-tree>
    </div>
  </div>
</template>

<script>
export default {
  props: {
    treeList: {
      type: Array,
      default() {
        return []
      }
    }
  },
  name: 'treeTest',
  components: {},
  data() {
    return {
      leftProps: {
        label: 'name'
      },
      isClickSelected: false
    }
  },
  methods: {
    checkChange(obj, isChecked, isChildChecked) {
      // 取消删顶,子節(jié)點(diǎn)只要有一個(gè)被取消父節(jié)點(diǎn)就被取消
      if (!isChecked) {
        this.$refs.tree.setChecked(obj.p_id, false)
      }
    },
    clickDeal(currentObj, treeStatus) {
      // 用于:父子節(jié)點(diǎn)嚴(yán)格互不關(guān)聯(lián)時(shí)竖螃,父節(jié)點(diǎn)勾選變化時(shí)通知子節(jié)點(diǎn)同步變化,實(shí)現(xiàn)單向關(guān)聯(lián)逗余。
      let selected = treeStatus.checkedKeys.indexOf(currentObj.id) // -1未選中
      this.isClickSelected = selected
      // 選中
      if (selected !== -1) {
        // 子節(jié)點(diǎn)只要被選中父節(jié)點(diǎn)就被選中
        this.selectedChildren(currentObj)
        // 統(tǒng)一處理子節(jié)點(diǎn)為相同的勾選狀態(tài)
        this.uniteChildSame(currentObj, true)
      } else {
        // 未選中 處理子節(jié)點(diǎn)全部未選中
        if (currentObj.children && currentObj.children.length !== 0) {
          this.uniteChildSame(currentObj, false)
        }
      }
    },
    // 統(tǒng)一處理子節(jié)點(diǎn)為相同的勾選狀態(tài)
    uniteChildSame(treeList, isSelected) {
      this.$refs.tree.setChecked(treeList.id, isSelected)
      let childLen = treeList.children ? treeList.children.length : 0
      if (childLen) {
        for (let i = 0; i < childLen; i++) {
          this.uniteChildSame(treeList.children[i], isSelected)
        }
      }
    },
    // 統(tǒng)一處理子節(jié)點(diǎn)為選中
    selectedChildren(currentObj) {
      let currentNode = this.$refs.tree.getNode(currentObj)
      currentNode.childNodes.map(item => {
        if (item.key !== undefined) {
          this.$refs.tree.setChecked(item, true)
          this.selectedChildren(item)
        }
      })
    }
  }
}
</script>
<style lang="scss" scoped>
</style>


數(shù)據(jù)結(jié)構(gòu)

這是后端返回的數(shù)據(jù)的結(jié)構(gòu):


image.png

參考文檔(需求稍有不同)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末特咆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子录粱,更是在濱河造成了極大的恐慌腻格,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件关摇,死亡現(xiàn)場(chǎng)離奇詭異荒叶,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)输虱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)些楣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人宪睹,你說(shuō)我怎么就攤上這事愁茁。” “怎么了亭病?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵鹅很,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我罪帖,道長(zhǎng)促煮,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任整袁,我火速辦了婚禮菠齿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘坐昙。我一直安慰自己绳匀,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著疾棵,像睡著了一般戈钢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上是尔,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天殉了,我揣著相機(jī)與錄音,去河邊找鬼嗜历。 笑死宣渗,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的梨州。 我是一名探鬼主播痕囱,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼暴匠!你這毒婦竟也來(lái)了鞍恢?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤每窖,失蹤者是張志新(化名)和其女友劉穎帮掉,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體窒典,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蟆炊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瀑志。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涩搓。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖劈猪,靈堂內(nèi)的尸體忽然破棺而出昧甘,到底是詐尸還是另有隱情,我是刑警寧澤战得,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布充边,位于F島的核電站,受9級(jí)特大地震影響常侦,放射性物質(zhì)發(fā)生泄漏浇冰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一聋亡、第九天 我趴在偏房一處隱蔽的房頂上張望湖饱。 院中可真熱鬧,春花似錦杀捻、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)仅仆。三九已至,卻和暖如春垢袱,著一層夾襖步出監(jiān)牢的瞬間墓拜,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工请契, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留咳榜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓爽锥,卻偏偏與公主長(zhǎng)得像涌韩,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子氯夷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345