Ant Design Table 如何動(dòng)態(tài)自定義勇吊?Ant Popover 遮擋?

項(xiàng)目場景:

基于electron + Vue + node.js + express + mysql + evanpatchouli-mysql + Ant-Design-Vue窍仰,編寫一款屬于自己的輕量級MySQL數(shù)據(jù)庫界面工具汉规。


問題列表

  1. 如何動(dòng)態(tài)渲染高度自定義的Ant Design Table?
  2. Ant Design Table 表頭固定辈赋,內(nèi)部Popover意外遮擋

問題描述

問題1

???????作為一款數(shù)據(jù)庫界面工具鲫忍,需要?jiǎng)討B(tài)地獲得數(shù)據(jù)庫和表的信息,因此要渲染的表結(jié)構(gòu)經(jīng)常在變钥屈。
???????Ant Design Vue的官方手冊給出的示例里悟民,全部采用:datasource綁定數(shù)據(jù)源,:columns綁定表結(jié)構(gòu)篷就,如果想自定義column的內(nèi)容射亏,就往標(biāo)簽內(nèi)嵌插槽<template>
???????以下是官方的template模板

<a-table :data-source="data">
    <a-table-column key="age" title="Age" data-index="age" />
    <a-table-column key="address" title="Address" data-index="address" />
    <a-table-column key="tags" title="Tags" data-index="tags">
      <template #default="{ text: tags }">
        <span>
          <a-tag v-for="tag in tags" :key="tag" color="blue">{{ tag }}</a-tag>
        </span>
      </template>
    </a-table-column>
    <a-table-column key="action" title="Action">
      <template #default="{ record }">
        <span>
          <a>Action 一 {{ record.firstName }}</a>
          <a-divider type="vertical" />
          <a>Delete</a>
        </span>
      </template>
    </a-table-column>
  </a-table>

???????我復(fù)制了這個(gè)模板用到我的表格中,并且自定義了一個(gè)懸浮觸發(fā)的Popover竭业,這就存在一個(gè)問題:模板里智润,<a-table>內(nèi)寫了自定義的<a-table-column>,表頭是在column標(biāo)簽上綁定title未辆,但title不支持像:title這樣的動(dòng)態(tài)綁定窟绷,只能綁定一個(gè)死的字符串。
???????寫死的表頭并不符合我動(dòng)態(tài)渲染不同表格的需求咐柜,刪掉寫死的表頭兼蜈,則不會(huì)渲染表頭;我嘗試為<a-table>定義了columns拙友,表頭是有了为狸,但我自己寫<a-table-column>又會(huì)被默認(rèn)樣式覆蓋,單純的渲染了源數(shù)據(jù)遗契。


原因分析:

???????無論有沒有綁定:columns時(shí)辐棒,渲染規(guī)則是一定的。為此,我們需要弄清楚不同情況下參數(shù)的映射關(guān)系漾根,才能正確的渲染我們想要的效果泰涂。


解決方案1:

按照上面那個(gè)模板改:
不綁定columns,手寫ant-table-column立叛,v-for綁定表結(jié)構(gòu)對column進(jìn)行列表渲染负敏,并綁定:dataindex為字段名去拿到數(shù)據(jù),內(nèi)置兩個(gè)插槽對應(yīng)表頭和內(nèi)容秘蛇,#title和#default

<a-table
  :dataSource="users"
  :pagination="{ pageSize: 9 }"
  :scroll="{ x: 'max-content', y: clientHeight }"
>
  <a-table-column
    v-for="item in userStruct"
    :key="item.Field"
    :data-index="item.Field"
    @resizeColumn="handleResizeColumn"
  >
    <template #title
      ><span
        style="
          background: var(--text-backcolor);
          color: var(--most-backlolor);
        "
        >{{ item.Field }}</span
      >
    </template>
    <template #default="{ text: content }">
      <a-popover
        id="ziduanInfo"
        title="字段信息"
        placement="right"
        trigger="hover"
        :getPopupContainer="
          (triggerNode) => {
            return triggerNode.parentNode;
          }
        "
      >
        <template #content>
          <p>類型: {{ item.Type }}</p>
          <p>鍵型: {{ item.Key }}</p>
          <p>非空: {{ item.Null }}</p>
          <p>字符集: {{ item.Collation }}</p>
          <p>默認(rèn)值: {{ item.Default }}</p>
          <p>權(quán)限: {{ item.Privileges }}</p>
          <p>其他: {{ item.Extra }}</p>
          <p>描述: {{ item.Comment }}</p>
        </template>
        <span class="table-cell-content">{{ content }}</span>
      </a-popover>
    </template>
  </a-table-column>
