ConfigProvider全局化配置 - 图1

ConfigProvider 全局化配置

为组件提供统一的全局化配置。

ConfigProvider全局化配置 - 图2

国际化

此处列出 Ant Design Vue 中需要国际化支持的组件,你可以在演示里切换语言。

  1. <template>
  2. <div>
  3. <div class="change-locale">
  4. <span style="margin-right: 16px">Change locale of components: </span>
  5. <a-radio-group :value="locale" @change="changeLocale">
  6. <a-radio-button key="en" :value="enUS">
  7. English
  8. </a-radio-button>
  9. <a-radio-button key="cn" :value="zhCN">
  10. 中文
  11. </a-radio-button>
  12. </a-radio-group>
  13. </div>
  14. <a-config-provider :locale="locale">
  15. <div :key="locale ? locale.locale : 'en'" class="locale-components">
  16. <div class="example">
  17. <a-pagination :default-current="1" :total="50" show-size-changer />
  18. </div>
  19. <div class="example">
  20. <a-select show-search style="width: 200px">
  21. <a-select-option value="jack">
  22. jack
  23. </a-select-option>
  24. <a-select-option value="lucy">
  25. lucy
  26. </a-select-option>
  27. </a-select>
  28. <a-date-picker />
  29. <a-time-picker />
  30. <a-range-picker style="width: 200px" />
  31. </div>
  32. <div class="example">
  33. <a-button type="primary" @click="visible = true">
  34. Show Modal
  35. </a-button>
  36. <a-button @click="info">
  37. Show info
  38. </a-button>
  39. <a-button @click="confirm">
  40. Show confirm
  41. </a-button>
  42. <a-popconfirm title="Question?">
  43. <a href="#">Click to confirm</a>
  44. </a-popconfirm>
  45. </div>
  46. <div class="example">
  47. <a-transfer
  48. :data-source="[]"
  49. show-search
  50. :target-keys="[]"
  51. :render="item => item.title"
  52. />
  53. </div>
  54. <div style="width: 319px; border: 1px solid #d9d9d9; border-radius: 4px">
  55. <a-calendar :fullscreen="false" :value="moment()" />
  56. </div>
  57. <div class="example">
  58. <a-table :data-source="[]" :columns="columns" />
  59. </div>
  60. <a-modal v-model="visible" title="Locale Modal">
  61. <p>Locale Modal</p>
  62. </a-modal>
  63. </div>
  64. </a-config-provider>
  65. </div>
  66. </template>
  67. <script>
  68. import enUS from 'ant-design-vue/es/locale/en_US';
  69. import zhCN from 'ant-design-vue/es/locale/zh_CN';
  70. import moment from 'moment';
  71. import 'moment/locale/zh-cn';
  72. moment.locale('en');
  73. const columns = [
  74. {
  75. title: 'Name',
  76. dataIndex: 'name',
  77. filters: [
  78. {
  79. text: 'filter1',
  80. value: 'filter1',
  81. },
  82. ],
  83. },
  84. {
  85. title: 'Age',
  86. dataIndex: 'age',
  87. },
  88. ];
  89. export default {
  90. data() {
  91. return {
  92. columns,
  93. visible: false,
  94. locale: enUS,
  95. moment,
  96. enUS,
  97. zhCN,
  98. };
  99. },
  100. methods: {
  101. changeLocale(e) {
  102. const localeValue = e.target.value;
  103. this.locale = localeValue;
  104. if (!localeValue) {
  105. moment.locale('en');
  106. } else {
  107. moment.locale('zh-cn');
  108. }
  109. },
  110. info() {
  111. this.$info({
  112. title: 'some info',
  113. content: 'some info',
  114. });
  115. },
  116. confirm() {
  117. this.$confirm({
  118. title: 'some info',
  119. content: 'some info',
  120. });
  121. },
  122. },
  123. };
  124. </script>
  125. <style scoped>
  126. .locale-components {
  127. border-top: 1px solid #d9d9d9;
  128. padding-top: 16px;
  129. }
  130. .example {
  131. margin: 16px 0;
  132. }
  133. .example > * {
  134. margin-right: 8px;
  135. }
  136. .change-locale {
  137. margin-bottom: 16px;
  138. }
  139. </style>

使用

ConfigProvider 使用 Vue 的 provide / inject 特性,只需在应用外围包裹一次即可全局生效。

  1. <template>
  2. <a-config-provider :getPopupContainer="getPopupContainer">
  3. <app />
  4. </a-config-provider>
  5. </template>
  6. <script>
  7. export default {
  8. methods: {
  9. getPopupContainer(el, dialogContext) {
  10. if (dialogContext) {
  11. return dialogContext.getDialogWrap();
  12. } else {
  13. return document.body;
  14. }
  15. },
  16. },
  17. };
  18. </script>

Content Security Policy

部分组件为了支持波纹效果,使用了动态样式。如果开启了 Content Security Policy (CSP),你可以通过 csp 属性来进行配置:

  1. <a-config-provider :csp="{ nonce: 'YourNonceCode' }">
  2. <a-button>My Button</a-button>
  3. </a-config-provider>

API

参数说明类型默认值版本
autoInsertSpaceInButton设置为 false 时,移除按钮中 2 个汉字之间的空格booleantrue
csp设置 Content Security Policy 配置{ nonce: string }-
renderEmpty自定义组件空状态。参考 空状态slot-scope | Function(componentName: string): VNode-
getPopupContainer弹出框(Select, Tooltip, Menu 等等)渲染父节点,默认渲染到 body 上。Function(triggerNode, dialogContext)() => document.body
locale语言包配置,语言包可到 ant-design-vue/es/locale 目录下寻找object-1.5.0
pageHeader统一设置 pageHeader 的 ghost,参考 pageHeader{ ghost: boolean }‘true’1.5.0
transformCellTextTable 数据渲染前可以再次改变,一般用户空数据的默认配置Function({ text, column, record, index }) => any-1.5.4 |

FAQ

为什么我使用了 ConfigProvider locale,时间类组件的国际化还有问题?

请检查是否设置了 moment.locale('zh-cn'),或者是否有两个版本的 moment 共存。

配置 getPopupContainer 导致 Modal 报错?

当如下全局设置 getPopupContainer 为触发节点的 parentNode 时,由于 Modal 的用法不存在 triggerNode,这样会导致 triggerNode is undefined 的报错,需要增加一个判断条件。

  1. <ConfigProvider
  2. - getPopupContainer={triggerNode => triggerNode.parentNode}
  3. + getPopupContainer={node => {
  4. + if (node) {
  5. + return node.parentNode;
  6. + }
  7. + return document.body;
  8. + }}
  9. >
  10. <App />
  11. </ConfigProvider>