English
uni-app x的vue规范,按照vue3规范实现,但目前不支持setup组合式写法,仅支持option选项式写法。
本文暂时只包括兼容性表格,vue功能详情另见 vue3概述、Vue3 API。
uni-app x中vue的用法,有单独的示例应用:hello uvue。这里都是可以跑通的使用样例代码。
注意:
app.use
支持通过对象字面量、函数及 definePlugin
方式定义插件。app
的类型需要指定为 VueApp
。// main.uts
export function createApp() {
const app = createSSRApp(App)
// 通过对象字面量方式注册插件
app.use({
install(app) {
app.config.globalProperties.plugin1 = "plugin1"
}
})
// 通过函数方式注册插件
app.use(function (app) {
app.config.globalProperties.plugin2 = "plugin2"
})
// 通过 definePlugin + 对象字面量方式注册插件
const plugin3= definePlugin({
install(app) {
app.config.globalProperties.plugin3 = "plugin3"
}
})
app.use(plugin3)
// 通过 definePlugin + 函数方式注册插件
const plugin4= definePlugin(function (app) {
app.config.globalProperties.plugin4 = "plugin4"
})
app.use(plugin4)
// 注册插件时传递参数
// 注意:当传递插件参数时,app 的类型需要指定为 VueApp
app.use(function (app: VueApp, arg1:string, arg2:string) {
app.config.globalProperties.plugin5 = `${arg1}-${arg2}`
}, "arg1", "arg2");
}
globalProperties
是一个保留关键字,因此在项目中请勿声明名为 globalProperties
的变量。globalProperties
注册方法时,请使用直接函数表达式方式进行赋值。不支持先声明函数,再将其注册到 globalProperties
上的方式。同时,注册的函数一旦被赋值,不允许进行修改。注意:
App-android
平台,v-html
指令通过编译为 rich-text 组件实现。因此,v-html
指令的内容必须是 rich-text
支持的格式, 并且要遵循标签嵌套规则,例如, swiper
标签内只允许嵌套 swiper-item
标签。rich-text
组件不支持 class
样式,v-html
指令中同样不支持 class
样式。v-html
的标签内的内容会被忽略,v-html
指令的内容会编译为 rich-text
组件渲染为该标签的子节点。stop
和 once
。export default {}
方式定义组件。data
仅支持函数返回对象字面量方式。<script lang="uts">
export default {
data() {
return {
// 必须写这里
}
}
}
</script>
uni-app x 新增了 onLastPageBackPress 和 onExit 应用级生命周期,Android退出应用逻辑写在app.uvue里,新建项目的模板自动包含相关代码。如需修改退出逻辑,请直接修改相关代码。
scroll-view
标签。暂不支持vue插件,比如pinia、vuex、i18n、router。简单的状态管理可以参考文档全局变量和状态管理。
注意:
inject
声明从上层提供方注入的属性时,支持两种写法:字符串数组和对象。推荐使用对象写法,因为当使用数组方法时,类型会被推导为 any | null
类型。type
属性用于标记类型。如果注入的属性类型不是基础数据类型,需要通过 PropType
来标记类型。export default {
inject: {
provideString: {
type: String,
default: 'default provide string value'
},
provideObject: {
type: Object as PropType<UTSJSONObject>
},
provideMap: {
type: Object as PropType<Map<string, string>>,
default: (): Map<string, string> => {
return new Map<string, string>([['key', 'default provide map value']])
}
}
}
}
mixins
仅支持通过字面量对象方式和 defineMixin
函数方式定义。const mixin1 = defineMixin({
onLoad() {
console.log('mixin1 onLoad')
}
})
export default {
mixins: [
mixin1,
{
data() {
return {
mixin2: 'mixin2'
}
}
}
]
}
同名属性会被覆盖,同名生命周期会依次执行。
同名属性的优先级如下:
app.mixin
内嵌入的 mixin < 在 app.mixin
中声明的 mixin < 在 page.mixin
内嵌入的 mixin < 在 page.mixin
中声明的 mixin < 在 component.mixin
内嵌入的 mixin < 在 component.mixin
中声明的 mixin同名生命周期的执行顺序如下:
app.mixin
内嵌入的 mixinapp.mixin
中声明的 mixinpage.mixin
内嵌入的 mixinpage.mixin
中声明的 mixincomponent.mixin
内嵌入的 mixincomponent.mixin
中声明的 mixin