</a-table>

解決方案2:

不用官方給的這個(gè)示例其做,換一種插槽的方式
不寫ant-table-column,在ant-table上綁定columns
內(nèi)置兩個(gè)插槽對應(yīng)表頭和內(nèi)容赁还,#headerCell和#bodyCell
內(nèi)容依舊是用v-for進(jìn)行渲染

  <a-table :dataSource="users" :columns="columns">
    <template #headerCell="{ column }">
      <template v-if="column.key === 'id'">
        <span>
          <smile-outlined />
          <a-button>{{ column.key }}</a-button>
        </span>
      </template>
    </template>
    <template #bodyCell="{ column, record }">
      <template v-for="(item, index) in userConstruct" :key="index">
        <a>
          <a-button>{{ record[index] }}</a-button>
        </a>
      </template>
    </template>
  </a-table>

問題2

???????我的應(yīng)用做了響應(yīng)式界面妖泄,當(dāng)electron窗口高度減小時(shí),ant-table可見高度也隨之減小艘策,為此我設(shè)置了它的:scroll蹈胡,為其動(dòng)態(tài)指定了一個(gè)監(jiān)聽窗口的變量作為高度(y)。
???????我使用問題一的方案一中的代碼時(shí)朋蔫,當(dāng)我的數(shù)據(jù)只有寥寥幾條或者窗口很扁的時(shí)候罚渐,鼠標(biāo)懸浮字段浮現(xiàn)的popover被限制在表可見高度內(nèi),無法完全顯示驯妄。
???????為了解決這個(gè)問題荷并,我先嘗試css穿透ant-table,設(shè)置overflow為visible青扔,無效源织。又嘗試將xss穿透popover,設(shè)置其z-index為更高值微猖,無效谈息。

原因分析

ant-popover在渲染時(shí),默認(rèn)是掛載到最大的父容器body上凛剥。在我復(fù)制下來的示例代碼中侠仇,指定了其掛載的容器為出發(fā)事件所在的容器-即ant-table,由于ant-table被我設(shè)置了高度犁珠,popover若高度比表格更高傅瞻,溢出部分只能滑動(dòng)父容器(ant-table)查看。

解決方案

???????刪除ant-popover標(biāo)簽內(nèi)綁定的掛載容器傳值盲憎,或者為其指定一個(gè)合適的掛載容器。

題外話

???????這是我第一次使用ant-design胳挎,感覺上手不是很快饼疙,還在學(xué)習(xí)中,如有講的不對的地方還請見諒。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末窑眯,一起剝皮案震驚了整個(gè)濱河市屏积,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌磅甩,老刑警劉巖炊林,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異卷要,居然都是意外死亡渣聚,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門僧叉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奕枝,“玉大人,你說我怎么就攤上這事瓶堕“溃” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵郎笆,是天一觀的道長谭梗。 經(jīng)常有香客問我,道長宛蚓,這世上最難降的妖魔是什么激捏? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮苍息,結(jié)果婚禮上缩幸,老公的妹妹穿的比我還像新娘。我一直安慰自己竞思,他們只是感情好表谊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著盖喷,像睡著了一般爆办。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上课梳,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天距辆,我揣著相機(jī)與錄音,去河邊找鬼暮刃。 笑死跨算,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的椭懊。 我是一名探鬼主播诸蚕,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了背犯?” 一聲冷哼從身側(cè)響起坏瘩,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎漠魏,沒想到半個(gè)月后倔矾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡柱锹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年哪自,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奕纫。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡提陶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出匹层,到底是詐尸還是另有隱情隙笆,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布升筏,位于F島的核電站撑柔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏您访。R本人自食惡果不足惜铅忿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望灵汪。 院中可真熱鬧檀训,春花似錦、人聲如沸享言。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽览露。三九已至荧琼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間差牛,已是汗流浹背命锄。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留偏化,地道東北人脐恩。 一個(gè)月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像侦讨,于是被迫代替她去往敵國和親被盈。 傳聞我的和親對象是個(gè)殘疾皇子析孽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容