作者
novlan1
Vant2 组件库升级 Vant4
1. 开始
一些项目需要从 vant@2 升级到 vant@4,记录下差异。
2. picker
回调参数更新:
diff
onConfirm(v) {
- console.log(v.key);
+ console.log(v.selectedOptions[0].key);
}columns 默认数据结构:
ts
Array<{
text: string;
value: any;
}>如需更改,需传入 columns-field-names,如
ts
:columns-field-names="{ text: 'text', value: 'key', children: 'children' }"3. popup
是否展示由 v-model 改为 v-model:show
diff
<van popup
- v-model="show"
+ v-model:show="show"
>
</van-popup>4. toast
4.1 引入方式
函数式调用的需要手动引入样式,无法通过 auto-import 自动引入。
ts
import 'vant/lib/toast/index.css';4.2 使用方式
diff
- import { Toast } from 'vant';
+ import { showFailToast, showSuccessToast, showToast } from 'vant';
- Toast.success('操作成功');
- Toast('操作中');
- Toast.Fail('操作失败')
+ showFailToast('操作失败')
+ showToast('操作中')
+ showSuccessToast('操作成功')5. dialog
是否展示由 v-model 改为 v-model:show
diff
<van-dialog
- v-model="show"
+ v-model:show="show"
>
</van-dialog>6. action-sheet
是否展示由 v-model 改为 v-model:show
diff
<van-action-sheet
- v-model="show"
+ v-model:show="show"
>
</van-action-sheet>7. tabs
diff
<van-tabs
- v-model="curTab"
+ v-model:active="curTab"
>
</van-tabs>8. field
diff
<van-field
- :value="organizationInfo[v.prop]"
+ :model-value="organizationInfo[v.prop]"
- @input="inputHandle"
+ @update:model-value="updateHandle"
>
</van-field>9. List
diff
<van-list
- v-model="loading"
+ v-model:loading="loading"
- :error.sync="error"
+ v-model:error="error"
>
</van-list>10. Popover
diff
<van-popover
- v-model="show"
+ v-model:show="show"
>
</van-popover>11. number-keyboard
diff
<van-number-keyboard
- :value="value"
+ :model-value="value"
>
</van-number-keyboard>12. pull-refresh
diff
<van-pull-refresh
- :value="value"
+ :model-value="value"
>
</van-pull-refresh>13. 其他
13.1. .native 修饰符被废弃
Vue 3 中,.native 修饰符已被废弃,以下是关键区别和迁移建议:
- Vue 2:
.native用于监听组件根元素的原生事件(如@click.native),因为自定义组件的v-on默认只能监听子组件通过$emit触发的事件。 - Vue 3:移除了
.native,改为通过emits选项显式声明组件事件。未在emits中定义的事件会被视为原生事件,自动绑定到根元素。