升级指南
本页面包含了一个详细的破坏性变动的列表,以及如何将你的应用升级到 Vuetify 3.0 所需的步骤。
DANGER
此页面中的许多问题,可以使用 eslint-plugin-vuetify 插件完成
INFO
在升级 Vuetify 3 之前,请参考确认官方的 Vue 3 升级指导升级指导。
WARNING
并非所有的 Vuetify 2 的组件在 Vuetify 3 中都可用;这些组件会在 Vuetify 实验室 中开发并释出。
起步
- Vuetify 类已删除, 现在使用的是 createVuetify 函数。
js
Vue.use(Vuetify)
const vuetify = new Vuetify({ ... })
const app = new Vue({
vuetify,
...
})js
const app = createApp()
const vuetify = createVuetify({ ... })
app.use(vuetify)- 现在一般使用
import ... from 'vuetify'单独导入所需的内容,为了导入全部内容,请导入'vuetify/dist/vuetify.js'(不推荐) 'vuetify/lib'不再被使用,请根据情况更改为使用'vuetify'/'vuetify/components'/'vuetify/directives'之一- 仅组件样式会被导入,全局样式必须从
'vuetify/styles'单独导入。 - vuetify-loader 已更名为 webpack-plugin-vuetify, 我们还有一个新的 vite-plugin-vuetify 插件用于 vite 。
Features (特性)
Layout (布局)
- 不再包含以前作为
.v-application p或.v-application ul包含的全局样式。如果您需要p, 的 margin 或ul和ol的 padding-left,请在根组件的<style>标记中手动设置。 - 已从 v-navigation-drawer、v-app-bar 和 v-system-bar 中移除
stateless,clipped,clipped-right和app等 props。标记中的位置决定了外观。使用order="number"prop 可手动影响其位置。 $vuetify.breakpoint已更名为$vuetify.display并拓展了 新的属性
Theme (主题)
- 现在支持多个主题,因此从组件中删除了
light/darkprops 。使用v-theme-provider为特定组件树设置主题。- 组件以前有一个
darkprop,如 v-app-bar,现在接受theme="dark"prop 。
- 组件以前有一个
- 主题颜色会自动设置前景文字颜色, 如果您正在使用
light/dark来获得不同的文本颜色,您可能不再需要它。 - 变体命名方案略有变化,现在是一个单词而不是两个。例如,
primary darken-1现在是primary-darken-1。- 要使用变量命名作为
colorprops 的值,您打算使用的变量需要在theme.variations.colors下的主题中启用。例如:colors: ['primary']
- 要使用变量命名作为
- 颜色类已重命名:
- 背景有一个
bg-前缀, 例如.primary现在是.bg-primary. - 文本颜色有一个
text-前缀, 例如,.primary--text现在是.text-primary. - 变量不再是一个单独的类,例如
.primary--text.text--darken-1现在是.text-primary-darken-1.
- 背景有一个
- 主题系统现在内部使用 CSS 变量,所以
customProperties不再需要。- 如果你想在 v2 里使用
customProperties, 命名方案已从--v-primary-base改为--v-theme-primary. - 自定义属性现在也是一个 rgb 列表,而不是十六进制,因此访问它们必须使用
rgb()或rgba(), 例如color: rgb(var(--v-theme-primary))而不是color: var(--v-primary-base).
- 如果你想在 v2 里使用
- 主题配置中的主题颜色现在嵌套在
colors属性内,例如:const myTheme = { theme: { themes: { light: { colors: { primary: '#ccc' } } } } }
SASS variables (变量)
$headings与$typography合并: 通过map-get($typography, 'subtitle-2', 'size')访问 subtitle-2 的字体大小- 如果您在 v2 版本中从
~vuetify/src/styles/settings/_variables导入了变量,现在则必须使用vuetify/settings替代。 - 以前存在于类似
~/vuetify/src/components/VIcon/VIcon.sass中的组件变量现在可以直接从vuetify/settings中导入了。 $display-breakpoints不再包括{breakpoint}-only变量 (例如. xs-only), 使用@media #{map-get(v.$display-breakpoints, 'xs')}代替。$transition映射已被删除, 请使用独立的$standard-easing,$decelerated-easing,$accelerated-easing变量替代。$container-padding-x在 v2 现在是 16px 而不是 12px。 您可以将其替换为$spacer * 3t'以获得之前的外观。- 重命名或删除的组件变量太多,无法列出。由于元素结构发生了重大变化,所以没有自动更新这些元素的方法,您需要手动更新这些元素以及任何自定义样式。
样式和实用类
.hidden-{breakpoint}-only已重命名为.hidden-{breakpoint}.text-xs-{alignment}已重命名为.text-{alignment}以反映它适用于所有断点的事实。- 为了保持一致性,排版类已经重命名,并且都以
text-, 作为前缀,例如.display-4现在是.text-h1 - 转换缓和类已被删除。
INFO
不会提供类更改的完整列表,请使用eslint-plugin-vuetify 自动修复它们。
Components (组件)
常规更改
- 在支持
v-model使用的组件上,valueprop 已被model-value所取代。(v3 需要此更改)。- 注意,一些作为 selection value 使用的值不适用于
value,例如v-btn-toggle中的v-btn。
- 注意,一些作为 selection value 使用的值不适用于
- 在支持
v-model使用的组件上,@inputevent 已被@update:model-value取代。(v3 需要此更改) Left和right分别被start和end取代。这也适用于实用程序类,例如.round -r现在是.round-e。- 尺寸 props
small/medium/large等已合并为一个 size prop。 absolute和fixedprops 已合并为一个positionprop。top/bottom/left/rightprops 已合并为一个locationprop。background-colorprop 已更名为bg-color。- 在诸如 v-select、v-btn-toggle、v-alert、v-text-field、v-list 和 v-list-item 等组件上,
denseprop 已更改为densityprop,其可选值有default、comfortable、compact。 - 激活器插槽的工作方式略有不同。将
#activator={attrs, on}替换为#activator={props},然后删除v-on="on"并将v-bind="attrs"替换为v-bind="props"。 - 一些组件的标记有结构上的变化。这意味着您可能必须更改在测试中查询和断言它们的方式。例如,
V-switch现在在底层使用<input type="checkbox" />,这就是为什么aria-checked和aria-role="switch"属性被删除的原因。
Input 组件
- 词缀槽现在是一致的
prepend和prepend-inner是一样的。append已经重命名为append-inner。append-outer已经重命名为append。
- 变量 props
filled/outlined/solo已经合并成一个variantprop。- 可用的值有
'underlined','outlined','filled','solo', 或'plain'。
- 可用的值有
success和success-messagesprops 已被删除。validate-on-blurprop 已经重命名为validate-on="blur"。
v-alert
border属性值left和right已被重命名为start和end。colored-border属性已更名为border-color。dismissable属性已更名为closable。outlined和text属性已合并为variant属性。- 允许的值有
'elevated','flat','tonal','outlined','text', 和'plain'。
- 允许的值有
text属性有新的用途。它用于代表警告的文字内容,如果保持默认则其不起作用。
v-badge
overlap重叠已经被移除,现在是默认样式,使用floating来恢复 v2 的默认样式。- 翻译 props 的
mode和origin已被移除。 avatarprop 不再需要,并已被移除。
v-banner
actionsslot 不再提供解散函数。shapedprop 已被移除。icon-color已被移除。Single-line已被lines="one"取代。color现在适用于图标和动作文本。使用bg-color更改背景颜色。
v-btn/v-btn-toggle
active-classprop 已重命名为selected-class- 不再支持
fab。如果你只需要一个圆形按钮,使用iconprop 或应用一个.rounded-circleclass。 flat/outlined/text/plainprops 已合并为一个variantprop.depressed已更名为variant="flat"retain-focus-on-click已被移除,使用:focus-visible代替。v-btn-toggle需要mandatory="force"prop 来实现与 V2 中的mandatoryprop 相同的行为。- 禁用的按钮会使用指定
color的褪色变体而不是灰色 (#15147)- 将 sass 变量
$button-colored-disabled设置为 false 以使用灰色。
- 将 sass 变量
v-checkbox/v-radio/v-switch
input-valueprop 已重命名为model-value。 (v3 需要这个更改)on-icon和off-iconprops 已更名为true-icon和false-icon.on-value和off-valueprops 已更名为true-value和false-value.v-checkbox的 slot 标签不应该再包含一个<label>,因为它已经包装了一个了。
v-date-picker
- 使用
Date使用 Date 对象而不是字符串。包括一些实用程序函数来帮助在两者之间进行转换,请参阅 dates. locale,locale-first-day-of-year,first-day-of-week,day-format,weekday-format,month-format,year-format,header-date-format, 和title-date-format现在是日期适配器的一部分,并使用全局配置的 locale 而不是被当作 props 传递。active-picker已重命名为view-mode.picker-date已被单独取代month和yearprops.range目前尚未实现,将来将作为单独的组件添加。
v-form
validate()现在返回一个Promise<FormValidationResult>而不是 boolean。 等待承诺,然后检查result.valid以确定表单状态有效。
v-list
two-line和three-lineprops 已经合并成一个的linesprop 允许值为“2”或“3”。v-list-item-group已被删除,只需为列表项添加value以使其可选,并在 v-list 上绑定v-model:selected以获得所选值。v-list-item-icon和v-list-item-avatar被去除, 使用v-list-item和icon或avatarprops, 或在附加或前置插槽中的角色。v-list-item-content已被删除,列表现在使用 CSS 网格进行布局。v-list-group现在可以任意深度嵌套,sub-groupprop 应当去除。v-list-iteminput-valueprop 已经被替换为active.v-list-iteminactiveprop 已经被替换为:active="false" :link="false".v-subheader已重命名为v-list-subheader.v-list-item的activescoped slot prop 已重命名为isActive
v-navigation-drawer
statelessprop 已被删除,手动控制状态使用model-value或v-model代替。
v-rating
color已重命名为active-color.background-color已重命名为color.
v-select/v-combobox/v-autocomplete
- 不存在于
items中的 V-model 值现在将被渲染而不是被忽略。 cache-itemsprop 已经删除,缓存应该在外部处理。item-text已重命名为item-title, 默认情况下查找 item 对象上的title属性。value没有变化。item-disabled已被删除, 并且关于项目对象的disabled,header,divider, 和avatar属性被忽略。- 传递给
v-list-item的其他道具可以使用item-propsprop 来指定。item-props可以是一个函数,它接受 item 对象并返回一个 props 对象,或者设置为 booleantrue以将 item 对象直接作为 props 传播。
- 传递给
- 插槽中的
item项目对象现在是一个ListItem对象,原始的项目对象可以通过item.raw获得。 item插槽将不再自动生成一个v-list-item组件, 取而代之的是一个props对象,它提供了所需的事件侦听器和 props:
html
<template #item="{ props }">
<v-list-item v-bind="props"></v-list-item>
</template>- 如果设置了
chipsprop,应该使用chipslot 而不是selection, 这将自动为芯片提供一些默认值。 - Non-
multiple非多重组合框现在将更新它的模型,因为你输入(像一个文本字段),而不是只在模糊。
v-simple-table
v-simple-table已重命名为v-table
v-stepper (vertical)
v-stepper-step已重命名为v-stepper-vertical-item. 将内容移动到 title slot.v-stepper-content已被移除。 将内容移动到v-stepper-vertical-item的默认槽位。
v-data-table
- 头对象:
textproperty 已重命名为title.data-table-select和data-table-expand必须定义为key而不是value.class已经被替换为headerProps.cellClass已经被替换为cellProps并且现在可以接受一个函数或一个对象。filter功能需要使用search才能被触发。
- 表需要使用
searchprop 才能触发过滤,items项数组可以预先过滤和计算。 - 使用
Server -items-length的服务器端表必须替换为<v-data-table-server items-length />。 @click:*时间的参数顺序现在一致为(event, data).onRowClick (item, data, event)应该改为onRowClick (event, { item }).
item-class和item-style都被合并成row-props, 并且新添加了cell-props。sort-descandgroup-desc都被合并成sort-by和group-by. 这些属性现在接受{ key: string, order: 'asc' | 'desc' }对象数组而不是字符串。current-itemsevent 已重命名为update:current-items.- 现在可以使用 headers 对象中的sort key 或使用
custom-key-sortprop 来完成自定义排序。
v-slider/v-range-slider
ticks已重命名为show-ticks.tick-labels已重命名为ticks.vertical已重命名为direction="vertical".step步骤的默认值现在是 0 而不是 1。
v-tabs
v-tab-item已被移除,请使用v-window-item替代。
v-img
contain已被移除,现在是默认行为。用cover填满整个容器。
v-menu
roundedprop 已被移除。对菜单内容元素应用一个圆角 css 类代替效果。例如.rounded-teinternal-activatorprop 已被移除,请使用 ref 唯一选择器代替。absolute,offset-y和offset-xprops 已被移除.手动定位现在通过向targetprop 传递一个[x, y]数组来完成。nudge-*props 已被移除。没有直接替代,但可以使用offset来达到类似的结果。
v-snackbar
action插槽已重命名为actions
v-expansion-panel
v-expansion-panel-header已重命名为v-expansion-panel-title.v-expansion-panel-content已重命名为v-expansion-panel-text.v-expansion-panel现在提供text和titleprops 以替代 subcomponents。
v-card
v-card现在不允许内容溢出元素或是使用更大的z-index值来使元素显示在它的外面。要禁止这个行为,可以使用<v-card style="overflow: initial; z-index: initial">(#17593, #17628)
v-sparkline
value现在是model-value
Directives
v-intersect
- 处理程序参数顺序已从
entries, observer, isIntersecting改为isIntersecting, entries, observer