Appearance
非兼容性改变
此页面列出了 Vue 2 对 Vue 3 的所有非兼容性改变。
虽然 Vue 看起来已经发生了很多变化,但您所了解和喜爱的 Vue 的很多东西仍然没有变;但我们希望尽可能完整的为每个记录的更改提供详细的解释和示例。
详情说明
全局API
模板指令
v-model指令在组件上的使用已经被重新设计,替换掉了v-bind.sync- 在
<template v-for>和没有v-for的节点身上使用key发生了变化 v-if和v-for在同一个元素身上使用时的优先级发生了变化v-bind="object"现在是顺序敏感的v-on:event.native事件修饰符已经被移除
组件
- 函数式组件只能通过纯函数进行创建
- 单文件组件 (SFC)
<template>标签的functionalattribute 和函数式组件的functional选项已被移除 - 异步组件现在需要通过
defineAsyncComponent方法进行创建 - 组件事件现在应该使用
emits选项进行声明
渲染函数
- 渲染函数 API 更改
$scopedSlotsproperty 已移除,所有插槽都通过$slots作为函数暴露$listeners被移除或整合到$attrs$attrs现在包含class和styleattribute
自定义元素
其他小改变
destroyed生命周期选项被重命名为unmountedbeforeDestroy生命周期选项被重命名为beforeUnmount- Props 的
default工厂函数不再可以访问this上下文 - 自定义指令的 API 已更改为与组件生命周期一致,且
binding.expression已移除 data选项应始终被声明为一个函数- 来自 mixin 的
data选项现在为浅合并 - Attribute 强制策略已更改
- Transition 的一些 class 被重命名
<TransitionGroup>不再默认渲染包裹元素- 当侦听一个数组时,只有当数组被替换时,回调才会触发,如果需要在变更时触发,则必须指定
deep选项 - 没有特殊指令的标记 (
v-if/else-if/else、v-for或v-slot) 的<template>现在被视为普通元素,并将渲染为原生的<template>元素,而不是渲染其内部内容。 - 已挂载的应用不会替换它所挂载的元素
- 生命周期的
hook:事件前缀改为vue:
被移除的 API
keyCode作为v-on修饰符的支持- $on、$off 和 $once 实例方法
- 过滤器 (filter)
- 内联模板 attribute
$children实例 propertypropsData选项$destroy实例方法。用户不应该再手动管理单个 Vue 组件的生命周期。- 全局函数
set和delete以及实例方法$set和$delete。基于代理的变化检测已经不再需要它们了。