ant-design table 组件 列头名称 国际化i18n问题 解决

话不多说,直接进入主题。

ant-design 在使用它的table组件的时候,不知道你们有没有需求说需要翻译列表头部名称:

在切换语言的时候,table的列头名称 并不会同步更换对应语言, 而是需要你重新laod或者切换页面之后才生效。

官方文档没有涉及相关问题的解决办法,其实很明显原因就是切换语言的时候,表头的i18n全局指令变量没有被触发:

这是正常使用ant-design table 组件时, 给列的title赋值的方法: 

 columns: [
        {
          title: this.$t('general.serial'),
          width: 120,
          scopedSlots: { customRender: 'serial'}
        }
]

columns是table所有列的数据的数组变量,title是给列头名称的固定属性,因为它会对应一个name为title的slot。

国际化之后,使用全局i18n指定 this.$t 去翻译对应列的词条,这个时候问题就来了,切换语言并不会触发其自动翻译,需要重新load 当前页面或者你切到别的页面,再返回该页面,才能拿到对应语言的词条。

 

所以,怎么解决这个问题?

通过官方文档,看到table colums的title属性的类型可以是string/slot。 string的话就是上面我们采用的方法,所以,此时是不是可以考虑使用slot的方式,给title传值,然后将翻译的工作交回到html中。

ok, 我们开始尝试:

columns: [
        {
          slotName: 'general.serial',
          width: 120,
          scopedSlots: { customRender: 'serial', title: 'general.serial' }
        }
]

在scopedSlots中添加title的slot名称,这里直接把对应国际化词条的完整路径赋给它,为什么这么做?继续往下看:

我再给每一列添加一个名叫slotName的属性,它的值也是对应国际化词条的完整路径。

接着在<a-table>组件中定义对应的slot,用来展示column的title。

这个时候,你会有个问题跑进你的脑子里:

卧槽!这样我还得在html中加入每一列的slot,因为每个slot名称都不一样,这条html又要增加很多代码了。

且慢,还记得上面我给每一列增加了一个slotName属性吗,而且它的值和title的slot name 是一样的。

所以,一个循环就可以搞定了。请看:

<template v-for="(item, index) in columns" :slot="item.slotName">
   <span :key="index">{{ $t(item.slotName) }}</span>
</template>

每一列的slotName就是刚刚在columns中定义的slotName的值,而且这个值恰好又是该列的title对应的国际化词条路径,所以直接在这里 $t(item.slotName) 就可以翻译每一列的title了。

这个问题也就完美的解决了。

 

总结:

1,官方文档要看仔细;

2,在一条路行不通的时候不一定非要纠结这条路错在哪,往往可能就是这条路是不通的, 你再怎么钻牛角尖它也到不了你想到达的地方。也许你可以再修一条路弯过去,或者把被堵住的地方挖开,但是这样的代价不一定你能承担的。而且,往往就是你把障碍挖开了,接下来还有更多你没想到的障碍。所以,及时的换一条路,可能就轻松的到达了。

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
### 回答1: Ant Design Vue 的表格组件支持拖拽的功能。具体实现方法可以参考官方文档中的示例代码。在表格组件中,可以通过设置 `drag-and-drop` 属性为 `true` 来开启拖拽的功能。同时,还需要设置 `columns` 属性为一个数组,数组中的每个元素表示一的配置信息,包括的标题、数据字段、宽度等。在拖拽时,可以通过监听 `onColumnDragEnd` 事件来获取拖拽后的的顺序信息,然后根据顺序信息重新渲染表格。 ### 回答2: ant-design-vue table是一个基于Vue框架构建的图形用户界面组件库,其table组件提供了丰富的功能,其中包括拖拽。下面我们来详细介绍一下如何实现ant-design-vue table的拖拽功能。 首先,我们需要在table组件的配置中增加一个属性:columnsResizable,将其设置为true,该属性作用是启用宽调整的功能。然后,我们需要在table组件的html中增加一个slot,定义的内容,方便后续处理拖拽事件。关于slot的具体用法请自行查阅官方文档。 接下来,我们需要通过样式将table设置为可拖拽的状态。可以通过设置th元素的cursor属性为col-resize来实现,同时为th元素绑定mousedown事件,当用户拖拽时,就可以触发该事件,然后调用对应的处理函数。 在处理函数中,我们需要先获取当前所在的位置,然后记录下鼠标的初始位置。接着监听mousemove事件,当鼠标移动时,计算出当前的目标宽度,并通过css样式设置的宽度,同时更新对应的宽度。最后,当鼠标松开时,释放事件监听。 除此之外,我们还需要注意一些细节问题,例如拖拽时保持整个table的宽度不变,下一的位置和宽度需要同步调整等。这些都需要我们在代码中仔细处理,以避免出现意外的问题。 总之,通过以上步骤,我们就可以成功实现ant-design-vue table的拖拽功能了。当然,具体实现方式可能因人而异,这里只是提供一种参考思路,希望对大家有所帮助。 ### 回答3: Ant Design Vue是一款基于Vue的企业级UI库,它提供了丰富的组件和样式,可以直接应用于业务中。其中的table组件支持拖拽,可以使用户根据自身需求自由排序table中的。 Ant Design Vue的table组件可以通过对象属性的方式自定义table,其中包括每一的数据源、表、宽度等属性。在这些属性中,index属性会在表中显示的序号,同时也可以用作table的排序。 拖拽的实现可以通过拖拽事件来实现。拖拽事件包括dragstart、dragover、drop和dragend四种事件。其中dragstart事件在拖动元素时触发,可以在事件中将当前的index属性传递给被拖动元素;dragover事件在拖动元素进入目标元素时触发,可以在事件中获取目标的index属性,并用作当前和目标的交换;drop事件在拖动元素松开鼠标时触发,可以在事件中触发交换的逻辑;dragend事件在拖动元素结束时触发,可以在事件中清空拖动元素的状态。 在实现拖拽的过程中,还需要考虑数据的绑定。拖拽并不会改变table的数据源,因此需要手动更新数据源中每一的index属性。同时,在交换的时候,需要考虑表和单元格中数据的同步更新。 总的来说,Ant Design Vue的table组件拖拽的实现相对简单,可以通过拖拽事件和数据源的操作来实现。在用户体验上,拖拽可以大大提高用户对table的操作效率,同时也增加了table的交互性。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值