{"template":{"name":"#### template","description":"> 组件类型:string \n\n 当我们想要使用内置指令而不在 DOM 中渲染元素时,\\<template> 标签可以作为占位符使用。","compatibility":"\n##### 兼容性\n| Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | 3.9 | 4.11 |\n","attribute":"##### 属性 \n| 名称 | 类型 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :-: | :- |\n| lang | string | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"3.9\",\"4.11\"]]}' /> | |\n@| 合法值 | 兼容性 | 描述 |\n@| :- | :-: | :- |\n@| html | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"3.9\",\"4.11\"]]}' /> | html |\n@| pug | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"-\",\"x\",\"x\"]]}' /> | pug |","event":"","example":"","children":"","reference":"\n##### 参见\n- [Reference](https://cn.vuejs.org/api/built-in-special-elements.html#template)"},"slot":{"name":"#### slot","description":"> 组件类型:string \n\n \\<slot> 元素作为组件模板之中的内容分发插槽。\\<slot> 元素自身将被替换。","compatibility":"\n##### 兼容性\n| Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | 3.9 | 4.11 |\n","attribute":"##### 属性 \n| 名称 | 类型 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :-: | :- |\n| name | string | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"3.9\",\"4.11\"]]}' /> | 用于命名插槽。 |","event":"","example":"","children":"","reference":"\n##### 参见\n- [Reference](https://cn.vuejs.org/api/built-in-special-elements.html#slot)"},"script":{"name":"#### script","description":"-","compatibility":"\n##### 兼容性\n| Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | 3.9 | 4.11 |\n","attribute":"##### 属性 \n| 名称 | 类型 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :-: | :- |\n| setup | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"4.0\",\"4.11\"]]}' /> | - |\n| lang | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"4.0\",\"4.11\"]]}' /> | |\n@| 合法值 | 兼容性 | 描述 |\n@| :- | :-: | :- |\n@| ts | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"-\",\"x\",\"x\"]]}' /> | typescript |\n@| uts | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"4.0\",\"4.11\"]]}' /> | uts |","event":"","example":"","children":"","reference":"\n##### 参见\n"},"style":{"name":"#### style","description":"-","compatibility":"\n##### 兼容性\n| Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | 3.9 | 4.11 |\n","attribute":"##### 属性 \n| 名称 | 类型 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :-: | :- |\n| lang | string | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"3.9\",\"4.11\"]]}' /> | |\n@| 合法值 | 兼容性 | 描述 |\n@| :- | :-: | :- |\n@| scss | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"3.9\",\"4.11\"]]}' /> | |\n@| less | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"3.9\",\"4.11\"]]}' /> | |\n@| stylus | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"3.9\",\"4.11\"]]}' /> | |\n| scoped | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| module | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |","event":"","example":"","children":"","reference":"\n##### 参见\n"},"keep-alive":{"name":"#### keep-alive","description":"> 组件类型:string \n\n \\<keep-alive> 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。和 \\<transition> 相似,\\<keep-alive> 是一个抽象组件:它自身不会渲染一个 DOM 元素,也不会出现在父组件链中。","compatibility":"\n##### 兼容性\n| Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | 4.0 | 4.11 |\n","attribute":"##### 属性 \n| 名称 | 类型 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :-: | :- |\n| include | string | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"4.0\",\"4.11\"]]}' /> | 字符串或正则表达式。只有名称匹配的组件会被缓存。 |\n| exclude | string | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"4.0\",\"4.11\"]]}' /> | 字符串或正则表达式。任何名称匹配的组件都不会被缓存。 |\n| max | string | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"4.0\",\"4.11\"]]}' /> | 最多可以缓存多少组件实例。 |","event":"","example":"","children":"","reference":"\n##### 参见\n- [Reference](https://v3.cn.vuejs.org/api/built-in-components.html#keep-alive)"},"component":{"name":"#### component","description":"> 组件类型:string \n\n 渲染一个“元组件”为动态组件。依 is 的值,来决定哪个组件被渲染。","compatibility":"\n##### 兼容性\n| Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | 3.99 | 4.11 |\n","attribute":"##### 属性 \n| 名称 | 类型 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :-: | :- |\n| is | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"3.99\",\"4.11\"]]}' /> | - |\n| inline-template | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"3.99\",\"4.11\"]]}' /> | - |","event":"","example":"","children":"","reference":"\n##### 参见\n- [Reference](https://cn.vuejs.org/api/built-in-special-elements.html#component)"},"transition":{"name":"#### transition","description":"> 组件类型:string \n\n \\<transition> 元素作为单个元素/组件的过渡效果。\\<transition> 只会把过渡效果应用到其包裹的内容上,而不会额外渲染 DOM 元素,也不会出现在检测过的组件层级中。","compatibility":"\n##### 兼容性\n| Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | x | x |\n","attribute":"##### 属性 \n| 名称 | 类型 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :-: | :- |\n| name | string | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | 用于自动生成 CSS 过渡类名。例如:name: 'fade' 将自动拓展为.fade-enter,.fade-enter-active等。默认类名为 \"v\" |\n| appear | string(true \\| false) | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | 是否在初始渲染时使用过渡。默认为 false。 |\n| css | string(true \\| false) | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | 是否使用 CSS 过渡类。默认为 true。如果设置为 false,将只通过组件事件触发注册的 JavaScript 钩子。 |\n| type | string | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | 指定过渡事件类型,侦听过渡何时结束。有效值为 \"transition\" 和 \"animation\"。默认 Vue.js 将自动检测出持续时间长的为过渡事件类型。 |\n@| 合法值 | 兼容性 | 描述 |\n@| :- | :-: | :- |\n@| transition | - | |\n@| animation | - | |\n| mode | string | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | 控制离开/进入的过渡时间序列。有效的模式有 \"out-in\" 和 \"in-out\";默认同时生效。 |\n@| 合法值 | 兼容性 | 描述 |\n@| :- | :-: | :- |\n@| out-in | - | |\n@| in-out | - | |\n| duration | string | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | 指定过渡的持续时间。默认情况下,Vue 会等待过渡所在根元素的第一个 transitionend 或 animationend 事件。 |\n| enter-class | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| leave-class | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| appear-class | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| enter-to-class | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| leave-to-class | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| appear-to-class | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| enter-active-class | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| leave-active-class | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| appear-active-class | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| @before-enter | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| @before-leave | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| @before-appear | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| @enter | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| @leave | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| @appear | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| @after-enter | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| @after-leave | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| @after-appear | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| @enter-cancelled | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| @leave-cancelled | string | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | v-show only |\n| @appear-cancelled | Any | - | - | - |","event":"","example":"","children":"","reference":"\n##### 参见\n- [Reference](https://v3.cn.vuejs.org/api/built-in-components.html#transition)"},"transition-group":{"name":"#### transition-group","description":"> 组件类型:string \n\n \\<transition-group> 元素作为多个元素/组件的过渡效果。\\<transition-group> 渲染一个真实的 DOM 元素。默认渲染 \\<span>,可以通过 tag 属性配置哪个元素应该被渲染。","compatibility":"\n##### 兼容性\n| Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | x | x |\n","attribute":"##### 属性 \n| 名称 | 类型 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :-: | :- |\n| tag | string | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | 默认为 span。 |\n| move-class | string | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | 覆盖移动过渡期间应用的 CSS 类。 |\n| name | string | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | 用于自动生成 CSS 过渡类名。例如:name: 'fade' 将自动拓展为.fade-enter,.fade-enter-active等。默认类名为 \"v\" |\n| appear | string(true \\| false) | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | 是否在初始渲染时使用过渡。默认为 false。 |\n| css | string(true \\| false) | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | 是否使用 CSS 过渡类。默认为 true。如果设置为 false,将只通过组件事件触发注册的 JavaScript 钩子。 |\n| type | string | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | 指定过渡事件类型,侦听过渡何时结束。有效值为 \"transition\" 和 \"animation\"。默认 Vue.js 将自动检测出持续时间长的为过渡事件类型。 |\n@| 合法值 | 兼容性 | 描述 |\n@| :- | :-: | :- |\n@| transition | - | |\n@| animation | - | |\n| mode | Any | - | - | - |\n| duration | string | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | 指定过渡的持续时间。默认情况下,Vue 会等待过渡所在根元素的第一个 transitionend 或 animationend 事件。 |\n| enter-class | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| leave-class | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| appear-class | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| enter-to-class | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| leave-to-class | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| appear-to-class | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| enter-active-class | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| leave-active-class | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| appear-active-class | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| @before-enter | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| @before-leave | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| @before-appear | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| @enter | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| @leave | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| @appear | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| @after-enter | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| @after-leave | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| @after-appear | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| @enter-cancelled | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |\n| @leave-cancelled | string | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | v-show only |\n| @appear-cancelled | Any | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"x\",\"x\"]]}' /> | - |","event":"","example":"","children":"","reference":"\n##### 参见\n- [Reference](https://v3.cn.vuejs.org/api/built-in-components.html#transition-group)"},"teleport":{"name":"#### teleport","description":"> 组件类型:string \n\n Teleport 提供了一种干净的方法,允许我们控制在 DOM 中哪个父节点下呈现 HTML,而不必求助于全局状态或将其拆分为两个组件。","compatibility":"\n##### 兼容性\n| Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | 4.0 | 4.11 |\n","attribute":"##### 属性 \n| 名称 | 类型 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :-: | :- |\n| to | string | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"4.0\",\"4.11\"]]}' /> | 必须是有效的查询选择器或 HTMLElement (如果在浏览器环境中使用)。指定将在其中移动 \\<teleport> 内容的目标元素 |\n| disabled | boolean | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"-\",\"4.0\",\"4.11\"]]}' /> | 此可选属性可用于禁用 \\<teleport> 的功能,这意味着其插槽内容将不会移动到任何位置,而是在您在周围父组件中指定了 \\<teleport> 的位置渲染。 |","event":"","example":"","children":"","reference":"\n##### 参见\n- [Reference](https://v3.vuejs.org/api/built-in-components.html#teleport)"},"application":{"compatibility":"| | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- | :- |\n| createApp() | 4.0 | - | √ | 4.11 |\n| createSSRApp() | 4.0 | - | √ | 4.11 |\n| app.mount() | 4.0 | - | √ | 4.11 |\n| app.unmount() | 4.0 | - | √ | 4.11 |\n| app.component() | 4.0 | - | √ | 4.11 |\n| app.directive() | - | - | - | - |\n| app.use() | 4.0 | - | 3.99 | 4.11 |\n| app.mixin() | 4.0 | - | 3.99 | 4.11 |\n| app.provide() | 4.0 | - | 3.99 | 4.11 |\n| app.runWithContext() | - | - | - | - |\n| app.version | 4.0 | - | √ | 4.11 |\n| app.config | - | - | - | - |\n| app.config.errorHandler | 4.0 | - | x | 4.11 |\n| app.config.warnHandler | - | - | - | - |\n| app.config.performance | - | - | - | - |\n| app.config.compilerOptions | - | - | - | - |\n| app.config.globalProperties | 4.0 | - | 3.99 | 4.11 |\n| app.config.optionMergeStrategies | - | - | - | - |\n| globalData | 4.0 | 4.41 | 3.9 | 4.0 |\n| onLaunch() | 4.0 | 4.41 | 3.9 | 4.0 |\n| onShow() | 4.0 | 4.41 | 3.9 | 4.0 |\n| onHide() | 4.0 | 4.41 | 3.9 | 4.0 |\n| onLastPageBackPress() | x | x | 3.9 | x |\n| onExit() | x | x | 3.9 | x |\n| onError() | 4.0 | 4.41 | 4.21 | 4.21 |","example":"","onLaunch":{"name":"### onLaunch?(options: OnLaunchOptions): void; @onlaunch","description":"生命周期回调,监听应用初始化,应用初始化完成时触发,全局只触发一次。\n","compatibility":"#### onLaunch 兼容性 \n| Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | 4.41 | 3.9 | 4.0 |\n","param":"#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- | :-: | :- |\n| options | **OnLaunchOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- | :-: | :- |\n@| path | string | 是 | - | - | 应用启动页面路径 |\n@| appScheme | string | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"x\",\"4.25\",\"4.25\"]]}' /> | 首次启动时的Scheme。返回值与App.onLaunch的回调参数一致<br/> |\n@| appLink | string | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"x\",\"x\",\"4.25\"]]}' /> | 首次启动时的appLink。返回值与App.onLaunch的回调参数一致<br/> | \n","returnValue":"","tutorial":"\n#### 参见\n - [参见uni-app相关文档](https://uniapp.dcloud.net.cn/collocation/App.html#applifecycle)"},"onShow":{"name":"### onShow?(options: OnShowOptions): void; @onshow","description":"生命周期回调 监听应用显示\n\n应用启动,或从后台进入前台显示时触发\n","compatibility":"#### onShow 兼容性 \n| Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | 4.41 | 3.9 | 4.0 |\n","param":"#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- | :-: | :- |\n| options | **OnShowOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- | :-: | :- |\n@| path | string | 是 | - | - | 应用启动页面路径 |\n@| appScheme | string | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"x\",\"4.25\",\"4.25\"]]}' /> | 本次启动时的Scheme。返回值与App.onShow的回调参数一致<br/> |\n@| appLink | string | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"微信小程序\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"x\",\"x\",\"4.25\"]]}' /> | 本次启动时的appLink。返回值与App.onShow的回调参数一致<br/> | \n","returnValue":"","tutorial":"\n#### 参见\n - [参见uni-app相关文档](https://uniapp.dcloud.net.cn/collocation/App.html#applifecycle)"},"onHide":{"name":"### onHide?(): void; @onhide","description":"生命周期回调 监听应用隐藏\n\n应用从前台进入后台时触发\n","compatibility":"#### onHide 兼容性 \n| Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | 4.41 | 3.9 | 4.0 |\n","param":"","returnValue":"","tutorial":"\n#### 参见\n - [参见uni-app相关文档](https://uniapp.dcloud.net.cn/collocation/App.html#applifecycle)"},"onError":{"name":"### onError?(error: any): void; @onerror","description":"错误监听函数\n应用发生脚本错误或 API 调用报错时触发\n4.33+ App 端支持监听异步逻辑中的错误","compatibility":"#### onError 兼容性 \n| Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | 4.41 | 4.21 | 4.21 |\n","param":"#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- | :-: | :- |\n| error | any | 是 | - | - | 错误信息 | \n","returnValue":"","tutorial":"\n#### 参见\n - [参见uni-app相关文档](https://uniapp.dcloud.net.cn/collocation/App.html#applifecycle)"},"onExit":{"name":"### onExit?(): void; @onexit","description":"监听应用退出。app-uvue-android 3.9+\n","compatibility":"#### onExit 兼容性 \n| Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| x | x | 3.9 | x |\n","param":"","returnValue":"","tutorial":""},"onLastPageBackPress":{"name":"### onLastPageBackPress?(): void; @onlastpagebackpress","description":"最后一个页面按下Android back键,常用于自定义退出。app-uvue-android 3.9+\n","compatibility":"#### onLastPageBackPress 兼容性 \n| Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| x | x | 3.9 | x |\n","param":"","returnValue":"","tutorial":"\n#### 参见\n - [参见uni-app相关文档](https://uniapp.dcloud.net.cn/collocation/App.html#applifecycle)"}},"general":{"compatibility":"| | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- | :- |\n| version | 4.0 | - | √ | 4.11 |\n| nextTick() | 4.0 | - | √ | 4.11 |\n| defineComponent() | 4.0 | - | x | x |\n| defineAsyncComponent() | - | - | - | - |\n| defineCustomElement() | - | - | - | - |","example":""},"reactivity_core":{"compatibility":"| | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- | :- |\n| ref() | 4.0 | - | √ | 4.11 |\n| computed() | 4.0 | - | √ | 4.11 |\n| reactive() | 4.0 | - | √ | 4.11 |\n| readonly() | 4.0 | - | 4.0 | 4.11 |\n| watchEffect() | 4.0 | - | 4.0 | 4.11 |\n| watchPostEffect() | 4.0 | - | 4.0 | 4.11 |\n| watchSyncEffect() | 4.0 | - | 4.0 | 4.11 |\n| watch() | 4.0 | - | 4.0 | 4.11 |","example":""},"reactivity_utilities":{"compatibility":"| | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- | :- |\n| isRef() | 4.0 | - | 4.0 | 4.11 |\n| unref() | 4.0 | - | 4.0 | 4.11 |\n| toRef() | 4.11 | - | 4.0 | 4.11 |\n| toValue() | 4.11 | - | 4.0 | 4.11 |\n| toRefs() | 4.11 | - | 4.0 | 4.11 |\n| isProxy() | 4.0 | - | 4.0 | 4.11 |\n| isReactive() | 4.0 | - | 4.0 | 4.11 |\n| isReadonly() | 4.0 | - | 4.0 | 4.11 |","example":""},"reactivity_advanced":{"compatibility":"| | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- | :- |\n| shallowRef() | 4.0 | - | 4.0 | 4.11 |\n| triggerRef() | x | - | 4.0 | 4.11 |\n| customRef() | 4.0 | - | 4.0 | 4.11 |\n| shallowReactive() | 4.0 | - | 4.0 | 4.11 |\n| shallowReadonly() | 4.0 | - | 4.0 | 4.11 |\n| toRaw() | 4.0 | - | 4.0 | 4.11 |\n| markRaw() | - | - | - | - |\n| effectScope() | 4.0 | - | 4.0 | 4.11 |\n| getCurrentScope() | 4.0 | - | 4.0 | 4.11 |\n| onScopeDispose() | 4.0 | - | 4.0 | 4.11 |","example":""},"composition_lifecycle":{"compatibility":"| | Web | 微信小程序 | Android | iOS | 描述 |\n| :- | :- | :- | :- | :- | :- |\n| onMounted() | 4.0 | - | 4.0 | 4.11 | el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。<br/>如果 root 实例挂载了一个文档内元素,当 mounted 被调用时 vm.$el 也在文档内。 |\n| onUpdated() | 4.0 | - | 4.0 | 4.11 | 由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。 |\n| onUnmounted() | 4.0 | - | 4.0 | 4.11 | 在一个组件实例被卸载之后调用。 |\n| onBeforeMount() | 4.0 | - | 4.0 | 4.11 | 在挂载开始之前被调用:相关的 render 函数首次被调用。 |\n| onBeforeUpdate() | 4.0 | - | 4.0 | 4.11 | 数据更新时调用,发生在虚拟 DOM 打补丁之前。<br/>这里适合在更新之前访问现有的 DOM,比如手动移除已添加的事件监听器。 |\n| onBeforeUnmount() | 4.0 | - | 4.0 | 4.11 | 在一个组件实例被卸载之前调用。 |\n| onErrorCaptured() | x | - | x | x | 注册一个钩子,在捕获了后代组件传递的错误时调用。 |\n| onRenderTracked() | x | - | x | x | 注册一个调试钩子,当组件渲染过程中追踪到响应式依赖时调用。 |\n| onRenderTriggered() | x | - | x | x | 注册一个调试钩子,当响应式依赖的变更触发了组件渲染时调用。 |\n| onActivated() | 4.0 | - | x | x | keep-alive 组件激活时调用。 |\n| onDeactivated() | 4.0 | - | x | x | keep-alive 组件停用时调用。 |\n| onServerPrefetch() | x | - | x | x | 注册一个异步函数,在组件实例在服务器上被渲染之前调用。<br/>如果这个钩子返回了一个 Promise,服务端渲染会在渲染该组件前等待该 Promise 完成。<br/>这个钩子仅会在服务端渲染中执行,可以用于执行一些仅存在于服务端的数据抓取过程。 |","example":""},"composition_injection":{"compatibility":"| | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- | :- |\n| provide() | 4.0 | - | 4.0 | 4.11 |\n| inject() | - | - | - | - |\n| hasInjectionContext() | 4.11 | - | 4.0 | 4.11 |","example":""},"options_state":{"compatibility":"| | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- | :- |\n| data | 4.0 | - | 3.9 | 4.11 |\n| props | 4.0 | - | 3.9 | 4.11 |\n| computed | 4.0 | - | 3.9 | 4.11 |\n| methods | 4.0 | - | 3.9 | 4.11 |\n| watch | 4.0 | - | 3.9 | 4.11 |\n| emits | 4.0 | - | 3.9 | 4.11 |\n| expose | 4.0 | - | x | x |","example":""},"options_rendering":{"compatibility":"| | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- | :- |\n| template | x | - | x | x |\n| render | 4.0 | - | 3.9 | 4.11 |\n| compilerOptions | x | - | x | x |\n| slots | 4.0 | - | 3.9 | 4.11 |","example":""},"options_lifecycle":{"compatibility":"| | Web | 微信小程序 | Android | iOS | 描述 |\n| :- | :- | :- | :- | :- | :- |\n| beforeCreate | 4.0 | - | 3.9 | 4.11 | 在组件实例初始化完成之后立即调用。<br/>在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。 |\n| created | 4.0 | - | 3.9 | 4.11 | 在组件实例处理完所有与状态相关的选项后调用。<br/>在这一步,实例已完成以下的配置:数据观测 (data observer),属性和方法的运算,watch/event 事件回调。<br/>然而,此时挂载阶段还未开始,因此 $el 属性仍不可用。 |\n| beforeMount | 4.0 | - | 3.9 | 4.11 | 在组件被挂载之前调用。<br/>相关的 render 函数首次被调用。<br/>当这个钩子被调用时,组件已经完成了其响应式状态的设置,但还没有创建 DOM 节点。<br/>它即将首次执行 DOM 渲染过程。 |\n| mounted | 4.0 | - | 3.9 | 4.11 | 在组件被挂载之后调用。<br/>el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。<br/>如果 root 实例挂载了一个文档内元素,当 mounted 被调用时 vm.$el 也在文档内。 |\n| beforeUpdate | 4.0 | - | 3.9 | 4.11 | 在组件即将因为一个响应式状态变更而更新其 DOM 树之前调用。<br/>数据更新时调用,发生在虚拟 DOM 打补丁之前。<br/>这里适合在更新之前访问现有的 DOM,比如手动移除已添加的事件监听器。 |\n| updated | 4.0 | - | 3.9 | 4.11 | 在组件因为一个响应式状态变更而更新其 DOM 树之后调用。<br/>父组件的更新钩子将在其子组件的更新钩子之后调用。<br/>这个钩子会在组件的任意 DOM 更新后被调用,这些更新可能是由不同的状态变更导致的。<br/>如果你需要在某个特定的状态更改后访问更新后的 DOM,请使用 nextTick() 作为替代。 |\n| beforeUnmount | 4.0 | - | 3.9 | 4.11 | 在一个组件实例被卸载之前调用。<br/>当这个钩子被调用时,组件实例依然还保有全部的功能。 |\n| unmounted | 4.0 | - | 3.9 | 4.11 | 在一个组件实例被卸载之后调用。<br/>可以在这个钩子中手动清理一些副作用,例如计时器、DOM 事件监听器或者与服务器的连接。 |\n| errorCaptured | 4.0 | - | x | x | 在捕获了后代组件传递的错误时调用。<br/>这个钩子带有三个实参:错误对象、触发该错误的组件实例,以及一个说明错误来源类型的信息字符串。<br/>这个钩子可以通过返回 false 来阻止错误继续向上传递。 |\n| renderTracked | 4.0 | - | x | x | 在一个响应式依赖被组件的渲染作用追踪后调用。<br/>跟踪虚拟 DOM 重新渲染时调用。钩子接收 debugger event 作为参数。<br/>此事件告诉你哪个操作跟踪了组件以及该操作的目标对象和键。 |\n| renderTriggered | 4.0 | - | x | x | 在一个响应式依赖被组件触发了重新渲染之后调用。<br/>当虚拟 DOM 重新渲染为 triggered.Similarly 为renderTracked,接收 debugger event 作为参数。<br/>此事件告诉你是什么操作触发了重新渲染,以及该操作的目标对象和键。 |\n| activated | 4.0 | - | 4.0 | 4.11 | 若组件实例是 \\<KeepAlive> 缓存树的一部分,当组件被插入到 DOM 中时调用。<br/>keep-alive 组件激活时调用。 |\n| deactivated | 4.0 | - | 4.0 | 4.11 | 若组件实例是 \\<KeepAlive> 缓存树的一部分,当组件从 DOM 中被移除时调用。<br/>keep-alive 组件停用时调用。 |\n| serverPrefetch | x | - | x | x | 当组件实例在服务器上被渲染之前要完成的异步函数。<br/>如果这个钩子返回了一个 Promise,服务端渲染会在渲染该组件前等待该 Promise 完成。 |","example":""},"options_composition":{"compatibility":"| | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- | :- |\n| provide | 4.0 | - | 3.99 | 4.11 |\n| inject | 4.0 | - | 3.99 | 4.11 |\n| mixins | 4.0 | - | 3.99 | 4.11 |\n| extends | - | - | - | - |","example":""},"options_misc":{"compatibility":"| | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- | :- |\n| name | 4.0 | - | 3.9 | 4.11 |\n| inheritAttrs | 4.0 | - | 3.9 | 4.11 |\n| components | 4.0 | - | 3.9 | 4.11 |\n| directives | - | - | - | - |","example":""},"component_instance":{"compatibility":"| | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- | :- |\n| $data | 4.0 | - | √ | 4.11 |\n| $props | 4.0 | - | √ | 4.11 |\n| $el | 4.0 | - | √ | 4.11 |\n| $options | 4.0 | - | √ | 4.11 |\n| $parent | 4.0 | - | √ | 4.11 |\n| $root | 4.0 | - | √ | 4.11 |\n| $slots | 4.0 | - | √ | 4.11 |\n| $refs | 4.0 | - | √ | 4.11 |\n| $attrs | 4.0 | - | √ | 4.11 |\n| $watch() | 4.0 | - | √ | 4.11 |\n| $emit | 4.0 | - | √ | 4.11 |\n| $forceUpdate | 4.0 | - | √ | 4.11 |\n| $nextTick | 4.0 | - | √ | 4.11 |\n| $callMethod | 4.0 | - | √ | 4.11 |","example":""},"directives":{"compatibility":"| | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- | :- |\n| v-text | 4.0 | - | x | x |\n| v-html | 4.0 | - | 3.99 | x |\n| v-show | 4.0 | - | 3.9 | 4.11 |\n| v-if | 4.0 | - | 3.9 | 4.11 |\n| v-else | 4.0 | - | 3.9 | 4.11 |\n| v-else-if | 4.0 | - | 3.9 | 4.11 |\n| v-for | 4.0 | - | 3.9 | 4.11 |\n| v-on | 4.0 | - | 3.9 | 4.11 |\n| v-bind | 4.0 | - | 3.9 | 4.11 |\n| v-model | 4.0 | - | 3.9 | 4.11 |\n| v-slot | 4.0 | - | 3.9 | 4.11 |\n| v-pre | 4.0 | - | 3.99 | 4.11 |\n| v-once | x | - | 3.99 | 4.11 |\n| v-memo | x | - | 3.99 | 4.11 |\n| v-cloak | 4.0 | - | x | x |","example":""},"special_attributes":{"compatibility":"| | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- | :- |\n| key | 4.0 | - | 3.9 | 4.11 |\n| ref | 4.0 | - | 3.9 | 4.11 |\n| is | 4.0 | - | 3.99 | 4.11 |","example":""},"render_function":{"compatibility":"| | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- | :- |\n| h() | 4.0 | - | 3.99 | 4.11 |\n| mergeProps() | 4.0 | - | 4.0 | 4.11 |\n| cloneVNode() | 4.0 | - | 4.0 | x |\n| isVNode() | 4.0 | - | √ | 4.11 |\n| resolveComponent() | 4.0 | - | √ | 4.11 |\n| resolveDirective() | - | - | - | - |\n| withDirectives() | 4.0 | - | x | 4.11 |\n| withModifiers() | 4.0 | - | √ | 4.11 |","example":""},"single_file_component_script":{"compatibility":"| | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- | :- |\n| defineProps() | 4.0 | - | 4.0 | 4.11 |\n| defineEmits() | 4.0 | - | 4.0 | 4.11 |\n| defineModel() | 4.11 | - | 4.0 | 4.11 |\n| defineExpose() | 4.0 | - | 4.0 | 4.11 |\n| defineOptions() | 4.11 | - | 4.0 | 4.11 |\n| defineSlots() | 4.0 | - | 4.0 | 4.11 |\n| useSlots() | 4.0 | - | 4.0 | 4.11 |\n| useAttrs() | 4.0 | - | 4.0 | 4.11 |","example":""},"eventModifiers":{"stop":{"name":"### stop\n","description":"单击事件将停止传递","compatibility":"**兼容性** \n | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | 3.9 | 4.11 |"},"prevent":{"name":"### prevent\n","description":"提交事件将不再重新加载页面","compatibility":"**兼容性** \n | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | x | x |"},"capture":{"name":"### capture\n","description":"添加事件监听器时,使用 `capture` 捕获模式(例如:指向内部元素的事件,在被内部元素处理前,先被外部处理)","compatibility":"**兼容性** \n | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | x | x |"},"self":{"name":"### self\n","description":"仅当 event.target 是元素本身时才会触发事件处理器(仅当 event.target 是元素本身时才会触发事件处理器)","compatibility":"**兼容性** \n | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | x | x |"},"once":{"name":"### once\n","description":"点击事件最多被触发一次","compatibility":"**兼容性** \n | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | 3.9 | x |"},"passive":{"name":"### passive\n","description":"滚动事件的默认行为 (scrolling) 将立即发生而非等待 `onScroll` 完成(滚动事件的默认行为 (scrolling) 将立即发生而非等待 `onScroll` 完成)","compatibility":"**兼容性** \n | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | x | x |"}},"keyModifiers":{"enter":{"name":"### enter\n","description":"仅在 `key` 为 `Enter` 时调用事件处理器(keycode 为 13)","compatibility":"**兼容性** \n | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | x | x |"},"tab":{"name":"### tab\n","description":"仅在 `key` 为 `Tab` 时调用事件处理器(keycode 为 9)","compatibility":"**兼容性** \n | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | x | x |"},"delete":{"name":"### delete\n","description":"仅在 `key` 为 `Delete` 或 `Backspace` 时调用事件处理器","compatibility":"**兼容性** \n | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | x | x |"},"esc":{"name":"### esc\n","description":"仅在 `key` 为 `Escape` 时调用事件处理器(keycode 为 27)","compatibility":"**兼容性** \n | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | x | x |"},"space":{"name":"### space\n","description":"仅在 `key` 为 `Space` 时调用事件处理器(keycode 为 32)","compatibility":"**兼容性** \n | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | x | x |"},"up":{"name":"### up\n","description":"仅在 `key` 为 `ArrowUp` 时调用事件处理器(keycode 为 38)","compatibility":"**兼容性** \n | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | x | x |"},"down":{"name":"### down\n","description":"仅在 `key` 为 `ArrowDown` 时调用事件处理器(keycode 为 40)","compatibility":"**兼容性** \n | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | x | x |"},"left":{"name":"### left\n","description":"仅在 `key` 为 `ArrowLeft` 时调用事件处理器(keycode 为 37)","compatibility":"**兼容性** \n | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | x | x |"},"right":{"name":"### right\n","description":"仅在 `key` 为 `ArrowRight` 时调用事件处理器(keycode 为 39)","compatibility":"**兼容性** \n | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | x | x |"}},"mouseModifiers":{"left":{"name":"### left\n","description":"单击鼠标左键时触发鼠标事件。","compatibility":"**兼容性** \n | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | x | x |"},"right":{"name":"### right\n","description":"单击鼠标右键时触发鼠标事件","compatibility":"**兼容性** \n | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | x | x |"},"middle":{"name":"### middle\n","description":"单击鼠标中键(滚轮)时触发鼠标事件","compatibility":"**兼容性** \n | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | x | x |"}},"systemModifiers":{"ctrl":{"name":"### ctrl\n","description":"当按下 \\<Control> 时触发鼠标或键盘事件。","compatibility":"**兼容性** \n | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | x | x |"},"alt":{"name":"### alt\n","description":"当按下 \\<Alt> 时触发鼠标或键盘事件。","compatibility":"**兼容性** \n | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | x | x |"},"shift":{"name":"### shift\n","description":"当按下 \\<Shift> 时触发鼠标或键盘事件。","compatibility":"**兼容性** \n | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | x | x |"},"meta":{"name":"### meta\n","description":"当按下 \\<Meta> 时触发鼠标或键盘事件。","compatibility":"**兼容性** \n | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | x | x |"},"exact":{"name":"### exact\n","description":"`.exact` 修饰符允许控制触发事件所需的系统修饰符的精确组合。","compatibility":"**兼容性** \n | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | x | x |"}},"propsModifiers":{"sync":{"name":"### sync\n","description":"","compatibility":""}},"vModelModifiers":{"lazy":{"name":"### lazy\n","description":"默认情况下,`v-model` 会在每次 `input` 事件后更新数据 (IME 拼字阶段的状态例外)。你可以添加 `lazy` 修饰符来改为在每次 `change` 事件后更新数据","compatibility":"**兼容性** \n | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| x | - | 3.9 | x |"},"number":{"name":"### number\n","description":"如果你想让用户输入自动转换为数字,你可以在 `v-model` 后添加 `.number` 修饰符来管理输入","compatibility":"**兼容性** \n | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | 3.9 | x |"},"trim":{"name":"### trim\n","description":"如果你想要默认自动去除用户输入内容中两端的空格,你可以在 `v-model` 后添加 `.trim` 修饰符","compatibility":"**兼容性** \n | Web | 微信小程序 | Android | iOS |\n| :- | :- | :- | :- |\n| 4.0 | - | 3.9 | x |"}},"E_App":{"example":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/App.uvue","code":"```vue\n<script lang=\"uts\">\r\n import { state, setLifeCycleNum, setAppLaunchPath, setAppShowPath } from './store/index.uts'\r\n\r\n let firstBackTime = 0\r\n export default {\r\n // #ifndef APP-ANDROID\r\n mixins: [\r\n {\r\n data() {\r\n return {\r\n appMixinDataMsg: 'App.uvue mixin data msg'\r\n }\r\n }\r\n }],\r\n // #endif\r\n onLaunch: function (options) {\r\n console.log(options)\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum + 1000)\r\n setAppLaunchPath(options.path)\r\n console.log('App Launch')\r\n // #ifdef UNI-APP-X && APP-ANDROID\r\n const performance = uni.getPerformance()\r\n const observer : PerformanceObserver = performance.createObserver((entryList : PerformanceObserverEntryList) => {\r\n console.log('observer:entryList.getEntries()')\r\n console.log(entryList.getEntries())\r\n })\r\n observer.observe({\r\n entryTypes: ['render', 'navigation'],\r\n } as PerformanceObserverOptions)\r\n // #endif\r\n },\r\n onShow: function (options) {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum + 100)\r\n setAppShowPath(options.path)\r\n if(this.globalPropertiesStr === 'default string'){\r\n setLifeCycleNum(state.lifeCycleNum + 10)\r\n }\r\n console.log('App Show')\r\n },\r\n onHide: function () {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum - 100)\r\n console.log('App Hide')\r\n },\r\n // #ifdef APP-ANDROID\r\n onLastPageBackPress: function () {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum - 1000)\r\n console.log('App LastPageBackPress')\r\n if (firstBackTime == 0) {\r\n uni.showToast({\r\n title: '再按一次退出应用',\r\n position: 'bottom',\r\n })\r\n firstBackTime = Date.now()\r\n setTimeout(() => {\r\n firstBackTime = 0\r\n }, 2000)\r\n } else if (Date.now() - firstBackTime < 2000) {\r\n firstBackTime = Date.now()\r\n uni.exit()\r\n }\r\n },\r\n onExit() {\r\n console.log('App Exit')\r\n },\r\n // #endif\r\n onError: function(error: any) {\r\n console.log('App Error', error)\r\n setLifeCycleNum(state.lifeCycleNum + 100)\r\n },\r\n methods: {\r\n checkLaunchPath() : boolean {\r\n const HOME_PATH = 'pages/index/index'\r\n if (state.appLaunchPath != HOME_PATH) {\r\n return false\r\n }\r\n if (state.appShowPath != HOME_PATH) {\r\n return false\r\n }\r\n return true\r\n },\r\n // #ifndef APP-ANDROID\r\n checkAppMixin() : boolean {\r\n if(this.globalMixinDataMsg1 != '通过 defineMixin 定义全局 mixin data') {\r\n return false\r\n }\r\n if(this.appMixinDataMsg != 'App.uvue mixin data msg') {\r\n return false\r\n }\r\n return true\r\n }\r\n // #endif\r\n }\r\n }\r\n</script>\r\n\r\n<style>\r\n @import './styles/common.css';\r\n\r\n .list-item-text {\r\n line-height: 36px;\r\n }\r\n\r\n .split-title {\r\n margin: 20px 0 5px;\r\n padding: 5px 0;\r\n border-bottom: 1px solid #dfdfdf;\r\n }\r\n\r\n .btn-view {\r\n margin: 10px 0;\r\n padding: 10px;\r\n border: 1px solid #dfdfdf;\r\n border-radius: 3px;\r\n }\r\n</style>\r\n<style>\r\n.text-red{\r\n color: red;\r\n}\r\n</style>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#"}},"E_type":{"type":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/type/type.uvue","code":"```vue\n<template>\r\n <!-- #ifdef APP -->\r\n <scroll-view style=\"flex: 1\">\r\n <!-- #endif -->\r\n <!-- #ifdef APP -->\r\n </scroll-view>\r\n <!-- #endif -->\r\n</template>\r\n\r\n<script lang='uts'>\r\n // 仅引用类型,模板中不使用,也要保证不报错\r\n let testType: TestTypeComponentPublicInstance | null = null;\r\n export default {\r\n data() {\r\n return {}\r\n },\r\n onLoad() {\r\n console.log('testType', testType)\r\n },\r\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/type/type"}},"E_app-instance":{"component_component":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/app-instance/component/component.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <CompForAppComponent class=\"component-for-app-component\" />\r\n </view>\r\n</template>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/app-instance/component/component"},"globalProperties_globalProperties-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/app-instance/globalProperties/globalProperties-composition.uvue","code":"```vue\n<template>\r\n <!-- #ifdef APP -->\r\n <scroll-view style=\"flex: 1; padding-bottom: 20px\">\r\n <!-- #endif -->\r\n <view class=\"uni-padding-wrap\">\r\n <text class=\"mt-10\"\r\n >globalProperties string: {{ globalPropertiesStr }}</text\r\n >\r\n <text class=\"mt-10\"\r\n >globalProperties number: {{ globalPropertiesNum }}</text\r\n >\r\n <text class=\"mt-10\"\r\n >globalProperties boolean: {{ globalPropertiesBool }}</text\r\n >\r\n <text class=\"mt-10\"\r\n >globalProperties object: {{ globalPropertiesObj }}</text\r\n >\r\n <text class=\"mt-10\"\r\n >globalProperties null: {{ globalPropertiesNull }}</text\r\n >\r\n <text class=\"mt-10\"\r\n >globalProperties array: {{ globalPropertiesArr }}</text\r\n >\r\n <text class=\"mt-10\"\r\n >globalProperties set: {{ globalPropertiesSet }}</text\r\n >\r\n <text class=\"mt-10\"\r\n >globalProperties map: {{ globalPropertiesMap }}</text\r\n >\r\n <text class=\"mt-10\"\r\n >globalProperties reactiveObj.str:\r\n {{ globalPropertiesReactiveObj['str'] }}</text\r\n >\r\n <text class=\"mt-10\"\r\n >globalProperties reactiveObj.num:\r\n {{ globalPropertiesReactiveObj['num'] }}</text\r\n >\r\n <text class=\"mt-10\"\r\n >globalProperties reactiveObj.boolean:\r\n {{ globalPropertiesReactiveObj['bool'] }}</text\r\n >\r\n <text class=\"mt-10\"\r\n >globalProperties fun 返回值: {{ globalPropertiesFn() }}</text\r\n >\r\n <button @click=\"updateGlobalProperties\" class=\"mt-10\">\r\n update globalProperties\r\n </button>\r\n </view>\r\n <!-- #ifdef APP -->\r\n </scroll-view>\r\n <!-- #endif -->\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\ntype MyGlobalProperties = {\r\n\tstr : string;\r\n\tnum : number;\r\n\tbool : boolean;\r\n\tobj : UTSJSONObject;\r\n\tnull : string | null;\r\n\tarr : number[];\r\n\tset : string[];\r\n\tmap : UTSJSONObject;\r\n\treactiveObj : UTSJSONObject;\r\n globalPropertiesFnRes: string;\r\n}\r\n\r\nconst myGlobalProperties = reactive<MyGlobalProperties>({\r\n\tstr: '',\r\n\tnum: 0,\r\n\tbool: false,\r\n\tobj: {},\r\n\tnull: null,\r\n\tarr: [] as number[],\r\n\tset: [] as string[],\r\n\tmap: {},\r\n\treactiveObj: {\r\n\t\tstr: '',\r\n\t\tnum: 0,\r\n\t\tbool: false,\r\n\t},\r\n globalPropertiesFnRes: '',\r\n} as MyGlobalProperties)\r\n\r\nconst instance = getCurrentInstance()!.proxy!\r\nconst getGlobalProperties = () => {\r\n\tmyGlobalProperties.str = instance.globalPropertiesStr\r\n\tmyGlobalProperties.num = instance.globalPropertiesNum\r\n\tmyGlobalProperties.bool = instance.globalPropertiesBool\r\n\tmyGlobalProperties.obj = instance.globalPropertiesObj\r\n\tmyGlobalProperties.null = instance.globalPropertiesNull\r\n\tmyGlobalProperties.arr = instance.globalPropertiesArr\r\n\tmyGlobalProperties.set = []\r\n\tinstance.globalPropertiesSet.forEach(item => {\r\n\t\tmyGlobalProperties.set.push(item)\r\n\t})\r\n\tmyGlobalProperties.map = {}\r\n\tinstance.globalPropertiesMap.forEach((value: number, key: string) => {\r\n\t\tmyGlobalProperties.map[key] = value\r\n\t})\r\n\tmyGlobalProperties.reactiveObj = instance.globalPropertiesReactiveObj\r\n\tmyGlobalProperties.globalPropertiesFnRes = instance.globalPropertiesFn()\r\n}\r\n\r\nsetTimeout(() => {\r\n // 等待 globalProperties-options resetGlobalProperties 完成\r\n\tgetGlobalProperties()\r\n}, 1000)\r\n\r\nconst updateGlobalProperties = () => {\r\n\tinstance.globalPropertiesStr = 'new string'\r\n\tinstance.globalPropertiesNum = 100\r\n\tinstance.globalPropertiesBool = true\r\n\tinstance.globalPropertiesObj = {\r\n\t\tstr: 'new globalProperties obj string',\r\n\t\tnum: 100,\r\n\t\tbool: true,\r\n\t}\r\n\tinstance.globalPropertiesNull = 'not null'\r\n\tinstance.globalPropertiesArr = [1, 2, 3]\r\n\tinstance.globalPropertiesSet = new Set(['a', 'b', 'c'])\r\n\tinstance.globalPropertiesMap = new Map([['a', 1], ['b', 2], ['c', 3]])\r\n\tinstance.globalPropertiesReactiveObj['str'] = 'new reactive string'\r\n\tinstance.globalPropertiesReactiveObj['num'] = 200\r\n\tinstance.globalPropertiesReactiveObj['bool'] = true\r\n\tgetGlobalProperties()\r\n}\r\n\r\ndefineExpose({\r\n myGlobalProperties,\r\n updateGlobalProperties\r\n})\r\n</script>\r\n\r\n<style>\r\n.uni-padding-wrap {\r\n padding: 10px;\r\n}\r\n</style>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/app-instance/globalProperties/globalProperties-composition"},"globalProperties_globalProperties-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/app-instance/globalProperties/globalProperties-options.uvue","code":"```vue\n<template>\r\n <!-- #ifdef APP -->\r\n <scroll-view style=\"flex: 1; padding-bottom: 20px\">\r\n <!-- #endif -->\r\n <view class=\"uni-padding-wrap\">\r\n <text class=\"mt-10\"\r\n >globalProperties string: {{ globalPropertiesStr }}</text\r\n >\r\n <text class=\"mt-10\"\r\n >globalProperties number: {{ globalPropertiesNum }}</text\r\n >\r\n <text class=\"mt-10\"\r\n >globalProperties boolean: {{ globalPropertiesBool }}</text\r\n >\r\n <text class=\"mt-10\"\r\n >globalProperties object: {{ globalPropertiesObj }}</text\r\n >\r\n <text class=\"mt-10\"\r\n >globalProperties null: {{ globalPropertiesNull }}</text\r\n >\r\n <text class=\"mt-10\"\r\n >globalProperties array: {{ globalPropertiesArr }}</text\r\n >\r\n <text class=\"mt-10\"\r\n >globalProperties set: {{ globalPropertiesSet }}</text\r\n >\r\n <text class=\"mt-10\"\r\n >globalProperties map: {{ globalPropertiesMap }}</text\r\n >\r\n <text class=\"mt-10\"\r\n >globalProperties reactiveObj.str:\r\n {{ globalPropertiesReactiveObj['str'] }}</text\r\n >\r\n <text class=\"mt-10\"\r\n >globalProperties reactiveObj.num:\r\n {{ globalPropertiesReactiveObj['num'] }}</text\r\n >\r\n <text class=\"mt-10\"\r\n >globalProperties reactiveObj.boolean:\r\n {{ globalPropertiesReactiveObj['bool'] }}</text\r\n >\r\n <text class=\"mt-10\"\r\n >globalProperties fun 返回值: {{ globalPropertiesFn() }}</text\r\n >\r\n <button @click=\"updateGlobalProperties\" class=\"mt-10\">\r\n update globalProperties\r\n </button>\r\n </view>\r\n <!-- #ifdef APP -->\r\n </scroll-view>\r\n <!-- #endif -->\r\n</template>\r\n\r\n<script lang=\"uts\">\r\ntype MyGlobalProperties = {\r\n\tstr : string;\r\n\tnum : number;\r\n\tbool : boolean;\r\n\tobj : UTSJSONObject;\r\n\tnull : string | null;\r\n\tarr : number[];\r\n\tset : string[];\r\n\tmap : UTSJSONObject;\r\n\treactiveObj : UTSJSONObject;\r\n\tglobalPropertiesFnRes: string\r\n}\r\nexport default {\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tmyGlobalProperties: {\r\n\t\t\t\tstr: '',\r\n\t\t\t\tnum: 0,\r\n\t\t\t\tbool: false,\r\n\t\t\t\tobj: {},\r\n\t\t\t\tnull: null,\r\n\t\t\t\tarr: [],\r\n\t\t\t\tset: [],\r\n\t\t\t\tmap: {},\r\n\t\t\t\treactiveObj: {\r\n\t\t\t\t\tstr: '',\r\n\t\t\t\t\tnum: 0,\r\n\t\t\t\t\tbool: false,\r\n\t\t\t\t} as UTSJSONObject,\r\n\t\t\t\tglobalPropertiesFnRes: '',\r\n\t\t\t} as MyGlobalProperties,\r\n\t\t}\r\n\t},\r\n\tonLoad() {\r\n\t\tthis.getGlobalProperties()\r\n\t},\r\n\tonUnload(){\r\n\t\tthis.resetGlobalProperties()\r\n\t},\r\n\tmethods: {\r\n\t\tgetGlobalProperties() {\r\n\t\t\tthis.myGlobalProperties.str = this.globalPropertiesStr\r\n\t\t\tthis.myGlobalProperties.num = this.globalPropertiesNum\r\n\t\t\tthis.myGlobalProperties.bool = this.globalPropertiesBool\r\n\t\t\tthis.myGlobalProperties.obj = this.globalPropertiesObj\r\n\t\t\tthis.myGlobalProperties.null = this.globalPropertiesNull\r\n\t\t\tthis.myGlobalProperties.arr = this.globalPropertiesArr\r\n\t\t\tthis.myGlobalProperties.set = []\r\n\t\t\tthis.globalPropertiesSet.forEach(item => {\r\n\t\t\t\tthis.myGlobalProperties.set.push(item)\r\n\t\t\t})\r\n\t\t\tthis.myGlobalProperties.map = {}\r\n\t\t\tthis.globalPropertiesMap.forEach((value: number, key: string) => {\r\n\t\t\t\tthis.myGlobalProperties.map[key] = value\r\n\t\t\t})\r\n\t\t\tthis.myGlobalProperties.reactiveObj = this.globalPropertiesReactiveObj\r\n\t\t\tthis.myGlobalProperties.globalPropertiesFnRes = this.globalPropertiesFn()\r\n\t\t},\r\n\t\tresetGlobalProperties() {\r\n\t\t\tthis.globalPropertiesStr = 'default string'\r\n\t\t\tthis.globalPropertiesNum = 0\r\n\t\t\tthis.globalPropertiesBool = false\r\n\t\t\tthis.globalPropertiesObj = {\r\n\t\t\t\tstr: 'default globalProperties obj string',\r\n\t\t\t\tnum: 0,\r\n\t\t\t\tbool: false,\r\n\t\t\t}\r\n\t\t\tthis.globalPropertiesNull = null\r\n\t\t\tthis.globalPropertiesArr = []\r\n\t\t\tthis.globalPropertiesSet = new Set()\r\n\t\t\tthis.globalPropertiesMap = new Map()\r\n\t\t\tthis.globalPropertiesReactiveObj['str'] = 'default reactive string'\r\n\t\t\tthis.globalPropertiesReactiveObj['num'] = 0\r\n\t\t\tthis.globalPropertiesReactiveObj['bool'] = false\r\n\t\t},\r\n\t\tupdateGlobalProperties() {\r\n\t\t\tthis.globalPropertiesStr = 'new string'\r\n\t\t\tthis.globalPropertiesNum = 100\r\n\t\t\tthis.globalPropertiesBool = true\r\n\t\t\tthis.globalPropertiesObj = {\r\n\t\t\t\tstr: 'new globalProperties obj string',\r\n\t\t\t\tnum: 100,\r\n\t\t\t\tbool: true,\r\n\t\t\t}\r\n\t\t\tthis.globalPropertiesNull = 'not null'\r\n\t\t\tthis.globalPropertiesArr = [1, 2, 3]\r\n\t\t\tthis.globalPropertiesSet = new Set(['a', 'b', 'c'])\r\n\t\t\tthis.globalPropertiesMap = new Map([['a', 1], ['b', 2], ['c', 3]])\r\n\t\t\tthis.globalPropertiesReactiveObj['str'] = 'new reactive string'\r\n\t\t\tthis.globalPropertiesReactiveObj['num'] = 200\r\n\t\t\tthis.globalPropertiesReactiveObj['bool'] = true\r\n\t\t\tthis.getGlobalProperties()\r\n\t\t}\r\n\t},\r\n}\r\n</script>\r\n\r\n<style>\r\n.uni-padding-wrap {\r\n padding: 10px;\r\n}\r\n</style>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/app-instance/globalProperties/globalProperties-options"},"use_use-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/app-instance/use/use-composition.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <CompForAppUse class=\"component-for-app-use\" />\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\nimport CompForAppUse from '@/components/CompForAppUse.uvue'\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/app-instance/use/use-composition"},"use_use-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/app-instance/use/use-options.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <CompForAppUse class=\"component-for-app-use\" />\r\n </view>\r\n</template>\r\n\r\n<script lang=\"uts\">\r\nimport CompForAppUse from '@/components/CompForAppUse.uvue'\r\n\r\nexport default {\r\n components: {\r\n CompForAppUse\r\n }\r\n}\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/app-instance/use/use-options"}},"E_component-instance":{"attrs_attrs-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/attrs/attrs-composition.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <child\n class=\"child-class\"\n str=\"str from parent\"\n @childClick=\"() => {}\" />\n </view>\n</template>\n\n<script setup lang=\"uts\">\nimport child from './child-composition.uvue'\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/attrs/attrs-composition"},"attrs_attrs-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/attrs/attrs-options.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <child\n class=\"child-class\"\n str=\"str from parent\"\n @childClick=\"() => {}\" />\n </view>\n</template>\n\n<script lang=\"uts\">\nimport child from './child-options.uvue'\n\nexport default {\n components: {\n child,\n },\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/attrs/attrs-options"},"attrs_child-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/attrs/child-composition.uvue","code":"```vue\n<template>\n <view>\n <view class=\"mb-10 flex flex-row justify-between\">\n <text>hasPropsAttr</text>\n <text id=\"has-props-attr\">{{ hasPropsAttr }}</text>\n </view>\n <view class=\"mb-10 flex flex-row justify-between\">\n <text>hasEmitsAttr</text>\n <text id=\"has-emits-attr\">{{ hasEmitsAttr }}</text>\n </view>\n <view class=\"mb-10 flex flex-row justify-between\">\n <text>hasClassAttr</text>\n <text id=\"has-class-attr\">{{ hasClassAttr }}</text>\n </view>\n </view>\n</template>\n\n<script setup lang=\"uts\">\ndefineEmits(['childClick'])\n\ndefineProps({\n str: {\n type: String,\n required: true\n }\n})\n\nconst attrs = useAttrs()\n\nconst hasPropsAttr = computed(():boolean => {\n return attrs['val'] != null\n})\n\nconst hasEmitsAttr = computed(():boolean => {\n return attrs['childClick'] != null\n})\n\nconst hasClassAttr = computed(():boolean => {\n return attrs['class'] != null\n})\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/attrs/child-composition"},"attrs_child-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/attrs/child-options.uvue","code":"```vue\n<template>\n <view>\n <view class=\"mb-10 flex flex-row justify-between\">\n <text>hasPropsAttr</text>\n <text id=\"has-props-attr\" class=\"has-props-attr\">{{ hasPropsAttr }}</text>\n </view>\n <view class=\"mb-10 flex flex-row justify-between\">\n <text>hasEmitsAttr</text>\n <text id=\"has-emits-attr\">{{ hasEmitsAttr }}</text>\n </view>\n <view class=\"mb-10 flex flex-row justify-between\">\n <text>hasClassAttr</text>\n <text id=\"has-class-attr\" class=\"has-class-attr\">{{ hasClassAttr }}</text>\n </view>\n </view>\n</template>\n\n<script lang=\"uts\">\nexport default {\n emits: ['childClick'],\n props: {\n str: {\n type: String,\n required: true\n }\n },\n computed: {\n hasPropsAttr(): boolean {\n return this.$attrs['val'] != null\n },\n hasEmitsAttr(): boolean {\n return this.$attrs['childClick'] != null\n },\n hasClassAttr(): boolean {\n return this.$attrs['class'] != null\n }\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/attrs/child-options"},"circular-reference_ChildA-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/circular-reference/ChildA-composition.uvue","code":"```vue\n<template>\r\n <view class=\"child-a\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>child A limit:</text>\r\n <text>{{limit}}</text>\r\n </view>\r\n <child-b v-if=\"limit>1\" :limit=\"limit-1\" />\r\n </view>\r\n</template>\r\n\r\n<script setup lang='uts'>\r\n import ChildB from './childB-composition.uvue'\r\n\r\n defineProps({\r\n limit: {\r\n type: Number,\r\n default: 0\r\n }\r\n })\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/circular-reference/ChildA-composition"},"circular-reference_ChildA-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/circular-reference/ChildA-options.uvue","code":"```vue\n<template>\r\n <view class=\"child-a\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>child A limit:</text>\r\n <text>{{limit}}</text>\r\n </view>\r\n <child-b v-if=\"limit>1\" :limit=\"limit-1\" />\r\n </view>\r\n</template>\r\n\r\n<script lang='uts'>\r\n import ChildB from './childB-options.uvue'\r\n\r\n export default {\r\n components: {\r\n ChildB\r\n },\r\n props: {\r\n limit: {\r\n type: Number,\r\n default: 0\r\n }\r\n }\r\n }\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/circular-reference/ChildA-options"},"circular-reference_ChildB-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/circular-reference/ChildB-composition.uvue","code":"```vue\n<template>\n <view class=\"child-b\">\n <view class=\"flex justify-between flex-row mb-10\">\n <text>child B limit:</text>\n <text>{{ limit }}</text>\n </view>\n <child-a v-if=\"limit > 1\" :limit=\"limit - 1\" />\n </view>\n</template>\n\n<script setup lang=\"uts\">\n import ChildA from './childA-composition.uvue'\n\n defineProps({\n limit: {\n type: Number,\n default: 0\n }\n })\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/circular-reference/ChildB-composition"},"circular-reference_ChildB-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/circular-reference/ChildB-options.uvue","code":"```vue\n<template>\n <view class=\"child-b\">\n <view class=\"flex justify-between flex-row mb-10\">\n <text>child B limit:</text>\n <text>{{limit}}</text>\n </view>\n <child-a v-if=\"limit>1\" :limit=\"limit-1\" />\n </view>\n</template>\n\n<script lang='uts'>\n import ChildA from './childA-options.uvue'\n\n export default {\n components: {\n ChildA\n },\n props: {\n limit: {\n type: Number,\n default: 0\n }\n }\n }\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/circular-reference/ChildB-options"},"circular-reference_ChildC-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/circular-reference/ChildC-composition.uvue","code":"```vue\n<template>\r\n <view class=\"child-c\">\n <view class=\"flex justify-between flex-row mb-10\">\n <text>child C limit:</text>\n <text>{{limit}}</text>\n </view>\n <child-c-composition v-if=\"limit>1\" :limit=\"limit-1\" />\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\n defineOptions({\r\n name: \"ChildCComposition\"\r\n })\r\n\r\n defineProps({\r\n limit: {\r\n type: Number,\r\n default: 0\r\n }\r\n })\r\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/circular-reference/ChildC-composition"},"circular-reference_ChildC-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/circular-reference/ChildC-options.uvue","code":"```vue\n<template>\r\n <view class=\"child-c\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>child C limit:</text>\r\n <text>{{limit}}</text>\r\n </view>\r\n <child-c-options v-if=\"limit>1\" :limit=\"limit-1\" />\r\n </view>\r\n</template>\r\n\r\n<script lang='uts'>\r\n export default {\r\n name: \"ChildCOptions\",\r\n props: {\r\n limit: {\r\n type: Number,\r\n default: 0\r\n }\r\n }\r\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/circular-reference/ChildC-options"},"circular-reference_circular-reference-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/circular-reference/circular-reference-composition.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <!-- #ifdef APP-ANDROID -->\r\n <!-- TODO: ios & web 不支持 a b 互相引用 -->\r\n <child-a :limit=\"5\" />\r\n <!-- #endif -->\r\n <child-c :limit=\"5\" />\r\n </view>\r\n</template>\r\n\r\n<script setup lang='uts'>\r\n // #ifdef APP-ANDROID\r\n import ChildA from './childA-composition.uvue'\r\n // #endif\r\n import ChildC from './ChildC-composition.uvue'\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/circular-reference/circular-reference-composition"},"circular-reference_circular-reference-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/circular-reference/circular-reference-options.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <!-- #ifdef APP-ANDROID -->\r\n <!-- TODO: ios & web 不支持 a b 互相引用 -->\r\n <child-a :limit=\"5\" />\r\n <!-- #endif -->\r\n <child-c :limit=\"5\" />\r\n </view>\r\n</template>\r\n\r\n<script lang='uts'>\r\n // #ifdef APP-ANDROID\r\n import ChildA from './childA-options.uvue'\r\n // #endif\r\n import childC from './childC-options.uvue'\r\n\r\n export default {\r\n components: {\r\n // #ifdef APP-ANDROID\r\n ChildA,\r\n // #endif\r\n childC\r\n }\r\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/circular-reference/circular-reference-options"},"data_data-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/data/data-composition.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <view class=\"flex justify-between flex-row mb-10\">\n <text>str: </text>\n <text id=\"str\">{{ str }}</text>\n </view>\n <view class=\"flex justify-between flex-row mb-10\">\n <text>num: </text>\n <text id=\"num\">{{ num }}</text>\n </view>\n <view class=\"flex justify-between flex-row mb-10\">\n <text>arr: </text>\n <text id=\"arr\">{{ arr.join(',') }}</text>\n </view>\n <view class=\"flex justify-between flex-row mb-10\">\n <text>obj.str: </text>\n <text id=\"obj-str\">{{ obj.str }}</text>\n </view>\n <view class=\"flex justify-between flex-row mb-10\">\n <text>obj.num: </text>\n <text id=\"obj-num\">{{ obj.num }}</text>\n </view>\n <view class=\"flex justify-between flex-row mb-10\">\n <text>obj.arr: </text>\n <text id=\"obj-arr\">{{ obj.arr.join(',') }}</text>\n </view>\n <view ref='htmlRef' id=\"idRef\" class=\"flex justify-between flex-row mb-10\">\n <text>data 存储 element不需要被包装</text>\n <text id=\"isSameRefText\">{{ refElementIsSame }}</text>\n </view>\n <button @click=\"updateData\">update data</button>\n </view>\n</template>\n\n<script setup lang=\"uts\">\n type Obj = {\n str : string,\n num : number,\n arr : number[]\n }\n\n const instance = getCurrentInstance()!.proxy!\n\n const str = ref('default str')\n const num = ref(0)\n // 可通过泛型指定类型\n const arr = ref<number[]>([1, 2, 3])\n const obj = ref<Obj>({\n str: 'default obj.str',\n num: 10,\n arr: [4, 5, 6]\n })\n\n const refElement = ref<UniElement | null>(null)\n const refElementIsSame = ref(false)\n\n const refTest = () => {\n const queryElementById1 = uni.getElementById('idRef')\n const queryElementById2 = uni.getElementById('idRef')\n const htmlRefElement = instance.$refs['htmlRef'] as UniElement | null;\n refElement.value = htmlRefElement\n if (queryElementById1 === queryElementById2\n && queryElementById1 === htmlRefElement\n && queryElementById1 === refElement.value\n ) {\n refElementIsSame.value = true\n }\n }\n const updateData = () => {\n str.value = 'new str'\n num.value = 1\n arr.value = [4, 5, 6]\n\n obj.value.str = 'new obj.str'\n obj.value.num = 100\n obj.value.arr = [7, 8, 9]\n\n refTest()\n }\n\n defineExpose({\n updateData\n })\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/data/data-composition"},"data_data-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/data/data-options.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <view class=\"flex justify-between flex-row mb-10\">\n <text>str: </text>\n <text id=\"str\">{{ str }}</text>\n </view>\n <view class=\"flex justify-between flex-row mb-10\">\n <text>num: </text>\n <text id=\"num\">{{ num }}</text>\n </view>\n <view class=\"flex justify-between flex-row mb-10\">\n <text>arr: </text>\n <text id=\"arr\">{{ arr.join(',') }}</text>\n </view>\n <view class=\"flex justify-between flex-row mb-10\">\n <text>obj.str: </text>\n <text id=\"obj-str\">{{ obj.str }}</text>\n </view>\n <view class=\"flex justify-between flex-row mb-10\">\n <text>obj.num: </text>\n <text id=\"obj-num\">{{ obj.num }}</text>\n </view>\n <view class=\"flex justify-between flex-row mb-10\">\n <text>obj.arr: </text>\n <text id=\"obj-arr\">{{ obj.arr.join(',') }}</text>\n </view>\n <view ref='htmlRef' id=\"idRef\" class=\"flex justify-between flex-row mb-10\">\n <text>data 存储 element不需要被包装</text>\n <text id=\"isSameRefText\">{{ refElementIsSame }}</text>\n </view>\n\n <button @click=\"updateData\">update data</button>\n </view>\n</template>\n\n<script lang=\"uts\">\n type Obj = {\n str : string,\n num : number,\n arr : number[]\n }\n export default {\n data() {\n return {\n str: 'default str',\n num: 0,\n arr: [1, 2, 3],\n // 特殊类型需要通过 as 指定类型\n obj: {\n str: 'default obj.str',\n num: 10,\n arr: [4, 5, 6]\n } as Obj,\n refElement: null as UniElement | null,\n refElementIsSame: false\n }\n },\n methods: {\n refTest() {\n const queryElementById1 = uni.getElementById('idRef')\n const queryElementById2 = uni.getElementById('idRef')\n const htmlRefElement = this.$refs['htmlRef'] as UniElement;\n this.refElement = htmlRefElement\n if (queryElementById1 === queryElementById2\n && queryElementById1 === htmlRefElement\n && queryElementById1 === this.refElement) {\n this.refElementIsSame = true\n }\n },\n updateData() {\n this.str = 'new str'\n this.num = 1\n this.arr = [4, 5, 6]\n\n this.obj.str = 'new obj.str'\n this.obj.num = 100\n this.obj.arr = [7, 8, 9]\n\n this.refTest()\n\n\n },\n },\n }\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/data/data-options"},"define-expose_define-expose":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/define-expose/define-expose.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <define-expose-foo ref=\"fooRef\" />\n <view class=\"flex justify-between flex-row mt-10\">\n <text>str from component Foo: </text>\n <text id=\"foo-str\">{{ fooStr }}</text>\n </view>\n <view class=\"flex justify-between flex-row mt-10\">\n <text>num from component Foo: </text>\n <text id=\"foo-num\">{{ fooNum }}</text>\n </view>\n <button class=\"increment-btn mt-10\" @click=\"increment\">\n trigger Foo increment\n </button>\n </view>\n</template>\n\n<script setup lang=\"uts\">\nconst fooRef = ref<DefineExposeFooComponentPublicInstance | null>(null)\nconst fooStr = ref('')\nconst fooNum = ref<number>(0)\n\nonMounted(() => {\n fooStr.value = fooRef.value!.str\n fooNum.value = fooRef.value!.num\n})\n\nconst increment = () => {\n fooRef.value!.increment()\n fooNum.value = fooRef.value!.num\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/define-expose/define-expose"},"el_el-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/el/el-composition.uvue","code":"```vue\n\n<template>\n <view class=\"page flex justify-between flex-row\">\n <text class=\"child\">root node tagName:</text>\n <text class=\"tag-name\">{{ el }}</text>\n </view>\n</template>\n\n<script setup lang='uts'>\nconst el = ref('')\nconst instance = getCurrentInstance()!.proxy!\nonMounted(() => {el.value = instance.$el?.nodeName ?? ''})\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/el/el-composition"},"el_el-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/el/el-options.uvue","code":"```vue\n<template>\n <view class=\"page flex justify-between flex-row\">\n <text class=\"child\">root node tagName:</text>\n <text class=\"tag-name\">{{ el }}</text>\n </view>\n</template>\n\n<script lang='uts'>\nexport default {\n data() {\n return {\n el: '',\n }\n },\n mounted() {\n this.el = this.$el?.nodeName ?? ''\n },\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/el/el-options"},"emit-function_child-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/emit-function/child-composition.uvue","code":"```vue\n<template>\n <view>\n <button @click=\"click\" class=\"call-parent-btn\">调用父组件事件</button>\n </view>\n</template>\n\n<script setup lang=\"uts\">\nconst emit = defineEmits(['callback'])\n\nconst click = () => {\n emit('callback', `${Date.now()}`)\n}\n\ndefineExpose({\n click\n})\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/emit-function/child-composition"},"emit-function_child-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/emit-function/child-options.uvue","code":"```vue\n<template>\n <view>\n <button @click=\"click\" class=\"call-parent-btn\">调用父组件事件</button>\n </view>\n</template>\n\n<script>\nexport default {\n emits: ['callback'],\n methods: {\n click () {\n this.$emit('callback', `${Date.now()}`)\n }\n }\n}\n</script>\n\n<style scoped>\n\n</style>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/emit-function/child-options"},"emit-function_emit-function-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/emit-function/emit-function-composition.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <view class=\"row\">\n <text>子组件传的参数</text>\n <text id=\"value\">\n {{ value }}\n </text>\n </view>\n <child @callback=\"callback\"></child>\n </view>\n</template>\n\n<script setup lang=\"uts\">\nimport child from './child-composition.uvue'\n\nconst value = ref('')\n\nconst callback = (str: string) => {\n value.value = str\n}\n</script>\n\n<style>\n.row {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n margin-bottom: 10px;\n}\n</style>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/emit-function/emit-function-composition"},"emit-function_emit-function-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/emit-function/emit-function-options.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <view class=\"row\">\n <text>子组件传的参数</text>\n <text id=\"value\">\n {{ value }}\n </text>\n </view>\n <child @callback=\"callback\"></child>\n </view>\n</template>\n\n<script>\nimport child from './child-options.uvue'\n\nexport default {\n components: {\n child\n },\n data () {\n return {\n value: \"\"\n }\n },\n methods: {\n callback (str: string) {\n this.value = str\n }\n }\n}\n</script>\n\n<style>\n.row {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n margin-bottom: 10px;\n}\n</style>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/emit-function/emit-function-options"},"force-update_force-update-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/force-update/force-update-composition.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <view class=\"split-title\">$forceUpdate</view>\n <text class=\"mt-10 time\">Date.now(): {{ Date.now() }}</text>\n <button class=\"mt-10 trigger-force-update-btn\" type=\"primary\" @click=\"triggerForceUpdate\">trigger $forceUpdate</button>\n </view>\n</template>\n\n<script setup lang=\"uts\">\nconst instance = getCurrentInstance()\n\nconst triggerForceUpdate = () => {\n instance?.proxy?.$forceUpdate()\n}\n\ndefineExpose({\n triggerForceUpdate\n})\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/force-update/force-update-composition"},"force-update_force-update-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/force-update/force-update-options.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <view class=\"split-title\">$forceUpdate</view>\n <text class=\"uni-common-mt time\">Date.now(): {{ Date.now() }}</text>\n <button\n class=\"uni-common-mt trigger-force-update-btn\"\n type=\"primary\"\n @click=\"triggerForceUpdate\">\n trigger $forceUpdate\n </button>\n </view>\n</template>\n\n<script lang=\"uts\">\nexport default {\n methods: {\n triggerForceUpdate(){\n this.$forceUpdate()\n }\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/force-update/force-update-options"},"inject_inject-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/inject/inject-composition.uvue","code":"```vue\n<template>\r\n <view>\r\n <text>inject page</text>\r\n <text class=\"mt-10 msg\">msg: {{msg}}</text>\r\n <text class=\"mt-10 num\">num: {{num}}</text>\r\n <text class=\"mt-10 obj\">obj: {{JSON.stringify(obj)}}</text>\r\n <text class=\"mt-10 arr\">arr: {{JSON.stringify(arr)}}</text>\r\n <text class=\"mt-10 arr-0\">arr[0]: {{ arr[0]}}</text>\r\n <text class=\"mt-10 fn\">fn: {{fnRes}}</text>\r\n <text class=\"mt-10 has-injection-context\">hasInjectionContext:\r\n {{checkHasInjectionContextRes}}</text>\r\n <button class=\"mt-10 check-has-injection-context-btn\" @click=\"checkHasInjectionContext\">check\r\n hasInjectionContext</button>\r\n </view>\r\n</template>\r\n\r\n<script setup lang='uts'>\r\n const msg = inject<string>('msg')\r\n const num = inject('num')\r\n const obj = inject('obj')\r\n const arr = inject<number[]>('arr', [99])\r\n const fn = inject<() => string>('fn')\n const fnRes = ref('')\n if(fn != null){\n fnRes.value = fn()\n }\r\n\r\n const checkHasInjectionContextRes = ref('')\r\n\r\n const checkHasInjectionContext = () => {\r\n checkHasInjectionContextRes.value = `${hasInjectionContext()}`\r\n }\r\n checkHasInjectionContext()\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/inject/inject-composition"},"inject_inject-options-1":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/inject/inject-options-1.uvue","code":"```vue\n<template>\n <view>\n <text class=\"mt-10 bold\">component for inject 1</text>\n <text class=\"mt-10 alias-provide-page-title\"\n >aliasProvidePageTitle: {{ aliasProvidePageTitle }}</text\n >\n <text class=\"mt-10 provide-page-str\"\n >providePageStr: {{ providePageStr }}</text\n >\n <text class=\"mt-10 provide-page-num\"\n >providePageNum: {{ providePageNum }}</text\n >\n <text class=\"mt-10 provide-page-bool\"\n >providePageBool: {{ providePageBool }}</text\n >\n <text class=\"mt-10 provide-page-object-title\"\n >providePageObject.title: {{ providePageObject['title'] }}</text\n >\n <text class=\"mt-10 provide-page-object-content\"\n >providePageObject.content: {{ providePageObject['content'] }}</text\n >\n <text class=\"mt-10 provide-page-arr\"\n >providePageArr: {{ JSON.stringify(providePageArr) }}</text\n >\n <text class=\"mt-10 provide-page-map\"\n >providePageMap: {{ JSON.stringify(providePageMapObj) }}</text\n >\n <text class=\"mt-10 provide-page-set\"\n >providePageSet: {{ JSON.stringify(providePageSetArr) }}</text\n >\n <text class=\"mt-10 test-inject-string-default-value\"\n >testInjectStringDefaultValue: {{ testInjectStringDefaultValue }}</text\n >\n <text class=\"mt-10 test-inject-object-default-value-title\"\n >testInjectObjectDefaultValue.title:\n {{ testInjectObjectDefaultValue['title'] }}</text\n >\n <text class=\"mt-10 test-inject-object-default-value-content\"\n >testInjectObjectDefaultValue.content:\n {{ testInjectObjectDefaultValue['content'] }}</text\n >\n </view>\n</template>\n\n<script lang=\"uts\">\nexport default {\n inject: {\n aliasProvidePageTitle: {\n type: String,\n from: 'providePageTitle',\n default: 'default alias provide page title'\n },\n providePageStr: {\n type: String,\n default: 'default provide page str'\n },\n providePageNum: {\n type: Number,\n default: 0\n },\n providePageBool: {\n type: Boolean,\n default: false\n },\n providePageObject: {\n type: UTSJSONObject,\n default: (): UTSJSONObject => {\n return {\n title: 'default provide page object title',\n content: 'default provide page object content'\n }\n }\n },\n providePageArr: {\n type: Array as PropType<String[]>,\n default: (): String[] => {\n return ['default provide page arr']\n }\n },\n providePageMap: {\n type: Object as PropType<Map<string, string>>,\n default: (): Map<string, string> => {\n return new Map<string, string>([['key', 'default provide page map']])\n }\n },\n providePageSet: {\n type: Object as PropType<Set<string>>,\n default: (): Set<string> => {\n return new Set<string>(['default provide page set'])\n }\n },\n testInjectStringDefaultValue: {\n type: String,\n default: 'test inject string default value'\n },\n testInjectObjectDefaultValue: {\n type: UTSJSONObject,\n default(): UTSJSONObject {\n return {\n title: 'test inject object default value title',\n content: 'test inject object default value content'\n }\n }\n }\n },\n\tcomputed: {\n\t\tprovidePageMapObj(): UTSJSONObject {\n\t\t\tconst obj: UTSJSONObject = {}\n\t\t\tthis.providePageMap.forEach((value, key) => {\n\t\t\t\tobj[key] = value\n\t\t\t})\n\t\t\treturn obj\n\t\t},\n\t\tprovidePageSetArr(): string[] {\n\t\t\tconst arr: string[] = []\n\t\t\tthis.providePageSet.forEach((value) => {\n\t\t\t\tarr.push(value)\n\t\t\t})\n\t\t\treturn arr\n\t\t}\n\t}\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/inject/inject-options-1"},"inject_inject-options-2":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/inject/inject-options-2.uvue","code":"```vue\n<template>\n <view>\n <text class=\"mt-10 bold\">component for inject 2</text>\n <text class=\"mt-10 provide-page-title\"\n >providePageTitle: {{ providePageTitle }}</text\n >\n <text class=\"mt-10 provide-page-str\">providePageStr: {{ providePageStr }}</text>\n <text class=\"mt-10 provide-page-num\">providePageNum: {{ providePageNum }}</text>\n <text class=\"mt-10 provide-page-bool\">providePageBool: {{ providePageBool }}</text>\n <text class=\"mt-10 provide-page-object-title\"\n >providePageObject.title: {{ providePageObject['title'] }}</text\n >\n <text class=\"mt-10 provide-page-object-content\"\n >providePageObject.content: {{ providePageObject['content'] }}</text\n >\n <text class=\"mt-10 provide-page-arr\">providePageArr: {{ JSON.stringify(providePageArr) }}</text>\n <text class=\"mt-10 provide-page-map\">providePageMap: {{ JSON.stringify(providePageMapObj) }}</text>\n <text class=\"mt-10 provide-page-set\">providePageSet: {{ JSON.stringify(providePageSetArr) }}</text>\n </view>\n</template>\n\n<script lang=\"uts\">\nexport default {\n inject: {\n providePageTitle: {\n type: String,\n default: 'default provide page title'\n },\n providePageStr: {\n type: String,\n default: 'default provide page str'\n },\n providePageNum: {\n type: Number,\n default: 0\n },\n providePageBool: {\n type: Boolean,\n default: false\n },\n providePageObject: {\n type: UTSJSONObject,\n default: (): UTSJSONObject => {\n return {\n title: 'default provide page object title',\n content: 'default provide page object content'\n }\n }\n },\n providePageArr: {\n type: Array as PropType<String[]>,\n default: (): String[] => {\n return ['default provide page arr']\n }\n },\n providePageMap: {\n type: Object as PropType<Map<string, string>>,\n default: (): Map<string, string> => {\n return new Map<string, string>([['key', 'default provide page map']])\n }\n },\n providePageSet: {\n type: Object as PropType<Set<string>>,\n default: (): Set<string> => {\n return new Set<string>(['default provide page set'])\n }\n },\n },\n\tcomputed: {\n\t\tprovidePageMapObj(): UTSJSONObject {\n\t\t\tconst obj: UTSJSONObject = {}\n\t\t\tthis.providePageMap.forEach((value, key) => {\n\t\t\t\tobj[key] = value\n\t\t\t})\n\t\t\treturn obj\n\t\t},\n\t\tprovidePageSetArr(): string[] {\n\t\t\tconst arr: string[] = []\n\t\t\tthis.providePageSet.forEach((value) => {\n\t\t\t\tarr.push(value)\n\t\t\t})\n\t\t\treturn arr\n\t\t}\n\t}\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/inject/inject-options-2"},"methods_call-method-define-expose":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/methods/call-method-define-expose.uvue","code":"```vue\n<template>\n <view>\n <component-define-expose ref=\"component\"></component-define-expose>\n <button @click='callMethod'>callMethod</button>\n <view class=\"mt-10 flex\">\n <text>调用子组件 difineExpose 暴露方法结果: </text>\n <text class='mt-10'>{{ callMethodRes }}</text>\n </view>\n </view>\n</template>\n\n<script setup lang=\"uts\">\nimport ComponentDefineExpose from './component-define-expose.uvue'\n\nconst component = ref<ComponentPublicInstance | null>(null)\nconst callMethodRes = ref('')\n\nconst callMethod = () : string => {\n callMethodRes.value = component.value?.$callMethod('test', 'call defineExpose method res') as string\n return callMethodRes.value\n}\n\ndefineExpose({\n callMethod\n})\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/methods/call-method-define-expose"},"methods_call-method-easycom-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/methods/call-method-easycom-composition.uvue","code":"```vue\n<template>\n <view>\n <call-easy-method ref=\"callEasyMethod1\"></call-easy-method>\n <custom-call-easy-method ref=\"customCallEasyMethod1\"></custom-call-easy-method>\n </view>\n</template>\n\n<script setup lang=\"uts\">\nconst callEasyMethod1 = ref<CallEasyMethodComponentPublicInstance | null>(null)\nconst customCallEasyMethod1 = ref<CustomCallEasyMethodComponentPublicInstance | null>(null)\n\nconst callMethod = () => {\n // 调用组件的 foo 方法\n customCallEasyMethod1.value?.foo?.()\n}\n\nconst callMethod1 = () => {\n // 调用组件的 foo1 方法\n callEasyMethod1.value?.foo1?.()\n}\n\nconst callMethod2 = () => {\n // 调用组件的 foo2 方法并传递 1个参数\n callEasyMethod1.value?.foo2?.(Date.now())\n}\n\nconst callMethod3 = () => {\n // 调用组件的 foo3 方法并传递 2个参数\n callEasyMethod1.value?.foo3?.(Date.now(), Date.now())\n}\n\nconst callMethod4 = () => {\n // 调用组件的 foo4 方法并传递 callback\n callEasyMethod1.value?.foo4?.(() => {\n console.log('callback')\n })\n}\n\nconst callMethod5 = () => {\n // 注意: 返回值可能为 null,当前例子一定不为空,所以加了 !\n const result = callEasyMethod1.value?.foo5?.('string1') as string\n console.log(result) // string1\n}\n\nconst callMethodTest = (text: string): string | null => {\n const result = callEasyMethod1.value?.foo5?.(text) as string\n return result\n}\n\nconst callCustomMethodTest = (): string | null => {\n const result = customCallEasyMethod1.value?.foo?.() as string\n return result\n}\n\nconst delay = (): Promise<string> =>\n new Promise((resolve, _) => {\n setTimeout(() => {\n resolve('')\n }, 1000)\n })\n\nconst call = async (): Promise<void> => {\n callMethod()\n callMethod1()\n await delay()\n callMethod2()\n await delay()\n callMethod3()\n await delay()\n callMethod4()\n await delay()\n callMethod5()\n}\n\nonReady(() => {\n call()\n})\n\ndefineExpose({\n callMethodTest,\n callCustomMethodTest\n})\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/methods/call-method-easycom-composition"},"methods_call-method-easycom-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/methods/call-method-easycom-options.uvue","code":"```vue\n<template>\n <view>\n <call-easy-method ref=\"callEasyMethod1\"></call-easy-method>\n <custom-call-easy-method ref=\"customCallEasyMethod1\"></custom-call-easy-method>\n </view>\n</template>\n\n<script lang=\"uts\">\nconst delay = (): Promise<string> =>\n new Promise((resolve, _) => {\n setTimeout(() => {\n resolve('')\n }, 1000)\n })\n\nexport default {\n data() {\n return {\n callEasyMethod1: null as CallEasyMethodComponentPublicInstance | null,\n customCallEasyMethod1: null as CustomCallEasyMethodComponentPublicInstance | null,\n }\n },\n onReady() {\n // 通过组件 ref 属性获取组件实例, 组件标签名首字母大写,驼峰+ComponentPublicInstance\n this.callEasyMethod1 = this.$refs['callEasyMethod1'] as CallEasyMethodComponentPublicInstance\n this.customCallEasyMethod1 = this.$refs['customCallEasyMethod1'] as CustomCallEasyMethodComponentPublicInstance\n this.call()\n },\n methods: {\n async call(): Promise<void> {\n this.callCustomMethod()\n this.callMethod1()\n await delay()\n this.callMethod2()\n await delay()\n this.callMethod3()\n await delay()\n this.callMethod4()\n await delay()\n this.callMethod5()\n },\n callMethod1() {\n // 调用组件的 foo1 方法\n this.callEasyMethod1?.foo1?.()\n },\n callMethod2() {\n // 调用组件的 foo2 方法并传递 1个参数\n this.callEasyMethod1?.foo2?.(Date.now())\n },\n callMethod3() {\n // 调用组件的 foo3 方法并传递 2个参数\n this.callEasyMethod1?.foo3?.(Date.now(), Date.now())\n },\n callMethod4() {\n // 调用组件的 foo4 方法并传递 callback\n this.callEasyMethod1?.foo4?.(() => {\n console.log('callback')\n })\n },\n callMethod5() {\n // 注意: 返回值可能为 null,当前例子一定不为空,所以加了 !\n const result = this.callEasyMethod1?.foo5?.('string1') as string\n console.log(result) // string1\n },\n callMethodTest(text: string): string | null {\n const result = this.callEasyMethod1?.foo5?.(text) as string\n return result\n },\n callCustomMethod() {\n // 调用组件的 foo 方法\n this.customCallEasyMethod1?.foo?.()\n },\n callCustomMethodTest(): string | null {\n const result = this.customCallEasyMethod1?.foo?.() as string\n return result\n },\n }\n}\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/methods/call-method-easycom-options"},"methods_call-method-easycom-uni-modules-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/methods/call-method-easycom-uni-modules-composition.uvue","code":"```vue\n<template>\n <view>\n <call-easy-method-uni-modules ref=\"callEasyMethod1\"></call-easy-method-uni-modules>\n <!-- #ifdef APP -->\n <view>---</view>\n <test-props id=\"btn1\" :numList=\"numList\" :objList='objList' @buttonclick='onButtonClick'\n @numListChange='numListChange' @objListChange='objListChange'\n style=\"width: 80px;height: 30px;background-color: lightblue\"></test-props>\n <view style=\"flex-direction: row ;\">\n <text>isNumListValid: </text>\n <text id='isNumListValid'>{{isNumListValid}}</text>\n </view>\n <view style=\"flex-direction: row ;\">\n <text>isObjListValid: </text>\n <text id='isObjListValid'>{{isObjListValid}}</text>\n </view>\n <!-- #endif -->\n </view>\n</template>\n\n<script setup lang=\"uts\">\n import { testInOtherFile } from './call-method-easycom-uni-modules'\n import { ref, isProxy, isRef } from 'vue'\n\n // #ifdef APP\n import { PropsChangeEvent } from '@/uni_modules/test-props'\n // #endif\n\n const delay = () : Promise<string> =>\n new Promise((resolve, _) => {\n setTimeout(() => {\n resolve('')\n }, 1000)\n })\n\n const callEasyMethod1 = ref<CallEasyMethodUniModulesComponentPublicInstance | null>(null)\n\n const numList = ref<number[]>([1]) // 传递 props\n const objList = ref<any[]>([])\n const isNumListValid = ref(false)\n const isObjListValid = ref(false)\n\n\n const callMethod1 = () => {\n // 调用组件的 foo1 方法\n callEasyMethod1.value?.foo1?.()\n }\n const callMethod2 = () => {\n // 调用组件的 foo2 方法并传递 1个参数\n callEasyMethod1.value?.foo2?.(Date.now())\n }\n const callMethod3 = () => {\n // 调用组件的 foo3 方法并传递 2个参数\n callEasyMethod1.value?.foo3?.(Date.now(), Date.now())\n }\n const callMethod4 = () => {\n // 调用组件的 foo4 方法并传递 callback\n callEasyMethod1.value?.foo4?.(() => {\n console.log('callback')\n })\n }\n const callMethod5 = () => {\n // 注意: 返回值可能为 null,当前例子一定不为空,所以加了 !\n const result = callEasyMethod1.value?.foo5?.('string5') as string\n console.log(result) // string1\n }\n const callMethodTest = (text : string) : string | null => {\n const result = callEasyMethod1.value?.foo5?.(text) as string\n return result\n }\n const callMethodInOtherFile = (text : string) : string => {\n return testInOtherFile(callEasyMethod1.value!, text)\n }\n\n // #ifdef APP-ANDROID\n const numListChange = (res : Map<string, Map<string, any>>) => {\n const value = res['detail']!['value'] as number[]\n const isArray = Array.isArray(value)\n const isLengthGt0 = value.length > 0\n isNumListValid.value = isArray && isLengthGt0\n }\n // #endif\n\n // #ifdef APP-IOS\n const numListChange = (res : any) => {\n const value = res['detail']!['value'] as number[]\n const isArray = Array.isArray(value)\n const isLengthGt0 = value.length > 0\n console.log('is array',isArray,'is length>0',isLengthGt0,'res',isArray && isLengthGt0);\n isNumListValid.value = isArray && isLengthGt0\n }\n // #endif\n\n\n // #ifdef APP-ANDROID\n const objListChange = (res : Map<string, Map<string, any>>) => {\n const value = res['detail']!['value'] as any[]\n const isArray = Array.isArray(value)\n const isLengthGt0 = value.length > 0\n isObjListValid.value = isArray && isLengthGt0\n }\n // #endif\n\n // #ifdef APP-IOS\n const objListChange = (res : any) => {\n const value = res['detail']!['value'] as any[]\n const isArray = Array.isArray(value)\n const isLengthGt0 = value.length > 0\n console.log('is array',isArray,'is length>0',isLengthGt0,'res',isArray && isLengthGt0);\n isObjListValid.value = isArray && isLengthGt0\n }\n // #endif\n\n\n const onButtonClick = () => {\n // 改变 props: 观察 props 返回值为非响应式值\n numList.value = [3, 2, 1]\n objList.value = [{ id: '3' }, { id: '4' }]\n }\n\n\n const call = async () : Promise<void> => {\n callMethod1()\n await delay()\n callMethod2()\n await delay()\n callMethod3()\n await delay()\n callMethod4()\n await delay()\n callMethod5()\n }\n\n onReady(() => {\n call()\n })\n\n defineExpose({\n callMethodTest,\n callMethodInOtherFile,\n onButtonClick\n })\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/methods/call-method-easycom-uni-modules-composition"},"methods_call-method-easycom-uni-modules-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/methods/call-method-easycom-uni-modules-options.uvue","code":"```vue\n<template>\n <view>\n <call-easy-method-uni-modules ref=\"callEasyMethod1\"></call-easy-method-uni-modules>\n\n <!-- #ifdef APP -->\n <view>---</view>\n <test-props id=\"btn1\" :numList=\"numList\" :objList='objList' @buttonclick='onButtonClick'\n @numListChange='numListChange' @objListChange='objListChange'\n style=\"width: 80px;height: 30px;background-color: lightblue\"></test-props>\n <view style=\"flex-direction: row ;\">\n <text>isNumListValid: </text>\n <text id='isNumListValid'>{{isNumListValid}}</text>\n </view>\n <view style=\"flex-direction: row ;\">\n <text>isObjListValid: </text>\n <text id='isObjListValid'>{{isObjListValid}}</text>\n </view>\n <!-- #endif -->\n </view>\n</template>\n\n<script lang=\"uts\">\n import { testInOtherFile } from './call-method-easycom-uni-modules'\n\n const delay = () : Promise<string> =>\n new Promise((resolve, _) => {\n setTimeout(() => {\n resolve('')\n }, 1000)\n })\n\n export default {\n data() {\n return {\n callEasyMethod1: null as CallEasyMethodUniModulesComponentPublicInstance | null,\n isWatched: false,\n changeTimes: 0,\n numList: [1] as number[], // 传递 props\n objList: [] as any[],\n isNumListValid: false,\n isObjListValid: false\n }\n },\n onReady() {\n // 通过组件 ref 属性获取组件实例, 组件标签名首字母大写,驼峰+ComponentPublicInstance\n this.callEasyMethod1 = this.$refs['callEasyMethod1'] as CallEasyMethodUniModulesComponentPublicInstance\n\n this.call()\n },\n methods: {\n async call() : Promise<void> {\n this.callMethod1()\n await delay()\n this.callMethod2()\n await delay()\n this.callMethod3()\n await delay()\n this.callMethod4()\n await delay()\n this.callMethod5()\n\n },\n callMethod1() {\n // 调用组件的 foo1 方法\n this.callEasyMethod1?.foo1?.()\n },\n callMethod2() {\n // 调用组件的 foo2 方法并传递 1个参数\n this.callEasyMethod1?.foo2?.(Date.now())\n },\n callMethod3() {\n // 调用组件的 foo3 方法并传递 2个参数\n this.callEasyMethod1?.foo3?.(Date.now(), Date.now())\n },\n callMethod4() {\n // 调用组件的 foo4 方法并传递 callback\n this.callEasyMethod1?.foo4?.(() => {\n console.log('callback')\n })\n },\n callMethod5() {\n // 注意: 返回值可能为 null,当前例子一定不为空,所以加了 !\n const result = this.callEasyMethod1?.foo5?.('string5') as string\n console.log(result) // string1\n },\n callMethodTest(text : string) : string | null {\n const result = this.callEasyMethod1?.foo5?.(text) as string\n return result\n },\n callMethodInOtherFile(text : string) : string {\n return testInOtherFile(this.callEasyMethod1!, text)\n },\n\n // #ifdef APP-ANDROID\n numListChange(res : Map<string, Map<string, any>>) {\n const value = res['detail']!['value'] as number[]\n const isArray = Array.isArray(value)\n const isLengthGt0 = value.length > 0\n this.isNumListValid = isArray && isLengthGt0\n },\n // #endif\n // #ifdef APP-IOS\n numListChange(res : any) {\n const value = res['detail']!['value'] as number[]\n const isArray = Array.isArray(value)\n const isLengthGt0 = value.length > 0\n this.isNumListValid = isArray && isLengthGt0\n },\n // #endif\n\n // #ifdef APP-ANDROID\n objListChange(res : Map<string, Map<string, any>>) {\n const value = res['detail']!['value'] as number[]\n const isArray = Array.isArray(value)\n const isLengthGt0 = value.length > 0\n this.isObjListValid = isArray && isLengthGt0\n },\n // #endif\n // #ifdef APP-IOS\n objListChange(res : any) {\n const value = res['detail']!['value'] as number[]\n const isArray = Array.isArray(value)\n const isLengthGt0 = value.length > 0\n this.isObjListValid = isArray && isLengthGt0\n },\n // #endif\n onButtonClick() {\n // 改变 props: 观察 props 返回值为非响应式值\n console.log('button click');\n this.numList = [3, 2, 1]\n this.objList = [{ id: '3' }, { id: '4' }]\n }\n }\n }\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/methods/call-method-easycom-uni-modules-options"},"methods_call-method-other-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/methods/call-method-other-composition.uvue","code":"```vue\n<template>\n <view>\n <component1 ref=\"componentRef\"></component1>\n </view>\n</template>\n\n<script setup lang=\"uts\">\n// 非easycom组件需import引用组件 componentRef-composition.uvue\nimport component1 from './component1-composition.uvue'\n\nconst componentRef = ref<ComponentPublicInstance | null>(null)\n\nconst callMethod1 = () => {\n // 通过 $callMethod 调用组件的 foo1 方法\n componentRef.value?.$callMethod('foo1')\n}\n\nconst callMethod2 = () => {\n // 通过 $callMethod 调用组件的 foo2 方法并传递 1个参数\n componentRef.value?.$callMethod('foo2', Date.now())\n}\n\nconst callMethod3 = () => {\n // 通过 $callMethod 调用组件的 foo3 方法并传递 2个参数\n componentRef.value?.$callMethod('foo3', Date.now(), Date.now())\n}\n\nconst callMethod4 = () => {\n // 通过 $callMethod 调用组件的 foo4 方法并传递 callback\n componentRef.value?.$callMethod('foo4', () => {\n console.log('callback')\n })\n}\n\nconst callMethod5 = () => {\n // 通过 $callMethod 调用组件的 foo5 方法并接收返回值\n // 注意: 返回值可能为 null,当前例子一定不为空,所以加了 !\n const result = componentRef.value?.$callMethod('foo5', 'string1') as string\n console.log(result) // string1\n}\n\nconst callMethodTest = (text: string): string | null => {\n const result = componentRef.value?.$callMethod('foo5', text) as string\n return result\n}\n\nconst delay = (): Promise<string> =>\n new Promise((resolve, _) => {\n setTimeout(() => {\n resolve('')\n }, 1000)\n })\n\nconst call = async (): Promise<void> => {\n callMethod1()\n await delay()\n callMethod2()\n await delay()\n callMethod3()\n await delay()\n callMethod4()\n await delay()\n callMethod5()\n}\n\nonReady(() => {\n call()\n})\n\ndefineExpose({\n callMethodTest\n})\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/methods/call-method-other-composition"},"methods_call-method-other-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/methods/call-method-other-options.uvue","code":"```vue\n<template>\n <view>\n <component1 ref=\"component1\"></component1>\n </view>\n</template>\n\n<script>\n// 非easycom组件需import引用组件 component1.uvue\nimport component1 from './component1.uvue'\n\nconst delay = (): Promise<string> =>\n new Promise((resolve, _) => {\n setTimeout(() => {\n resolve('')\n }, 1000)\n })\n\nexport default {\n components: {\n component1\n },\n data() {\n return {\n component1: null as ComponentPublicInstance | null\n }\n },\n onReady() {\n // 通过组件 ref 属性获取组件实例\n this.component1 = this.$refs['component1'] as ComponentPublicInstance;\n this.call()\n },\n methods: {\n async call(): Promise<void> {\n this.callMethod1()\n await delay()\n this.callMethod2()\n await delay()\n this.callMethod3()\n await delay()\n this.callMethod4()\n await delay()\n this.callMethod5()\n },\n callMethod1() {\n // 通过 $callMethod 调用组件的 foo1 方法\n this.component1?.$callMethod('foo1');\n },\n callMethod2() {\n // 通过 $callMethod 调用组件的 foo2 方法并传递 1个参数\n this.component1?.$callMethod('foo2', Date.now());\n },\n callMethod3() {\n // 通过 $callMethod 调用组件的 foo3 方法并传递 2个参数\n this.component1?.$callMethod('foo3', Date.now(), Date.now());\n },\n callMethod4() {\n // 通过 $callMethod 调用组件的 foo4 方法并传递 callback\n this.component1?.$callMethod('foo4', () => {\n console.log('callback')\n });\n },\n callMethod5() {\n // 通过 $callMethod 调用组件的 foo5 方法并接收返回值\n // 注意: 返回值可能为 null,当前例子一定不为空,所以加了 !\n const result = this.component1?.$callMethod('foo5', 'string1') as string;\n console.log(result); // string1\n },\n callMethodTest(text: string): string | null {\n const result = this.component1?.$callMethod('foo5', text) as string;\n return result;\n },\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/methods/call-method-other-options"},"methods_call-method-uni-element-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/methods/call-method-uni-element-composition.uvue","code":"```vue\n<template>\n <view>\n <slider :show-value=\"true\" ref=\"sliderRef\"></slider>\n </view>\n</template>\n\n<script setup lang=\"uts\">\nconst sliderRef = ref<UniSliderElement | null>(null)\n\nonReady(() => {\n sliderRef.value!.value = 80\n})\n\nconst callMethodTest = (text: string): string | null => {\n sliderRef.value?.setAttribute('str', text)\n const result = sliderRef.value?.getAttribute('str') as string\n return result\n}\n\ndefineExpose({\n callMethodTest\n})\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/methods/call-method-uni-element-composition"},"methods_call-method-uni-element-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/methods/call-method-uni-element-options.uvue","code":"```vue\n<template>\n <view>\n <slider :show-value=\"true\" ref=\"slider1\"></slider>\n </view>\n</template>\n\n<script>\nexport default {\n data() {\n return {\n slider1: null as UniSliderElement | null\n }\n },\n onReady() {\n // 通过组件 ref 属性获取组件实例, Uni组件名(驼峰)UniElement\n this.slider1 = this.$refs['slider1'] as UniSliderElement;\n this.setValue()\n },\n methods: {\n setValue() {\n this.slider1!.value = 80\n },\n callMethodTest(text: string): string | null {\n this.slider1?.setAttribute('str', text);\n const result = this.slider1?.getAttribute('str') as string;\n return result;\n },\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/methods/call-method-uni-element-options"},"methods_component-define-expose":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/methods/component-define-expose.uvue","code":"```vue\n<template>\r\n <view></view>\r\n</template>\r\n\r\n<script setup lang='uts'>\r\n function test(name : string) : string {\r\n return name\r\n }\r\n defineExpose({\r\n test\r\n })\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/methods/component-define-expose"},"methods_component1-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/methods/component1-composition.uvue","code":"```vue\n<template>\n <view>{{ result }}</view>\n</template>\n\n<script setup lang=\"uts\">\nconst result = ref<string>('')\n\nconst foo1 = () => {\n result.value = 'foo1'\n}\n\nconst foo2 = (date1: number) => {\n result.value = 'foo2=' + date1\n}\n\nconst foo3 = (date1: number, date2: number) => {\n result.value = 'foo3=' + date1 + ' ' + date2\n}\n\nconst foo4 = (callback: () => void) => {\n callback()\n}\n\nconst foo5 = (text: string): string => {\n result.value = text\n return text\n}\n\ndefineExpose({\n foo1,\n foo2,\n foo3,\n foo4,\n foo5\n})\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/methods/component1-composition"},"methods_component1":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/methods/component1.uvue","code":"```vue\n<template>\n <view>{{result}}</view>\n</template>\n\n<script>\n export default {\n data() {\n return {\n result: ''\n }\n },\n methods: {\n foo1() {\n this.result = \"foo1\"\n },\n foo2(date1 : number) {\n this.result = \"foo2=\" + date1\n },\n foo3(date1 : number, date2 : number) {\n this.result = \"foo3=\" + date1 + \" \" + date2\n },\n foo4(callback : (() => void)) {\n callback()\n },\n foo5(text1 : string) : string | null {\n this.result = text1\n return text1\n }\n }\n }\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/methods/component1"},"mixins_mixins-app-page-namesake":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/mixins/mixins-app-page-namesake.uvue","code":"```vue\n<template>\n <!-- #ifdef APP -->\n <scroll-view style=\"flex: 1\">\n <!-- #endif -->\n <view class=\"page\">\n <text class=\"bold\">props:</text>\n <text class=\"mt-10 namesake-mixin-prop\">{{ namesakeMixinProp }}</text>\n <text class=\"mt-10 namesake-child-mixin-prop\">{{ namesakeChildMixinProp }}</text>\n\n <text class=\"bold mt-10\">data:</text>\n <text class=\"mt-10 namesake-mixin-data-msg\">{{ namesakeMixinDataMsg }}</text>\n <text class=\"mt-10 namesake-child-mixin-data-msg\">{{ namesakeChildMixinDataMsg }}</text>\n\n <text class=\"bold mt-10\">computed:</text>\n <text class=\"mt-10 namesake-mixin-computed\">{{ namesakeMixinComputed }}</text>\n <text class=\"mt-10 namesake-child-mixin-computed\">{{ namesakeChildMixinComputed }}</text>\n\n <text class=\"mt-10 bold\">method:</text>\n <text class=\"mt-10 namesake-mixin-method\">{{ namesakeMixinMethod() }}</text>\n <text class=\"mt-10 namesake-child-mixin-method\">{{ namesakeChildMixinMethod() }}</text>\n\n <text class=\"mt-10 bold\">mixin component:</text>\n <GlobalMixinComp1 />\n <GlobalChildMixinComp1 />\n <GlobalMixinComp2 />\n <GlobalChildMixinComp2 />\n <MixinComp1 />\n <ChildMixinComp1 />\n <MixinComp2 />\n <ChildMixinComp2 />\n <MixinComp />\n </view>\n <!-- #ifdef APP -->\n </scroll-view>\n <!-- #endif -->\n</template>\n\n<script lang=\"uts\">\nimport MixinComp2 from './components/MixinComp2.uvue'\nimport ChildMixinComp2 from './components/ChildMixinComp2.uvue'\nimport CompForPage from './components/CompForPage.uvue'\nimport { pageMixin } from './mixins'\n\nexport default {\n components: {\n MixinComp: CompForPage\n },\n mixins: [\n pageMixin,\n {\n mixins: [{\n components: {ChildMixinComp2},\n props: {\n childMixinProp2: {\n type: String,\n default: '通过字面量定义非全局 child mixin props'\n },\n namesakeChildMixinProp: {\n type: String,\n default: '通过字面量定义非全局同名 child mixin props'\n }\n },\n data() {\n return {\n childMixinDataMsg2: '通过字面量定义非全局 child mixin data',\n namesakeChildMixinDataMsg: '通过字面量定义非全局同名 child mixin data',\n childMixinOnLoadMsg2: '',\n childMixinWatchMsg2: ''\n }\n },\n computed: {\n childMixinComputed2(): string {\n const res = `通过字面量定义非全局 child mixin computed, 更新后的 childMixinOnLoadMsg2: ${this.childMixinOnLoadMsg2}`\n console.log(res)\n return res\n },\n namesakeChildMixinComputed(): string {\n const res = '通过字面量定义非全局同名 child mixin computed'\n console.log(res)\n return res\n }\n },\n watch: {\n globalMixinOnloadMsg1(newVal: string) {\n this.childMixinWatchMsg2 = `通过字面量定义非全局 child mixin watch, 更新后的 globalMixinOnloadMsg1: ${newVal}`\n console.log(this.childMixinWatchMsg2)\n },\n },\n onLoad() {\n const res = '通过字面量定义非全局 child mixin onLoad'\n console.log(res)\n this.childMixinOnLoadMsg2 = res\n },\n methods: {\n childMixinMethod2(): string {\n const res = '通过字面量定义非全局 child mixin method'\n console.log(res)\n return res\n },\n namesakeChildMixinMethod(): string {\n const res = '通过字面量定义非全局同名 child mixin method'\n console.log(res)\n return res\n },\n },\n }],\n components: {MixinComp2},\n props: {\n mixinProp2: {\n type: String,\n default: '通过字面量定义非全局 mixin props'\n },\n namesakeMixinProp: {\n type: String,\n default: '通过字面量定义非全局同名 mixin props'\n }\n },\n data() {\n return {\n mixinDataMsg2: '通过字面量定义非全局 mixin data',\n namesakeMixinDataMsg: '通过字面量定义非全局同名 mixin data',\n mixinOnloadMsg2: '',\n mixinWatchMsg2: ''\n }\n },\n computed: {\n mixinComputed2(): string {\n const res = `通过字面量定义非全局 mixin computed, 更新后的 mixinOnloadMsg2: ${this.mixinOnloadMsg2}`\n console.log(res)\n return res\n },\n namesakeMixinComputed(): string {\n const res = '通过字面量定义非全局同名 mixin computed'\n console.log(res)\n return res\n }\n },\n watch: {\n globalMixinOnloadMsg1(newVal: string) {\n this.mixinWatchMsg2 = `通过 defineMixin 定义非全局 child mixin watch, 更新后的 globalMixinOnloadMsg1: ${newVal}`\n console.log(this.mixinWatchMsg2)\n },\n },\n onLoad() {\n const res = '通过字面量定义非全局 mixin onLoad'\n console.log(res)\n this.mixinOnloadMsg2 = res\n },\n methods: {\n mixinMethod2(): string {\n const res = '通过字面量定义非全局 mixin method'\n console.log(res)\n return res\n },\n namesakeMixinMethod(): string {\n const res = '通过字面量定义非全局同名 mixin method'\n console.log(res)\n return res\n }\n },\n },\n ],\n props: {\n namesakeMixinProp: {\n type: String,\n default: '页面内的同名 props'\n },\n namesakeChildMixinProp: {\n type: String,\n default: '页面内的同名 child props'\n },\n },\n data(){\n return {\n namesakeMixinDataMsg: '页面内的同名 data',\n namesakeChildMixinDataMsg: '页面内的同名 child data',\n mixinWatchMsg: ''\n }\n },\n watch: {\n globalMixinOnloadMsg1(newVal: string) {\n this.mixinWatchMsg = `页面内部定义的 watch, 更新后的 globalMixinOnloadMsg1: ${newVal}`\n console.log(this.mixinWatchMsg)\n },\n },\n computed: {\n namesakeMixinComputed(): string {\n const res = '页面内的同名 computed'\n console.log(res)\n return res\n },\n namesakeChildMixinComputed(): string {\n const res = '页面内的同名 child computed'\n console.log(res)\n return res\n }\n },\n methods: {\n namesakeMixinMethod(): string {\n const res = '页面内的同名 method'\n console.log(res)\n return res\n },\n namesakeChildMixinMethod(): string {\n const res = '页面内的同名 child method'\n console.log(res)\n return res\n },\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/mixins/mixins-app-page-namesake"},"mixins_mixins-app":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/mixins/mixins-app.uvue","code":"```vue\n<template>\n <!-- #ifdef APP -->\n <scroll-view style=\"flex: 1\">\n <!-- #endif -->\n <view class=\"page\">\n <button type=\"primary\" @click=\"goMixinPageNamesake\">go mixin page namesake</button>\n <text class=\"mt-10 bold\">props:</text>\n <text class=\"mt-10 global-mixin-prop-1\">{{ globalMixinProp1 }}</text>\n <text class=\"mt-10 global-child-mixin-prop-1\">{{ globalChildMixinProp1 }}</text>\n <text class=\"mt-10 global-mixin-prop-2\">{{ globalMixinProp2 }}</text>\n <text class=\"mt-10 global-child-mixin-prop-2\">{{ globalChildMixinProp2 }}</text>\n <text class=\"mt-10 mixin-prop-1\">{{ mixinProp1 }}</text>\n <text class=\"mt-10 child-mixin-prop-1\">{{ childMixinProp1 }}</text>\n <text class=\"mt-10 mixin-prop-2\">{{ mixinProp2 }}</text>\n <text class=\"mt-10 child-mixin-prop-2\">{{ childMixinProp2 }}</text>\n <text class=\"mt-10 namesake-mixin-prop\">{{ namesakeMixinProp }}</text>\n <text class=\"mt-10 namesake-child-mixin-prop\">{{ namesakeChildMixinProp }}</text>\n\n <text class=\"bold mt-10\">data:</text>\n <text class=\"mt-10 global-mixin-data-msg-1\">{{ globalMixinDataMsg1 }}</text>\n <text class=\"mt-10 global-child-mixin-data-msg-1\">{{ globalChildMixinDataMsg1 }}</text>\n <text class=\"mt-10 global-mixin-data-msg-2\">{{ globalMixinDataMsg2 }}</text>\n <text class=\"mt-10 global-child-mixin-data-msg-2\">{{ globalChildMixinDataMsg2 }}</text>\n <text class=\"mt-10 mixin-data-msg-1\">{{ mixinDataMsg1 }}</text>\n <text class=\"mt-10 child-mixin-data-msg-1\">{{ childMixinDataMsg1 }}</text>\n <text class=\"mt-10 mixin-data-msg-2\">{{ mixinDataMsg2 }}</text>\n <text class=\"mt-10 child-mixin-data-msg-2\">{{ childMixinDataMsg2 }}</text>\n <text class=\"mt-10 namesake-mixin-data-msg\">{{ namesakeMixinDataMsg }}</text>\n <text class=\"mt-10 namesake-child-mixin-data-msg\">{{ namesakeChildMixinDataMsg }}</text>\n\n <text class=\"bold mt-10\">computed:</text>\n <text class=\"mt-10 global-mixin-computed-1\">{{ globalMixinComputed1 }}</text>\n <text class=\"mt-10 global-child-mixin-computed-1\">{{ globalChildMixinComputed1 }}</text>\n <text class=\"mt-10 global-mixin-computed-2\">{{ globalMixinComputed2 }}</text>\n <text class=\"mt-10 global-child-mixin-computed-2\">{{ globalChildMixinComputed2 }}</text>\n <text class=\"mt-10 mixin-computed-1\">{{ mixinComputed1 }}</text>\n <text class=\"mt-10 child-mixin-computed-1\">{{ childMixinComputed1 }}</text>\n <text class=\"mt-10 mixin-computed-2\">{{ mixinComputed2 }}</text>\n <text class=\"mt-10 child-mixin-computed-2\">{{ childMixinComputed2 }}</text>\n <text class=\"mt-10 namesake-mixin-computed\">{{ namesakeMixinComputed }}</text>\n <text class=\"mt-10 namesake-child-mixin-computed\">{{ namesakeChildMixinComputed }}</text>\n\n <text class=\"bold mt-10\">watch:</text>\n <text class=\"mt-10 global-mixin-watch-1\">{{ globalMixinWatchMsg1 }}</text>\n <text class=\"mt-10 global-child-mixin-watch-1\">{{ globalChildMixinWatchMsg1 }}</text>\n <text class=\"mt-10 global-mixin-watch-2\">{{ globalMixinWatchMsg2 }}</text>\n <text class=\"mt-10 global-child-mixin-watch-2\">{{ globalChildMixinWatchMsg2 }}</text>\n <text class=\"mt-10 mixin-watch-1\">{{ mixinWatchMsg1 }}</text>\n <text class=\"mt-10 child-mixin-watch-1\">{{ childMixinWatchMsg1 }}</text>\n <text class=\"mt-10 mixin-watch-2\">{{ mixinWatchMsg2 }}</text>\n <text class=\"mt-10 child-mixin-watch-2\">{{ childMixinWatchMsg2 }}</text>\n <text class=\"mt-10 mixin-watch\">{{ mixinWatchMsg }}</text>\n\n <text class=\"bold mt-10\">lifecycle:</text>\n <text class=\"mt-10\">{{ globalMixinOnloadMsg1 }}</text>\n <text class=\"mt-10\">{{ globalMixinOnloadMsg2 }}</text>\n <text class=\"mt-10\">{{ globalChildMixinOnloadMsg1 }}</text>\n <text class=\"mt-10\">{{ globalChildMixinOnloadMsg2 }}</text>\n <text class=\"mt-10\">{{ mixinOnloadMsg1 }}</text>\n <text class=\"mt-10\">{{ mixinOnloadMsg2 }}</text>\n <text class=\"mt-10\">{{ childMixinOnloadMsg1 }}</text>\n <text class=\"mt-10\">{{ childMixinOnloadMsg2 }}</text>\n <text class=\"mt-10\">{{ onloadMsg }}</text>\n\n <text class=\"mt-10 bold\">method:</text>\n <text class=\"mt-10 global-mixin-method-1\">{{ globalMixinMethod1() }}</text>\n <text class=\"mt-10 global-child-mixin-method-1\">{{ globalChildMixinMethod1() }}</text>\n <text class=\"mt-10 global-mixin-method-2\">{{ globalMixinMethod2() }}</text>\n <text class=\"mt-10 global-child-mixin-method-2\">{{ globalChildMixinMethod2() }}</text>\n <text class=\"mt-10 mixin-method-1\">{{ mixinMethod1() }}</text>\n <text class=\"mt-10 child-mixin-method-1\">{{ childMixinMethod1() }}</text>\n <text class=\"mt-10 mixin-method-2\">{{ mixinMethod2() }}</text>\n <text class=\"mt-10 child-mixin-method-2\">{{ childMixinMethod2() }}</text>\n <text class=\"mt-10 namesake-mixin-method\">{{ namesakeMixinMethod() }}</text>\n <text class=\"mt-10 namesake-child-mixin-method\">{{ namesakeChildMixinMethod() }}</text>\n\n <text class=\"mt-10 bold\">component:</text>\n <Comp1\n title=\"title\"\n @globalMixinEmit1=\"(arg: string) => handleMixinEmitter('globalMixinEmit1', arg)\"\n @globalChildMixinEmit1=\"(arg: string) => handleMixinEmitter('globalChildMixinEmit1', arg)\"\n @globalMixinEmit2=\"(arg: string) => handleMixinEmitter('globalMixinEmit2', arg)\"\n @globalChildMixinEmit2=\"(arg: string) => handleMixinEmitter('globalChildMixinEmit2', arg)\"\n @mixinEmit=\"(arg: string) => handleMixinEmitter('mixinEmit', arg)\"\n @childMixinEmit=\"(arg: string) => handleMixinEmitter('childMixinEmit', arg)\" />\n <text v-if=\"handleMixinEmitterMsg\" class=\"mt-10 handle-mixin-emitter-msg\"\n >handleMixinEmitterMsg: {{ handleMixinEmitterMsg }}</text\n >\n <Comp2 class='comp2' title=\"title\" />\n <text class=\"mt-10 bold\">mixin component:</text>\n <GlobalMixinComp1 />\n <GlobalChildMixinComp1 />\n <GlobalMixinComp2 />\n <GlobalChildMixinComp2 />\n <MixinComp1 />\n <ChildMixinComp1 />\n <MixinComp2 />\n <ChildMixinComp2 />\n </view>\n <!-- #ifdef APP -->\n </scroll-view>\n <!-- #endif -->\n</template>\n\n<script lang=\"uts\">\nimport Comp1 from './components/Comp1.uvue'\nimport Comp2 from './components/Comp2.uvue'\nimport MixinComp2 from './components/MixinComp2.uvue'\nimport ChildMixinComp2 from './components/ChildMixinComp2.uvue'\nimport { pageMixin } from './mixins'\n\nexport default {\n components: {\n Comp1,\n Comp2,\n },\n mixins: [\n pageMixin,\n {\n mixins: [{\n components: {ChildMixinComp2},\n props: {\n childMixinProp2: {\n type: String,\n default: '通过字面量定义非全局 child mixin props'\n },\n namesakeChildMixinProp: {\n type: String,\n default: '通过字面量定义非全局同名 child mixin props'\n }\n },\n data() {\n return {\n childMixinDataMsg2: '通过字面量定义非全局 child mixin data',\n namesakeChildMixinDataMsg: '通过字面量定义非全局同名 child mixin data',\n childMixinOnloadMsg2: '',\n childMixinOnloadTime2: 0,\n childMixinWatchMsg2: ''\n }\n },\n computed: {\n childMixinComputed2(): string {\n const res = `通过字面量定义非全局 child mixin computed, 更新后的 childMixinOnloadMsg2: ${this.childMixinOnloadMsg2}`\n console.log(res)\n return res\n },\n namesakeChildMixinComputed(): string {\n const res = '通过字面量定义非全局同名 child mixin computed'\n console.log(res)\n return res\n }\n },\n watch: {\n globalMixinOnloadMsg1(newVal: string) {\n this.childMixinWatchMsg2 = `通过字面量定义非全局 child mixin watch, 更新后的 globalMixinOnloadMsg1: ${newVal}`\n console.log(this.childMixinWatchMsg2)\n },\n },\n onLoad() {\n this.childMixinOnloadTime2 = Date.now()\n const res = '通过字面量定义非全局 child mixin onLoad'\n console.log(res)\n this.childMixinOnloadMsg2 = res\n },\n methods: {\n childMixinMethod2(): string {\n const res = '通过字面量定义非全局 child mixin method'\n console.log(res)\n return res\n },\n namesakeChildMixinMethod(): string {\n const res = '通过字面量定义非全局同名 child mixin method'\n console.log(res)\n return res\n },\n },\n }],\n components: {MixinComp2},\n props: {\n mixinProp2: {\n type: String,\n default: '通过字面量定义非全局 mixin props'\n },\n namesakeMixinProp: {\n type: String,\n default: '通过字面量定义非全局同名 mixin props'\n }\n },\n data() {\n return {\n mixinDataMsg2: '通过字面量定义非全局 mixin data',\n namesakeMixinDataMsg: '通过字面量定义非全局同名 mixin data',\n mixinOnloadMsg2: '',\n mixinOnloadTime2: 0,\n mixinWatchMsg2: ''\n }\n },\n computed: {\n mixinComputed2(): string {\n const res = `通过字面量定义非全局 mixin computed, 更新后的 mixinOnloadMsg2: ${this.mixinOnloadMsg2}`\n console.log(res)\n return res\n },\n namesakeMixinComputed(): string {\n const res = '通过字面量定义非全局同名 mixin computed'\n console.log(res)\n return res\n }\n },\n watch: {\n globalMixinOnloadMsg1(newVal: string) {\n this.mixinWatchMsg2 = `通过字面量定义非全局 mixin watch, 更新后的 globalMixinOnloadMsg1: ${newVal}`\n console.log(this.mixinWatchMsg2)\n },\n },\n onLoad() {\n this.mixinOnloadTime2 = Date.now()\n const res = '通过字面量定义非全局 mixin onLoad'\n console.log(res)\n this.mixinOnloadMsg2 = res\n },\n methods: {\n mixinMethod2(): string {\n const res = '通过字面量定义非全局 mixin method'\n console.log(res)\n return res\n },\n namesakeMixinMethod(): string {\n const res = '通过字面量定义非全局同名 mixin method'\n console.log(res)\n return res\n }\n },\n },\n ],\n data(){\n return {\n handleMixinEmitterMsg: '',\n mixinWatchMsg: '',\n mixinOnloadTime: 0,\n onloadMsg: ''\n }\n },\n watch: {\n globalMixinOnloadMsg1(newVal: string) {\n this.mixinWatchMsg = `页面内部定义的 watch, 更新后的 globalMixinOnloadMsg1: ${newVal}`\n console.log(this.mixinWatchMsg)\n },\n },\n onLoad(){\n this.mixinOnloadTime = Date.now()\n const res = '页面内的 onLoad'\n console.log(res)\n this.onloadMsg = res\n },\n methods: {\n goMixinPageNamesake(){\n uni.navigateTo({url: './mixins-app-page-namesake'})\n },\n handleMixinEmitter(emit: string, arg: string){\n this.handleMixinEmitterMsg = `触发 ${emit}, 参数为 ${arg}`\n console.log(this.handleMixinEmitterMsg)\n }\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/mixins/mixins-app"},"mixins_mixins-web":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/mixins/mixins-web.uvue","code":"```vue\n<template>\r\n <!-- #ifdef APP -->\r\n <scroll-view style=\"flex: 1\">\r\n <!-- #endif -->\r\n <view class=\"page\">\r\n <text id=\"mixin-prop\" class=\"mb-10\">mixinProp: {{mixinProp}}</text>\r\n <text id=\"mixin-data-msg\" class=\"mb-10\">mixinDataMsg: {{mixinDataMsg}}</text>\r\n <text id=\"mixin-onload-msg\" class=\"mb-10\">mixinOnloadMsg: {{mixinOnloadMsg}}</text>\r\n <text id=\"mixin-computed\" class=\"mb-10\">mixinComputed: {{mixinComputed}}</text>\r\n\r\n <Comp1 title=\"title\" @globalMixinEmit1=\"(arg: string) => handleMixinEmitter('globalMixinEmit1', arg)\"\r\n @globalChildMixinEmit1=\"(arg: string) => handleMixinEmitter('globalChildMixinEmit1', arg)\"\r\n @globalMixinEmit2=\"(arg: string) => handleMixinEmitter('globalMixinEmit2', arg)\"\r\n @globalChildMixinEmit2=\"(arg: string) => handleMixinEmitter('globalChildMixinEmit2', arg)\"\r\n @mixinEmit=\"(arg: string) => handleMixinEmitter('mixinEmit', arg)\"\r\n @childMixinEmit=\"(arg: string) => handleMixinEmitter('childMixinEmit', arg)\" />\r\n <text v-if=\"handleMixinEmitterMsg\" class=\"mt-10 handle-mixin-emitter-msg\">\r\n handleMixinEmitterMsg: {{ handleMixinEmitterMsg }}\r\n </text>\r\n <Comp2 class='comp2' title=\"title\" />\r\n </view>\r\n <!-- #ifdef APP -->\r\n </scroll-view>\r\n <!-- #endif -->\r\n</template>\r\n\r\n<script lang=\"uts\">\r\n import Comp1 from './components/Comp1.uvue'\r\n import Comp2 from './components/Comp2.uvue'\r\n export default {\r\n components: {\r\n Comp1,\r\n Comp2,\r\n },\r\n mixins: [defineMixin({\r\n props: {\r\n mixinProp: {\r\n type: String,\r\n default: '通过字面量定义非全局 mixin props'\r\n }\r\n },\r\n data() {\r\n return {\r\n handleMixinEmitterMsg: '',\r\n mixinDataMsg: '通过字面量定义非全局 mixin data',\r\n mixinOnloadMsg: ''\r\n }\r\n },\r\n computed: {\r\n mixinComputed(): string {\r\n const res = `通过字面量定义非全局 mixin computed, 更新后的 mixinOnloadMsg: ${this.mixinOnloadMsg}`\r\n console.log(res)\r\n return res\r\n }\r\n },\r\n onLoad() {\r\n this.mixinOnloadMsg = 'mixin onLoad msg in onLoad'\r\n },\r\n methods: {\r\n mixinMethod(): string {\r\n const res = '通过字面量定义非全局 mixin method'\r\n console.log(res)\r\n return res\r\n },\r\n handleMixinEmitter(emit: string, arg: string) {\r\n this.handleMixinEmitterMsg = `触发 ${emit}, 参数为 ${arg}`\r\n console.log(this.handleMixinEmitterMsg)\r\n }\r\n },\r\n })]\r\n }\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/mixins/mixins-web"},"mp-instance_mp-instance":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/mp-instance/mp-instance.uvue","code":"```vue\n<template>\n <view>\n renderer: <text id=\"mp-renderer\">{{mpRenderer}}</text>\n </view>\n</template>\n\n<script>\n export default {\n data() {\n return {\n mpRenderer: ''\n }\n },\n onLoad() {\n this.mpRenderer = this.$scope.renderer\n },\n methods: {\n \n }\n }\n</script>\n\n<style>\n\n</style>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/mp-instance/mp-instance"},"nextTick_child-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/nextTick/child-composition.uvue","code":"```vue\n<template>\r\n <!-- #ifdef APP -->\r\n <scroll-view style=\"flex: 1\">\r\n <!-- #endif -->\r\n <view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text ref=\"text\">title:</text>\r\n <text id=\"child-text\">{{ dataInfo.title }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text ref=\"text\">before $nextTick title:</text>\r\n <text>{{ dataInfo.beforeNextTickTitle }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text ref=\"text\">after $nextTick title:</text>\r\n <text>{{ dataInfo.afterNextTickTitle }}</text>\r\n </view>\r\n <button id=\"child-test-next-tick-btn\" @click=\"childTestNextTick\">child test nextTick</button>\r\n </view>\r\n <!-- #ifdef APP -->\r\n </scroll-view>\r\n <!-- #endif -->\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\n type DataInfo = {\r\n title : string\r\n beforeNextTickTitle : string\r\n afterNextTickTitle : string\r\n }\r\n\r\n const dataInfo = reactive({\r\n title: 'default title',\r\n beforeNextTickTitle: '',\r\n afterNextTickTitle: '',\r\n } as DataInfo)\r\n\r\n const testNextTick = async () => {\r\n const childText = uni.getElementById('child-text')!\r\n dataInfo.title = 'new title'\r\n\r\n // #ifdef APP\r\n dataInfo.beforeNextTickTitle = childText.getAttribute('value')!\r\n // #endif\r\n // #ifndef APP\r\n // @ts-ignore\r\n dataInfo.beforeNextTickTitle = childText.textContent\r\n // #endif\n \r\n await nextTick()\n \r\n // #ifdef APP\r\n dataInfo.afterNextTickTitle = childText.getAttribute('value')!\r\n // #endif\r\n // #ifndef APP\r\n // @ts-ignore\r\n dataInfo.afterNextTickTitle = childText.textContent\r\n // #endif\r\n }\r\n const childTestNextTick = () => {\r\n testNextTick()\r\n }\r\n\r\n defineExpose({\r\n dataInfo\r\n })\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/nextTick/child-composition"},"nextTick_child-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/nextTick/child-options.uvue","code":"```vue\n<template>\r\n <!-- #ifdef APP -->\r\n <scroll-view style=\"flex: 1\">\r\n <!-- #endif -->\r\n <view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text ref=\"text\">title for callback:</text>\r\n <text id=\"child-text-callback\">{{ dataInfo.titleForCallback }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text ref=\"text\">before $nextTick callback title:</text>\r\n <text>{{ dataInfo.beforeNextTickCallbackTitle }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text ref=\"text\">after $nextTick callback title:</text>\r\n <text>{{ dataInfo.afterNextTickCallbackTitle }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text ref=\"text\">title for promise:</text>\r\n <text id=\"child-text-promise\">{{ dataInfo.titleForPromise }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text ref=\"text\">before $nextTick promise title:</text>\r\n <text>{{ dataInfo.beforeNextTickPromiseTitle }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text ref=\"text\">after $nextTick promise title:</text>\r\n <text>{{ dataInfo.afterNextTickPromiseTitle }}</text>\r\n </view>\r\n <button id=\"child-test-next-tick-btn\" @click=\"childTestNextTick\">child test $nextTick</button>\r\n </view>\r\n <!-- #ifdef APP -->\r\n </scroll-view>\r\n <!-- #endif -->\r\n</template>\r\n\r\n<script lang=\"uts\">\r\n type DataInfo = {\r\n titleForCallback : string\r\n beforeNextTickCallbackTitle : string\r\n afterNextTickCallbackTitle : string\r\n titleForPromise : string\r\n beforeNextTickPromiseTitle : string\r\n afterNextTickPromiseTitle : string\r\n }\r\n\r\n export default {\r\n data() {\r\n return {\r\n dataInfo: {\r\n titleForCallback: 'default title for callback',\r\n beforeNextTickCallbackTitle: '',\r\n afterNextTickCallbackTitle: '',\r\n titleForPromise: 'default title for promise',\r\n beforeNextTickPromiseTitle: '',\r\n afterNextTickPromiseTitle: '',\r\n } as DataInfo\r\n }\r\n },\r\n methods: {\r\n childTestNextTick() {\r\n this.nextTickCallback()\r\n this.nextTickPromise()\r\n },\r\n nextTickCallback() {\r\n const childText = uni.getElementById('child-text-callback')!\r\n this.dataInfo.titleForCallback = 'new title for callback'\r\n\r\n // #ifdef APP\r\n this.dataInfo.beforeNextTickCallbackTitle = childText.getAttribute('value')!\r\n // #endif\r\n // #ifndef APP\r\n // @ts-ignore\r\n this.dataInfo.beforeNextTickCallbackTitle = childText.textContent\r\n // #endif\n \r\n this.$nextTick(() => {\r\n // #ifdef APP\r\n this.dataInfo.afterNextTickCallbackTitle = childText.getAttribute('value')!\r\n // #endif\r\n // #ifndef APP\r\n // @ts-ignore\r\n this.dataInfo.afterNextTickCallbackTitle = childText.textContent\r\n // #endif\r\n })\r\n },\r\n nextTickPromise() {\r\n const childText = uni.getElementById('child-text-promise')!\r\n this.dataInfo.titleForPromise = 'new title for promise'\r\n\r\n // #ifdef APP\r\n this.dataInfo.beforeNextTickPromiseTitle = childText.getAttribute('value')!\r\n // #endif\r\n // #ifndef APP\r\n // @ts-ignore\r\n this.dataInfo.beforeNextTickPromiseTitle = childText.textContent\r\n // #endif\n \r\n this.$nextTick().then(() => {\r\n // #ifdef APP\r\n this.dataInfo.afterNextTickPromiseTitle = childText.getAttribute('value')!\r\n // #endif\r\n // #ifndef APP\r\n // @ts-ignore\r\n this.dataInfo.afterNextTickPromiseTitle = childText.textContent\r\n // #endif\r\n })\r\n }\r\n }\r\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/nextTick/child-options"},"nextTick_nextTick-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/nextTick/nextTick-composition.uvue","code":"```vue\n<template>\r\n <!-- #ifdef APP -->\r\n <scroll-view style=\"flex: 1\">\r\n <!-- #endif -->\r\n <view class=\"page\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text ref=\"text\">title:</text>\r\n <text id=\"page-text\">{{ dataInfo.title }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text ref=\"text\">before $nextTick title:</text>\r\n <text>{{ dataInfo.beforeNextTickTitle }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text ref=\"text\">after $nextTick title:</text>\r\n <text>{{ dataInfo.afterNextTickTitle }}</text>\r\n </view>\r\n <button id=\"page-test-next-tick-btn\" @click=\"pageTestNextTick\">\r\n page test $nextTick\r\n </button>\r\n <Child id=\"child-component\" />\r\n </view>\r\n <!-- #ifdef APP -->\r\n </scroll-view>\r\n <!-- #endif -->\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\n import Child from './child-composition.uvue'\r\n\r\n type DataInfo = {\r\n title : string\r\n beforeNextTickTitle : string\r\n afterNextTickTitle : string\r\n }\r\n\r\n const dataInfo = reactive({\r\n title: 'default title',\r\n beforeNextTickTitle: '',\r\n afterNextTickTitle: '',\r\n } as DataInfo)\r\n\r\n const testNextTick = async () => {\r\n const pageText = uni.getElementById('page-text')!\r\n dataInfo.title = 'new title'\r\n\r\n // #ifdef APP\r\n dataInfo.beforeNextTickTitle = pageText.getAttribute('value')!\r\n // #endif\r\n // #ifndef APP\r\n // @ts-ignore\r\n dataInfo.beforeNextTickTitle = pageText.textContent\r\n // #endif\n \r\n await nextTick()\n \r\n // #ifdef APP\r\n dataInfo.afterNextTickTitle = pageText.getAttribute('value')!\r\n // #endif\r\n // #ifndef APP\r\n // @ts-ignore\r\n dataInfo.afterNextTickTitle = pageText.textContent\r\n // #endif\r\n }\r\n const pageTestNextTick = () => {\r\n testNextTick()\r\n }\r\n\r\n defineExpose({\r\n dataInfo\r\n })\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/nextTick/nextTick-composition"},"nextTick_nextTick-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/nextTick/nextTick-options.uvue","code":"```vue\n<template>\r\n <!-- #ifdef APP -->\r\n <scroll-view style=\"flex: 1\">\r\n <!-- #endif -->\r\n <view class=\"page\">\r\n <view class=\"flex justify-between mb-10\">\r\n <text ref=\"text\">title for callback:</text>\r\n <text id=\"page-text-callback\">{{ dataInfo.titleForCallback }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text ref=\"text\">before $nextTick callback title:</text>\r\n <text>{{ dataInfo.beforeNextTickCallbackTitle }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text ref=\"text\">after $nextTick callback title:</text>\r\n <text>{{ dataInfo.afterNextTickCallbackTitle }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text ref=\"text\">title for promise:</text>\r\n <text id=\"page-text-promise\">{{ dataInfo.titleForPromise }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text ref=\"text\">before $nextTick promise title:</text>\r\n <text>{{ dataInfo.beforeNextTickPromiseTitle }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text ref=\"text\">after $nextTick promise title:</text>\r\n <text>{{ dataInfo.afterNextTickPromiseTitle }}</text>\r\n </view>\r\n <button id=\"page-test-next-tick-btn\" @click=\"pageTestNextTick\">page test $nextTick</button>\r\n <Child id=\"child-component\" />\r\n </view>\r\n <!-- #ifdef APP -->\r\n </scroll-view>\r\n <!-- #endif -->\r\n</template>\r\n\r\n<script lang=\"uts\">\r\n import Child from './child-options.uvue'\r\n \r\n type DataInfo = {\r\n titleForCallback : string\r\n beforeNextTickCallbackTitle : string\r\n afterNextTickCallbackTitle : string\r\n titleForPromise : string\r\n beforeNextTickPromiseTitle : string\r\n afterNextTickPromiseTitle : string\r\n }\r\n\r\n export default {\r\n components: {\r\n Child\r\n },\r\n data() {\r\n return {\r\n dataInfo: {\r\n titleForCallback: 'default title for callback',\r\n beforeNextTickCallbackTitle: '',\r\n afterNextTickCallbackTitle: '',\r\n titleForPromise: 'default title for promise',\r\n beforeNextTickPromiseTitle: '',\r\n afterNextTickPromiseTitle: '',\r\n } as DataInfo\r\n }\r\n },\r\n methods: {\r\n pageTestNextTick() {\r\n this.nextTickCallback()\r\n this.nextTickPromise()\r\n },\r\n nextTickCallback() {\r\n const pageText = uni.getElementById('page-text-callback')!\r\n this.dataInfo.titleForCallback = 'new title for callback'\r\n\r\n // #ifdef APP\r\n this.dataInfo.beforeNextTickCallbackTitle = pageText.getAttribute('value')!\r\n // #endif\r\n // #ifdef WEB\r\n // @ts-ignore\r\n this.dataInfo.beforeNextTickCallbackTitle = pageText.textContent\r\n // #endif\n \r\n this.$nextTick(() => {\r\n // #ifdef APP\r\n this.dataInfo.afterNextTickCallbackTitle = pageText.getAttribute('value')!\r\n // #endif\r\n // #ifdef WEB\r\n // @ts-ignore\r\n this.dataInfo.afterNextTickCallbackTitle = pageText.textContent\r\n // #endif\r\n })\r\n },\r\n nextTickPromise() {\r\n const pageText = uni.getElementById('page-text-promise')!\r\n this.dataInfo.titleForPromise = 'new title for promise'\r\n\r\n // #ifdef APP\r\n this.dataInfo.beforeNextTickPromiseTitle = pageText.getAttribute('value')!\r\n // #endif\n // #ifdef WEB\n // @ts-ignore\r\n this.dataInfo.beforeNextTickPromiseTitle = pageText.textContent\r\n // #endif\n \r\n this.$nextTick().then(() => {\r\n // #ifdef APP\r\n this.dataInfo.afterNextTickPromiseTitle = pageText.getAttribute('value')!\r\n // #endif\r\n // #ifdef WEB\r\n // @ts-ignore\r\n this.dataInfo.afterNextTickPromiseTitle = pageText.textContent\r\n // #endif\r\n })\r\n }\r\n }\r\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/nextTick/nextTick-options"},"options_options-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/options/options-composition.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>component name: </text>\r\n <text id=\"component-name\">{{ dataInfo.name }}</text>\r\n </view>\r\n <!-- #ifndef APP-ANDROID -->\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>custom key: </text>\r\n <text id=\"custom-key\">{{ dataInfo.customKey }}</text>\r\n </view>\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>mixin data str: </text>\r\n <text id=\"mixin-data-str\">{{ dataInfo.mixinDataStr }}</text>\r\n </view>\r\n <!-- #endif -->\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\nimport mixins from \"./mixins.uts\"\r\n\r\ndefineOptions({\r\n mixins: [mixins],\r\n name: \"$options\",\r\n _customKey: \"custom key\"\r\n})\r\n\r\ntype DataInfo = {\r\n name: string\r\n customKey: string\r\n mixinDataStr: string\r\n}\r\n\r\nconst dataInfo = reactive({\r\n name: \"\",\r\n customKey: \"\",\r\n mixinDataStr: \"\"\r\n} as DataInfo)\r\n\r\nonMounted(() => {\r\n const instance = getCurrentInstance()!.proxy!\r\n dataInfo.name = instance.$options.name!\r\n // #ifndef APP-ANDROID\r\n dataInfo.customKey = instance.$options._customKey\r\n dataInfo.mixinDataStr = instance.$options.data!({})!['str']\r\n // #endif\r\n})\r\n\r\ndefineExpose({\r\n dataInfo\r\n})\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/options/options-composition"},"options_options-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/options/options-options.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>component name: </text>\r\n <text id=\"component-name\">{{ dataInfo.name }}</text>\r\n </view>\r\n <!-- #ifndef APP-ANDROID -->\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>custom key: </text>\r\n <text id=\"custom-key\">{{ dataInfo.customKey }}</text>\r\n </view>\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>mixin data str: </text>\r\n <text id=\"mixin-data-str\">{{ dataInfo.mixinDataStr }}</text>\r\n </view>\r\n <!-- #endif -->\r\n </view>\r\n</template>\r\n\r\n<script lang=\"uts\">\r\nimport mixins from \"./mixins.uts\"\r\n\r\ntype DataInfo = {\r\n name: string\r\n customKey: string\r\n mixinDataStr: string\r\n}\r\n\r\nexport default {\r\n mixins: [mixins],\r\n name: \"$options\",\r\n _customKey: \"custom key\",\r\n data() {\r\n return {\r\n dataInfo: {\r\n name: \"\",\r\n customKey: \"\",\r\n mixinDataStr: \"\",\r\n } as DataInfo\r\n }\r\n },\r\n mounted() {\r\n this.dataInfo.name = this.$options.name!\r\n // #ifndef APP-ANDROID\r\n this.dataInfo.customKey = this.$options._customKey\r\n // @ts-ignore\r\n this.dataInfo.mixinDataStr = this.$options.data({})['str']\r\n // #endif\r\n },\r\n}\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/options/options-options"},"parent_child-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/parent/child-composition.uvue","code":"```vue\n<template>\r\n <view>\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>parent str: </text>\r\n <text id=\"parent-str\">{{ parentStr }}</text>\r\n </view>\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>parent num: </text>\r\n <text id=\"parent-num\">{{ parentNum }}</text>\r\n </view>\r\n <button @click=\"triggerParentFn\" id=\"trigger-parent-fn\">\r\n 调用父组件方法\r\n </button>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\n const parentStr = ref('')\r\n const parentNum = ref(0)\r\n\r\n const instance = getCurrentInstance()!.proxy!\r\n\r\n onMounted(() => {\r\n // #ifdef APP-ANDROID\r\n parentStr.value = (instance.$parent!.$exposed['str'] as Ref<string>).value\r\n // #endif\r\n // #ifndef APP-ANDROID\r\n parentStr.value = instance.$parent!['str'] as string\r\n // #endif\r\n })\r\n\r\n const triggerParentFn = () => {\r\n parentNum.value = instance.$parent!.$callMethod('callMethodByChild') as number\r\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/parent/child-composition"},"parent_child-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/parent/child-options.uvue","code":"```vue\n<template>\r\n <view>\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>parent str: </text>\r\n <text id=\"parent-str\">{{ parentStr }}</text>\r\n </view>\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>parent num: </text>\r\n <text id=\"parent-num\">{{ parentNum }}</text>\r\n </view>\r\n <button @click=\"triggerParentFn\" id=\"trigger-parent-fn\">\r\n 调用父组件方法\r\n </button>\r\n </view>\r\n</template>\r\n\r\n<script lang=\"uts\">\r\n export default {\r\n data() {\r\n return {\r\n parentStr: '',\r\n parentNum: 0\r\n }\r\n },\r\n mounted() {\r\n this.parentStr = this.$parent!.$data['str'] as string\r\n },\r\n methods: {\r\n triggerParentFn() {\r\n this.parentNum = this.$parent!.$callMethod('callMethodByChild') as number\r\n }\r\n }\r\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/parent/child-options"},"parent_parent-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/parent/parent-composition.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <child ref=\"childRef\" />\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\n import Child from './child-composition.uvue'\r\n\r\n const childRef = ref<ComponentPublicInstance | null>(null)\r\n const str = ref('parent str')\r\n const num = ref(1)\r\n\r\n const getNum = () : number => { return num.value }\r\n\r\n const instance = getCurrentInstance()!.proxy!\r\n\r\n const callMethodByChild = () : number => {\r\n const childComponent = instance.$refs['childRef'] as ComponentPublicInstance\r\n return childComponent.$parent!.$callMethod('getNum') as number\r\n }\r\n\r\n defineExpose({\r\n str,\r\n getNum,\r\n callMethodByChild\r\n })\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/parent/parent-composition"},"parent_parent-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/parent/parent-options.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <child ref='child' />\n </view>\n</template>\n\n<script lang='uts'>\nimport child from './child-options.uvue'\n\nexport default {\n components: {\n child\n },\n data() {\n return {\n str: \"parent str\",\n num: 1\n }\n },\n methods: {\n getNum() : number {\n return this.num\n },\n callMethodByChild(): number {\n const child = this.$refs['child'] as ComponentPublicInstance\n return child.$parent!.$callMethod('getNum') as number\n }\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/parent/parent-options"},"props_array-literal-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/props/array-literal-composition.uvue","code":"```vue\n<template>\r\n <view>\r\n <text class=\"mb-10 bold\">array literal</text>\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>str: </text>\r\n <text id=\"array-literal-str\">{{ str }}</text>\r\n </view>\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>num: </text>\r\n <text id=\"array-literal-num\">{{ num }}</text>\r\n </view>\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>bool: </text>\r\n <text id=\"array-literal-bool\">{{ bool }}</text>\r\n </view>\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>obj: </text>\r\n <text id=\"array-literal-obj\">{{ JSON.stringify(obj) }}</text>\r\n </view>\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>arr: </text>\r\n <text id=\"array-literal-arr\">{{ JSON.stringify(arr) }}</text>\r\n </view>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\nconst props = defineProps(['str', 'num', 'bool', 'obj', 'arr'])\n\nconsole.log('props.str: ',props.str);\nconsole.log('props.num: ',props.num);\nconsole.log('props.obj: ',props.obj);\nconsole.log('props.bool: ',props.bool);\nconsole.log('props.arr: ',props.arr);\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/props/array-literal-composition"},"props_array-literal-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/props/array-literal-options.uvue","code":"```vue\n<template>\r\n <view>\r\n <text class=\"mb-10 bold\">array literal</text>\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>str: </text>\r\n <text id=\"array-literal-str\">{{ str }}</text>\r\n </view>\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>num: </text>\r\n <text id=\"array-literal-num\">{{ num }}</text>\r\n </view>\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>bool: </text>\r\n <text id=\"array-literal-bool\">{{ bool }}</text>\r\n </view>\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>obj: </text>\r\n <text id=\"array-literal-obj\">{{ JSON.stringify(obj) }}</text>\r\n </view>\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>arr: </text>\r\n <text id=\"array-literal-arr\">{{ JSON.stringify(arr) }}</text>\r\n </view>\r\n </view>\r\n</template>\r\n\r\n<script lang=\"uts\">\r\nexport default {\r\n props: ['str', 'num', 'bool', 'obj', 'arr'],\r\n mounted() {\r\n console.log('this.$props.str: ',this.$props['str']);\r\n console.log('this.$props.num: ',this.$props['num']);\r\n console.log('this.$props.bool: ',this.$props['bool']);\r\n console.log('this.$props.arr: ',this.$props['arr']);\r\n console.log('this.$props.obj: ',this.$props['obj']);\r\n }\r\n};\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/props/array-literal-options"},"props_object-type-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/props/object-type-composition.uvue","code":"```vue\n<template>\r\n <view>\r\n <text class=\"mb-10 bold\">object type</text>\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>str: </text>\r\n <text id=\"object-type-str\">{{ str }}</text>\r\n </view>\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>num: </text>\r\n <text id=\"object-type-num\">{{ num }}</text>\r\n </view>\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>bool: </text>\r\n <text id=\"object-type-bool\">{{ bool }}</text>\r\n </view>\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>obj: </text>\r\n <text id=\"object-type-obj\">{{ JSON.stringify(obj) }}</text>\r\n </view>\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>arr: </text>\r\n <text id=\"object-type-arr\">{{ JSON.stringify(arr) }}</text>\r\n </view>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\ndefineProps({\r\n\tstr: {\r\n\t\ttype: String,\r\n\t\tdefault: 'default str'\r\n\t},\r\n\tnum: {\r\n\t\ttype: Number,\r\n\t\tdefault: 0\r\n\t},\r\n\tbool: {\r\n\t\ttype: Boolean,\r\n\t\tdefault: false\r\n\t},\r\n\tobj: {\r\n\t\ttype: UTSJSONObject,\r\n\t\tdefault: (): UTSJSONObject => ({})\r\n\t},\r\n\tarr: {\r\n\t\ttype: Array as PropType<string[]>,\r\n\t\tdefault: () : Array<string> => {\r\n\t\t\treturn []\r\n\t\t}\r\n\t}\r\n})\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/props/object-type-composition"},"props_object-type-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/props/object-type-options.uvue","code":"```vue\n<template>\r\n\t<view>\r\n <text class=\"mb-10 bold\">object type</text>\r\n\t\t<view class=\"mb-10 flex justify-between flex-row\">\r\n <text>str: </text>\r\n <text id=\"object-type-str\">{{ str }}</text>\r\n </view>\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>num: </text>\r\n <text id=\"object-type-num\">{{ num }}</text>\r\n </view>\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>bool: </text>\r\n <text id=\"object-type-bool\">{{ bool }}</text>\r\n </view>\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>obj: </text>\r\n <text id=\"object-type-obj\">{{ JSON.stringify(obj) }}</text>\r\n </view>\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>arr: </text>\r\n <text id=\"object-type-arr\">{{ JSON.stringify(arr) }}</text>\r\n </view>\r\n\t</view>\r\n</template>\r\n\r\n<script lang='uts'>\r\n\texport default {\r\n\t\tprops: {\r\n\t\t\tstr: {\r\n\t\t\t\ttype: String,\r\n\t\t\t\tdefault: 'default str'\r\n\t\t\t},\r\n\t\t\tnum: {\r\n\t\t\t\ttype: Number,\r\n\t\t\t\tdefault: 0\r\n\t\t\t},\r\n\t\t\tbool: {\r\n\t\t\t\ttype: Boolean,\r\n\t\t\t\tdefault: false\r\n\t\t\t},\r\n\t\t\tobj: {\r\n\t\t\t\ttype: UTSJSONObject,\r\n\t\t\t\tdefault: (): UTSJSONObject => ({})\r\n\t\t\t},\r\n\t\t\tarr: {\r\n\t\t\t\ttype: Array as PropType<string[]>,\r\n\t\t\t\tdefault: () : Array<string> => {\r\n\t\t\t\t\treturn []\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/props/object-type-options"},"props_props-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/props/props-composition.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <array-literal :str=\"str\" :num=\"num\" :bool=\"bool\" :obj=\"obj\" :arr=\"arr\" />\r\n <object-type str=\"str\" :num=\"num\" :bool=\"bool\" :obj=\"obj\" :arr=\"arr\" />\r\n <same-name-prop-default-value />\r\n <props-with-defaults />\r\n <!-- #ifdef APP-ANDROID -->\r\n <reference-types :list=\"[1,2,3]\" />\r\n <!-- #endif -->\r\n <!-- #ifndef APP-ANDROID -->\r\n <reference-types :list=\"['a','b','c']\" />\r\n <!-- #endif -->\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\n import ArrayLiteral from './array-literal-composition.uvue'\r\n import ObjectType from \"./object-type-composition.uvue\";\r\n import SameNamePropDefaultValue from \"./same-name-prop-default-value-composition.uvue\";\r\n import PropsWithDefaults from \"./props-with-defaults.uvue\";\r\n import ReferenceTypes from './reference-types-composition.uvue'\r\n\r\n const str = 'str'\r\n const num = 10\r\n const bool = true\r\n const obj = { age: 18 }\r\n const arr = ['a', 'b', 'c']\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/props/props-composition"},"props_props-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/props/props-options.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <array-literal :str=\"str\" :num=\"num\" :bool=\"bool\" :obj=\"obj\" :arr=\"arr\" />\r\n <object-type str=\"str\" :num=\"num\" :bool=\"bool\" :obj=\"obj\" :arr=\"arr\" />\r\n <same-name-prop-default-value />\r\n <props-with-defaults />\r\n <!-- #ifdef APP-ANDROID -->\r\n <reference-types :list=\"[1,2,3]\" />\r\n <!-- #endif -->\r\n <!-- #ifndef APP-ANDROID -->\r\n <reference-types :list=\"['a','b','c']\" />\r\n <!-- #endif -->\r\n </view>\r\n</template>\r\n\r\n<script lang=\"uts\">\r\n import ArrayLiteral from './array-literal-options.uvue'\r\n import ObjectType from \"./object-type-options.uvue\";\r\n import SameNamePropDefaultValue from \"./same-name-prop-default-value-options.uvue\";\r\n import PropsWithDefaults from \"./props-with-defaults.uvue\";\r\n import ReferenceTypes from './reference-types-options.uvue'\r\n\r\n export default {\r\n components: {\r\n ArrayLiteral,\r\n ObjectType,\r\n SameNamePropDefaultValue,\r\n PropsWithDefaults,\r\n ReferenceTypes\r\n },\r\n data() {\r\n return {\r\n str: 'str',\r\n num: 10,\r\n bool: true,\r\n obj: { age: 18 },\r\n arr: ['a', 'b', 'c']\r\n }\r\n },\r\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/props/props-options"},"props_props-with-defaults":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/props/props-with-defaults.uvue","code":"```vue\n<template>\n <view class='mt-10'>\n <text class=\"mb-10 bold\">withDefaults</text>\n <view class=\"mb-10 flex flex-row justify-between\">\n <text>msg</text>\n <text id=\"prop-msg\">{{ props.msg }}</text>\n </view>\n <view class=\"mb-10 flex flex-row justify-between\">\n <text>labels</text>\n <text id=\"prop-labels\">{{ JSON.stringify(props.labels) }}</text>\n </view>\n </view>\n</template>\n\n<script setup lang=\"uts\">\ninterface CustomProps {\n msg: string\n labels : string[]\n}\n\nconst props = withDefaults(defineProps<CustomProps>(), {\n msg: 'hello',\n labels: ():string[] => ['a', 'b']\n})\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/props/props-with-defaults"},"props_reference-types-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/props/reference-types-composition.uvue","code":"```vue\n<template>\r\n <view>\r\n <text class=\"mb-10 bold\">reference types</text>\r\n <text id=\"reference-type-list\">{{ JSON.stringify(list) }}</text>\r\n </view>\r\n</template>\r\n<script setup lang=\"uts\">\r\n import type { ReferenceTypesProps } from './types.uts'\r\n\r\n const props = withDefaults(defineProps<ReferenceTypesProps>(), {\r\n // #ifdef APP-ANDROID\r\n list: [] as number[]\r\n // #endif\r\n // #ifndef APP-ANDROID\r\n list: [] as string[]\r\n // #endif\r\n })\r\n console.log('reference types props', props)\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/props/reference-types-composition"},"props_reference-types-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/props/reference-types-options.uvue","code":"```vue\n<template>\r\n <view>\r\n <text class=\"mb-10 bold\">reference types</text>\r\n <text id=\"reference-type-list\">{{ JSON.stringify(list) }}</text>\r\n </view>\r\n</template>\r\n<script lang=\"uts\">\r\n export default {\r\n props: {\r\n list: {\r\n // #ifdef APP-ANDROID\r\n type: Array as PropType<number[]>,\r\n default: [] as number[]\r\n // #endif\r\n // #ifndef APP-ANDROID\r\n type: Array as PropType<string[]>,\r\n default: [] as string[]\r\n // #endif\r\n }\r\n },\r\n onReady() {\r\n console.log('reference types props', this.$props)\r\n }\r\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/props/reference-types-options"},"props_same-name-prop-default-value-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/props/same-name-prop-default-value-composition.uvue","code":"```vue\n<template>\r\n <view>\r\n <text class=\"mb-10 bold\">same name prop with default value</text>\r\n <view class=\"flex justify-between flex-row\">\r\n <text>arr: </text>\r\n <text id=\"same-name-prop-default-value-arr\">{{\r\n JSON.stringify(arr)\r\n }}</text>\r\n </view>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\nimport type { PropType } from 'vue'\r\n\r\ndefineProps({\r\n arr: {\r\n type: Array as PropType<number[]>,\r\n default: () : Array<number> => {\r\n return [1, 2, 3]\r\n }\r\n }\r\n})\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/props/same-name-prop-default-value-composition"},"props_same-name-prop-default-value-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/props/same-name-prop-default-value-options.uvue","code":"```vue\n<template>\r\n <view>\r\n <text class=\"mb-10 bold\">same name prop with default value</text>\r\n <view class=\"flex justify-between flex-row\">\r\n <text>arr: </text>\r\n <text id=\"same-name-prop-default-value-arr\">{{ JSON.stringify(arr) }}</text>\r\n </view>\r\n </view>\r\n</template>\r\n\r\n<script lang=\"uts\">\r\n export default {\r\n props: {\r\n arr: {\r\n type: Array as PropType<number[]>,\r\n default: () : Array<number> => {\r\n return [1, 2, 3]\r\n }\r\n }\r\n }\r\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/props/same-name-prop-default-value-options"},"provide_provide-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/provide/provide-composition.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <inject-comp />\n </view>\n</template>\n\n<script setup lang=\"uts\">\nimport InjectComp from '../inject/inject-composition.uvue';\n\nprovide('msg', 'hello');\nprovide('num', 0);\nprovide('obj', { a: 1 });\nprovide('arr', [1, 2, 3]);\nprovide('fn', () : string => 'hello');\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/provide/provide-composition"},"provide_provide-options-1":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/provide/provide-options-1.uvue","code":"```vue\n<template>\n <!-- #ifdef APP -->\n <scroll-view style=\"flex: 1\">\n <!-- #endif -->\n <view class=\"page\">\n <text>provide page</text>\n <button class=\"mt-10\" @click=\"goProvidePage2\">\n 跳转函数方式定义 provide 示例\n </button>\n <ComponentForInject />\n </view>\n <!-- #ifdef APP -->\n </scroll-view>\n <!-- #endif -->\n</template>\n\n<script lang=\"uts\">\nimport ComponentForInject from '../inject/inject-options-1.uvue'\n\nexport default {\n components: {\n ComponentForInject\n },\n data(){\n return {\n title: '字面量方式定义 provide page title',\n obj: {\n title: 'data obj.title',\n content: 'data obj.content'\n },\n }\n },\n provide: {\n providePageStr: '字面量方式定义 provide page str',\n providePageNum: 1,\n providePageBool: true,\n providePageObject: {\n title: '字面量方式定义 provide page object title',\n content: '字面量方式定义 provide page object content'\n },\n providePageArr: ['字面量方式定义 provide page arr'],\n providePageMap: new Map<string, string>([['key', '字面量方式定义 provide page map']]),\n providePageSet: new Set<string>(['字面量方式定义 provide page set']),\n },\n methods: {\n goProvidePage2(){\n uni.navigateTo({\n url: '/pages/component-instance/provide/provide-options-2'\n })\n }\n },\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/provide/provide-options-1"},"provide_provide-options-2":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/provide/provide-options-2.uvue","code":"```vue\n<template>\n <!-- #ifdef APP -->\n <scroll-view style=\"flex: 1\">\n <!-- #endif -->\n <view class=\"page\">\n <text>provide page 2</text>\n <ComponentForInject />\n </view>\n <!-- #ifdef APP -->\n </scroll-view>\n <!-- #endif -->\n</template>\n\n<script lang=\"uts\">\nimport ComponentForInject from '../inject/inject-options-2.uvue'\n\nexport default {\n components: {\n ComponentForInject\n },\n data(){\n return {\n title: '函数方式定义 provide page title'\n }\n },\n provide(){\n return {\n providePageTitle: this.title,\n providePageStr: '函数方式定义 provide page str',\n providePageNum: 2,\n providePageBool: true,\n providePageObject: {\n title: '函数方式定义 provide page object title',\n content: '函数方式定义 provide page object content'\n },\n providePageArr: ['函数方式定义 provide page arr'],\n providePageMap: new Map<string, string>([['key', '函数方式定义 provide page map']]),\n providePageSet: new Set<string>(['函数方式定义 provide page set']),\n }\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/provide/provide-options-2"},"refs_child-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/refs/child-composition.uvue","code":"```vue\n<script setup lang=\"uts\">\nconst value = ref<string>('child value')\n</script>\n\n<template>\n <text>{{ value }}</text>\n</template>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/refs/child-composition"},"refs_child-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/refs/child-options.uvue","code":"```vue\n<script>\nexport default {\n data() {\n return {\n value: 'child value'\n }\n }\n}\n</script>\n\n<template>\n <text>{{ value }}</text>\n</template>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/refs/child-options"},"refs_refs-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/refs/refs-composition.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <view class=\"row\">\n <text>NodeRef: </text>\n <text ref=\"nodeRef\">{{ dataInfo.existRef }}</text>\n </view>\n <view class=\"row\">\n <text>childRef:</text>\n <text>{{ dataInfo.existChildRef }}</text>\n </view>\n <view class=\"row\">\n <text>existTextItems:</text>\n <text>{{ dataInfo.existTextItems }}</text>\n </view>\n <view>\n <text v-for=\"item in dataInfo.textItemsExpectNum\" ref=\"textItems\" :key=\"item\">{{\n item\n }}</text>\n </view>\n <child class=\"mt-10\" ref=\"childRef\">ComponentRef</child>\n </view>\n</template>\n\n<script setup lang=\"uts\">\nimport Child from './child-composition.uvue'\n\ntype DataInfo = {\n existRef: boolean\n existChildRef: boolean\n textItemsExpectNum: number\n existTextItems: boolean\n}\n\nconst dataInfo = reactive<DataInfo>({\n existRef: false,\n existChildRef: false,\n textItemsExpectNum: 3,\n existTextItems: false\n})\n\nconst nodeRef = ref<UniElement | null>(null)\nconst childRef = ref<UniElement | null>(null)\nconst textItems = ref<UniElement[] | null>(null)\n\nonReady(() => {\n dataInfo.existRef = nodeRef.value !== null\n dataInfo.existChildRef = childRef.value !== null\n dataInfo.existTextItems = textItems.value?.length === dataInfo.textItemsExpectNum\n})\n\ndefineExpose({\n dataInfo\n})\n</script>\n\n<style>\n.row {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n margin-bottom: 10px;\n}\n</style>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/refs/refs-composition"},"refs_refs-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/refs/refs-options.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <view class=\"row\">\n <text>NodeRef: </text>\n <text ref=\"node\">{{ dataInfo.existRef }}</text>\n </view>\n <view class=\"row\">\n <text>childRef:</text>\n <text>{{ dataInfo.existChildRef }}</text>\n </view>\n <view class=\"row\">\n <text>existTextItems:</text>\n <text>{{ dataInfo.existTextItems }}</text>\n </view>\n <view>\n <text v-for=\"item in dataInfo.textItemsExpectNum\" ref=\"textItems\" :key=\"item\">{{\n item\n }}</text>\n </view>\n <child class=\"mt-10\" ref=\"childRef\">ComponentRef</child>\n </view>\n</template>\n\n<script lang=\"uts\">\nimport child from './child-options.uvue'\n\ntype DataInfo = {\n existRef: boolean\n existChildRef: boolean\n textItemsExpectNum: number\n existTextItems: boolean\n}\nexport default {\n components: {\n child\n },\n data() {\n return {\n dataInfo: {\n existRef: false,\n existChildRef: false,\n textItemsExpectNum: 3,\n existTextItems: false\n } as DataInfo\n }\n },\n onReady() {\n this.dataInfo.existRef = this.$refs['node'] !== null\n this.dataInfo.existChildRef = this.$refs['childRef'] !== null\n const textItems = this.$refs['textItems'] as Array<UniElement>\n this.dataInfo.existTextItems = textItems.length === this.dataInfo.textItemsExpectNum\n }\n}\n</script>\n\n<style>\n.row {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n margin-bottom: 10px;\n}\n</style>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/refs/refs-options"},"root_child-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/root/child-composition.uvue","code":"```vue\n<template>\n <view class=\"flex justify-between flex-row\">\n <text>root str in parent component: </text>\n <text id=\"root-str-child\">{{ rootStr }}</text>\n </view>\n</template>\n\n<script setup lang=\"uts\">\nconst str = ref('child component str')\nconst rootStr = ref('')\n\nonMounted(() => {\n const instance = getCurrentInstance()!.proxy!\n // #ifdef APP-ANDROID\n rootStr.value = (instance.$root!.$exposed['str'] as Ref<string>).value as string\n // #endif\n // #ifndef APP-ANDROID\n rootStr.value = instance.$root!['str'] as string\n // #endif\n})\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/root/child-composition"},"root_child-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/root/child-options.uvue","code":"```vue\n<template>\n <view class=\"flex justify-between flex-row\">\n <text>root str in parent component: </text>\n <text id=\"root-str-child\">{{ rootStr }}</text>\n </view>\n</template>\n\n<script lang=\"uts\">\nexport default {\n data () {\n return {\n str: 'child component str',\n rootStr: ''\n }\n },\n mounted() {\n this.rootStr = this.$root!.$data['str'] as string\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/root/child-options"},"root_root-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/root/root-composition.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>root str in parent component: </text>\r\n <text id=\"root-str-parent\">{{ rootStr }}</text>\r\n </view>\r\n <Child />\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\n import Child from './child-composition.uvue'\r\n\r\n const str = ref('root component str')\r\n const rootStr = ref('')\r\n\r\n onReady(() => {\r\n const instance = getCurrentInstance()!.proxy!\n // TODO: 确认 android 与 ios 的差异, ios 与标准 vue 相同\n // #ifdef APP-ANDROID\r\n rootStr.value = (instance.$root!.$exposed['str'] as Ref<string>).value as string\r\n // #endif\r\n // #ifndef APP-ANDROID\r\n rootStr.value = instance.$root!['str'] as string\r\n // #endif\r\n })\r\n\r\n defineExpose({\r\n str\r\n })\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/root/root-composition"},"root_root-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/root/root-options.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <view class=\"mb-10 flex justify-between flex-row\">\n <text>root str in parent component: </text>\n <text id=\"root-str-parent\">{{ rootStr }}</text>\n </view>\n <child />\n </view>\n</template>\n\n<script lang=\"uts\">\nimport Child from './child-options.uvue'\n\nexport default {\n components: {Child},\n data () {\n return {\n str: 'root component str',\n rootStr: ''\n }\n },\n onReady() {\n this.rootStr = this.$root!.$data['str'] as string\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/root/root-options"},"setup-function_Foo":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/setup-function/Foo.uvue","code":"```vue\n<template>\r\n <view>\r\n <text class=\"mt-10\">this is component Foo for setup function</text>\r\n <slot></slot>\r\n <view class=\"flex justify-between flex-row mt-10\">\r\n <text>hasDefaultSlot:</text>\r\n <text id=\"has-default-slot\">{{ hasDefaultSlot }}</text>\r\n </view>\r\n </view>\r\n</template>\r\n\r\n<script lang=\"uts\">\r\nexport default {\r\n\tsetup(_, context) {\r\n\t\tconst hasDefaultSlot = context.slots['default'] !== null\r\n\t\treturn {\r\n\t\t\thasDefaultSlot\r\n\t\t}\r\n\t}\r\n}\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/setup-function/Foo"},"setup-function_RenderFunction":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/setup-function/RenderFunction.uvue","code":"```vue\n<template>\r\n\t<view class=\"mt-10\">\r\n\t\t<text>this is Render Function component</text>\r\n\t</view>\r\n</template>\r\n\r\n<script lang='uts'>\r\n\texport default {\r\n\t\tprops: {\r\n\t\t\tstr: {\r\n\t\t\t\ttype: String,\r\n\t\t\t},\r\n\t\t\tcount: {\r\n\t\t\t\ttype: Number,\r\n\t\t\t},\r\n\t\t\tobj: {\r\n\t\t\t\ttype: UTSJSONObject,\r\n\t\t\t}\r\n\t\t},\r\n\t\temits: ['compUpdateObj'],\r\n\t\tsetup(props, context) {\r\n\t\t\tconst compUpdateObj = () => {\r\n\t\t\t\tcontext.emit('compUpdateObj')\r\n\t\t\t}\r\n\t\t\t// TODO: 待支持 expose 后补充示例\r\n\t\t\t// const compCount = ref(0)\r\n\t\t\t// const compIncrement = () => {\r\n\t\t\t// \tcompCount.value++\r\n\t\t\t// }\r\n\t\t\t// context.expose({compCount, compIncrement})\r\n\t\t\treturn () : VNode => h('view', { class: 'mt-10' }, [\r\n\t\t\t\th('text', { class: 'mt-10' }, 'this is render function component text with h function'),\r\n\t\t\t\t// h('text', { class: 'mt-10' }, `compCount: ${compCount.value}`),\r\n\t\t\t\th('text', { id: 'props-str', class: 'mt-10' }, `props.str: ${props.str}`),\r\n\t\t\t\th('text', { id: 'props-count', class: 'mt-10' }, `props.count: ${props.count}`),\r\n\t\t\t\th('text', { id: 'props-obj-str', class: 'mt-10' }, `props.obj['str']: ${props.obj!['str']}`),\r\n\t\t\t\th('text', { id: 'props-obj-num', class: 'mt-10' }, `props.obj['num']: ${props.obj!['num']}`),\r\n\t\t\t\th('text', { id: 'props-obj-bool', class: 'mt-10' }, `props.obj['bool']: ${props.obj!['bool']}`),\r\n\t\t\t\th('button', { id: 'comp-update-obj-btn', class: 'mt-10', onClick: compUpdateObj }, 'comp update obj'),\r\n\t\t\t\th('text', { id: 'context-attrs-is-show', class: 'mt-10' }, `context.attrs.isShow: ${context.attrs['isShow']}`),\r\n\t\t\t])\r\n\t\t}\r\n\t}\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/setup-function/RenderFunction"},"setup-function_setup-function":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/setup-function/setup-function.uvue","code":"```vue\n<template>\n <!-- #ifdef APP -->\n <scroll-view style=\"flex: 1\">\n <!-- #endif -->\n <view class=\"page\">\n <view class=\"flex justify-between flex-row mt-10\">\n <text>str:</text>\n <text id=\"str\">{{ str }}</text>\n </view>\n <view class=\"flex justify-between flex-row mt-10\">\n <text>num:</text>\n <text id=\"num\">{{ num }}</text>\n </view>\n <view class=\"flex justify-between flex-row mt-10\">\n <text>bool:</text>\n <text id=\"bool\">{{ bool }}</text>\n </view>\n <view class=\"flex justify-between flex-row mt-10\">\n <text>count:</text>\n <text id=\"count\">{{ count }}</text>\n </view>\n <button class=\"mt-10\" id=\"increment-btn\" @click=\"increment\">\n increment count\n </button>\n <view class=\"flex justify-between flex-row mt-10\">\n <text>obj.str:</text>\n <text id=\"obj-str\">{{ obj['str'] }}</text>\n </view>\n <view class=\"flex justify-between flex-row mt-10\">\n <text>obj.num:</text>\n <text id=\"obj-num\">{{ obj['num'] }}</text>\n </view>\n <view class=\"flex justify-between flex-row mt-10\">\n <text>obj.bool:</text>\n <text id=\"obj-bool\">{{ obj['bool'] }}</text>\n </view>\n <button class=\"mt-10\" id=\"update-obj-btn\" @click=\"updateObj\">\n update obj\n </button>\n <!-- #ifdef APP -->\n <RenderFunction\n :str=\"str\"\n :count=\"count\"\n :obj=\"obj\"\n @compUpdateObj=\"compUpdateObj\"\n :isShow=\"true\" />\n <!-- #endif -->\n <Foo>\n <text class=\"mt-10\" id=\"default-slot-in-foo\">default slot in Foo</text>\n </Foo>\n </view>\n <!-- #ifdef APP -->\n </scroll-view>\n <!-- #endif -->\n</template>\n\n<script lang=\"uts\">\n// #ifdef APP\nimport RenderFunction from './RenderFunction.uvue'\n// #endif\nimport Foo from './Foo.uvue'\nexport default {\n components: {\n // #ifdef APP\n RenderFunction,\n // #endif\n Foo\n },\n setup() {\n const count = ref(0)\n // 函数只能通过声明变量,赋值函数的方式,不支持 function xxx(){}\n const increment = () => { count.value++ }\n const obj = reactive({\n str: 'obj default str',\n num: 0,\n bool: false,\n })\n const updateObj = () => {\n obj['str'] = 'obj new str'\n obj['num'] = 100\n obj['bool'] = true\n }\n const compUpdateObj = () => {\n obj['str'] = 'obj new str by comp update'\n obj['num'] = 200\n obj['bool'] = true\n }\n return {\n str: 'default str',\n num: 0,\n bool: false,\n count,\n increment,\n obj,\n updateObj,\n compUpdateObj\n }\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/setup-function/setup-function"},"slots_slot-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/slots/slot-composition.uvue","code":"```vue\n<template>\n <view>\n <slot name=\"header\"></slot>\n <slot name=\"footer\"></slot>\n <slot></slot>\n </view>\n</template>\n\n<script setup lang=\"uts\">\nconst slots = useSlots()\n\nconst hasSlots = (): boolean => {\n const header = slots['header']\n const footer = slots['footer']\n const def = slots['default']\n\n return header !== null && footer !== null && def !== null\n}\n\ndefineExpose({\n hasSlots\n})\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/slots/slot-composition"},"slots_slot-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/slots/slot-options.uvue","code":"```vue\n<template>\n <view>\n <slot name=\"header\"></slot>\n <slot name=\"footer\"></slot>\n <slot></slot>\n </view>\n</template>\n\n<script lang=\"uts\">\nexport default {\n mounted() {\n console.log(this.hasSlots())\n },\n methods: {\n hasSlots() : boolean {\n const header = this.$slots['header']\n const footer = this.$slots['footer']\n const def = this.$slots['default']\n\n return header !== null && footer !== null && def !== null\n }\n }\n}\n</script>\n\n<style scoped></style>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/slots/slot-options"},"slots_slots-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/slots/slots-composition.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <SlotComp class=\"slot-comp\">\n <template v-slot:header>header</template>\n <template v-slot:default>default</template>\n <template v-slot:footer>footer</template>\n </SlotComp>\n </view>\n</template>\n\n<script setup lang=\"uts\">\n import SlotComp from './slot-composition.uvue'\n</script>\n\n<style>\n .row {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n margin-bottom: 10px;\n }\n</style>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/slots/slots-composition"},"slots_slots-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/slots/slots-options.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <slot-comp class=\"slot-comp\">\n <template v-slot:header>header</template>\n <template v-slot:default>default</template>\n <template v-slot:footer>footer</template>\n </slot-comp>\n </view>\n</template>\n\n<script lang=\"uts\">\n import slot from './slot-options.uvue'\n\n export default {\n components: {\n slotComp: slot\n }\n }\n</script>\n\n<style>\n .row {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n margin-bottom: 10px;\n }\n</style>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/slots/slots-options"},"mixins_components_ChildMixinComp1":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/mixins/components/ChildMixinComp1.uvue","code":"```vue\n<template>\n <text class=\"mt-10 child-mixin-component-1\">{{ title }}</text>\n</template>\n\n<script lang=\"uts\">\nexport default {\n data(){\n return {\n title: 'child mixin component 1'\n }\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/mixins/components/ChildMixinComp1"},"mixins_components_ChildMixinComp2":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/mixins/components/ChildMixinComp2.uvue","code":"```vue\n<template>\n <text class=\"mt-10 child-mixin-component-2\">{{ title }}</text>\n</template>\n\n<script lang=\"uts\">\nexport default {\n data(){\n return {\n title: 'child mixin component 2'\n }\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/mixins/components/ChildMixinComp2"},"mixins_components_Comp1":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/mixins/components/Comp1.uvue","code":"```vue\n<template>\n <view class=\"mt-10\" ref=\"mixin-comp-root\">\n <text class=\"bold\">Comp1: inheritAttrs: false</text>\n <text class=\"mt-10\" style=\"color:#ccc;\"\n >rootElementTitle should be null</text\n >\n <text class=\"mt-10 root-element-title-1\">rootElementTitle: {{ rootElementTitle }}</text>\n <!-- #ifdef APP -->\n <text class=\"mt-10 bold\">trigger emitter:</text>\n <button class=\"mt-10 global-mixin-emit-1\" @click=\"triggerEmitter('globalMixinEmit1')\">\n trigger globalMixinEmit1\n </button>\n <button\n class=\"mt-10 global-child-mixin-emit-1\"\n @click=\"triggerEmitter('globalChildMixinEmit1')\">\n trigger globalChildMixinEmit1\n </button>\n <button class=\"mt-10 global-mixin-emit-2\" @click=\"triggerEmitter('globalMixinEmit2')\">\n trigger globalMixinEmit2\n </button>\n <button\n class=\"mt-10 global-child-mixin-emit-2\"\n @click=\"triggerEmitter('globalChildMixinEmit2')\">\n trigger globalChildMixinEmit2\n </button>\n <button class=\"mt-10 mixin-emit\" @click=\"triggerEmitter('mixinEmit')\">\n trigger mixinEmit\n </button>\n <button class=\"mt-10 child-mixin-emit\" @click=\"triggerEmitter('childMixinEmit')\">\n trigger childMixinEmit\n </button>\n <MixinComp />\n <!-- #endif -->\n </view>\n</template>\n\n<script lang=\"uts\">\nexport default {\n mixins:[{\n mixins: [{\n emits: ['childMixinEmit']\n }],\n inheritAttrs: false,\n emits:['mixinEmit']\n }],\n data(){\n return {\n rootElementTitle: '' as string | null\n }\n },\n mounted(){\n const rootElement = this.$refs['mixin-comp-root'] as UniElement\n this.rootElementTitle = JSON.stringify(rootElement.getAttribute('title'))\n },\n methods: {\n triggerEmitter(emit: string){\n this.$emit(emit, emit)\n },\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/mixins/components/Comp1"},"mixins_components_Comp2":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/mixins/components/Comp2.uvue","code":"```vue\n<template>\r\n <view class=\"mt-10\" ref=\"mixin-comp-root\">\r\n <text class=\"bold\">Comp2: inheritAttrs: true</text>\r\n <text class=\"mt-10\" style=\"color:#ccc;\">rootElementTitle should not be null</text>\r\n <text class=\"mt-10 root-element-title-2\">rootElementTitle: {{ rootElementTitle }}</text>\r\n <text class=\"mt-10\">{{ namesakeMixinProp }}</text>\r\n <text class=\"mt-10\">{{ namesakeMixinDataMsg }}</text>\r\n <text class=\"mt-10\">{{ namesakeMixinComputed }}</text>\r\n <text class=\"mt-10 mixin-watch-msg\">{{ mixinWatchMsg }}</text>\r\n <text class=\"mt-10\">{{ namesakeMixinMethod() }}</text>\r\n <button class=\"mt-10\" @click=\"changeGlobalMixinOnloadMsg1\">\r\n change globalMixinOnloadMsg1\r\n </button>\r\n <MixinComp />\r\n </view>\r\n</template>\r\n\r\n<script lang=\"uts\">\r\n import CompForComp from './CompForComp.uvue'\r\n\r\n export default {\r\n mixins: [{\r\n inheritAttrs: true,\r\n }],\r\n components: { MixinComp: CompForComp },\r\n props: {\r\n namesakeMixinProp: {\r\n type: String,\r\n default: '组件内部的同名 props'\r\n }\r\n },\r\n data() {\r\n return {\r\n namesakeMixinDataMsg: '组件内部的同名 data',\r\n mixinWatchMsg: '',\r\n rootElementTitle: '' as string | null\r\n }\r\n },\r\n computed: {\r\n namesakeMixinComputed() : string {\r\n const res = '组件内部的同名 computed'\r\n console.log(res)\r\n return res\r\n }\r\n },\r\n mounted() {\r\n const rootElement = this.$refs['mixin-comp-root'] as UniElement\r\n this.rootElementTitle = rootElement.getAttribute('title')\r\n },\r\n watch: {\r\n globalMixinOnloadMsg1(newVal : string) {\r\n this.mixinWatchMsg = `组件内部定义的 watch, 更新后的 globalMixinOnloadMsg1: ${newVal}`\r\n console.log(this.mixinWatchMsg)\r\n },\r\n },\r\n methods: {\r\n namesakeMixinMethod() : string {\r\n const res = '组件内部的同名 method'\r\n console.log(res)\r\n return res\r\n },\r\n changeGlobalMixinOnloadMsg1() {\r\n // #ifdef WEB\r\n (this.globalMixinOnloadMsg1 as string) = 'new globalMixinOnloadMsg1 changed in comp2'\r\n // #endif\r\n // #ifndef WEB\r\n this.globalMixinOnloadMsg1 = 'new globalMixinOnloadMsg1 changed in comp2'\r\n // #endif\r\n }\r\n }\r\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/mixins/components/Comp2"},"mixins_components_CompForComp":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/mixins/components/CompForComp.uvue","code":"```vue\n<template>\n <text class=\"mt-10 component-for-component\">{{ title }}</text>\n</template>\n\n<script lang=\"uts\">\nexport default {\n data(){\n return {\n title: 'component for component'\n }\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/mixins/components/CompForComp"},"mixins_components_CompForPage":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/mixins/components/CompForPage.uvue","code":"```vue\n<template>\n <text class=\"mt-10 component-for-page\">{{ title }}</text>\n</template>\n\n<script lang=\"uts\">\nexport default {\n data(){\n return {\n title: 'component for page'\n }\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/mixins/components/CompForPage"},"mixins_components_GlobalChildMixinComp1":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/mixins/components/GlobalChildMixinComp1.uvue","code":"```vue\n<template>\n <text class=\"mt-10 global-child-mixin-component-1\">{{ title }}</text>\n</template>\n\n<script lang=\"uts\">\nexport default {\n data(){\n return {\n title: 'global child mixin component 1'\n }\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/mixins/components/GlobalChildMixinComp1"},"mixins_components_GlobalChildMixinComp2":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/mixins/components/GlobalChildMixinComp2.uvue","code":"```vue\n<template>\n <text class=\"mt-10 global-child-mixin-component-2\">{{ title }}</text>\n</template>\n\n<script lang=\"uts\">\nexport default {\n data(){\n return {\n title: 'global child mixin component 2'\n }\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/mixins/components/GlobalChildMixinComp2"},"mixins_components_GlobalMixinComp1":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/mixins/components/GlobalMixinComp1.uvue","code":"```vue\n<template>\n <text class=\"mt-10 global-mixin-component-1\">{{ title }}</text>\n</template>\n\n<script lang=\"uts\">\nexport default {\n data(){\n return {\n title: 'global mixin component 1'\n }\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/mixins/components/GlobalMixinComp1"},"mixins_components_GlobalMixinComp2":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/mixins/components/GlobalMixinComp2.uvue","code":"```vue\n<template>\n <text class=\"mt-10 global-mixin-component-2\">{{ title }}</text>\n</template>\n\n<script lang=\"uts\">\nexport default {\n data(){\n return {\n title: 'global mixin component 2'\n }\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/mixins/components/GlobalMixinComp2"},"mixins_components_MixinComp1":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/mixins/components/MixinComp1.uvue","code":"```vue\n<template>\n <text class=\"mt-10 mixin-component-1\">{{ title }}</text>\n</template>\n\n<script lang=\"uts\">\nexport default {\n data(){\n return {\n title: 'mixin component 1'\n }\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/mixins/components/MixinComp1"},"mixins_components_MixinComp2":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/mixins/components/MixinComp2.uvue","code":"```vue\n<template>\n <text class=\"mt-10 mixin-component-2\">{{ title }}</text>\n</template>\n\n<script lang=\"uts\">\nexport default {\n data(){\n return {\n title: 'mixin component 2'\n }\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/mixins/components/MixinComp2"},"mixins_components_MixinCompForChildMixin":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/mixins/components/MixinCompForChildMixin.uvue","code":"```vue\n<template>\n <text class=\"mt-10 mixin-component-for-child-mixin\">{{ title }}</text>\n</template>\n\n<script lang=\"uts\">\nexport default {\n data(){\n return {\n title: 'mixin component for child mixin'\n }\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/mixins/components/MixinCompForChildMixin"},"mixins_components_MixinCompForGlobalChildMixin":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/mixins/components/MixinCompForGlobalChildMixin.uvue","code":"```vue\n<template>\n <text class=\"mt-10 mixin-component-for-global-child-mixin\">{{ title }}</text>\n</template>\n\n<script lang=\"uts\">\nexport default {\n data(){\n return {\n title: 'mixin component for global child mixin'\n }\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/mixins/components/MixinCompForGlobalChildMixin"},"mixins_components_MixinCompForGlobalMixin":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/mixins/components/MixinCompForGlobalMixin.uvue","code":"```vue\n<template>\n <text class=\"mt-10 mixin-component-for-global-mixin\">{{ title }}</text>\n</template>\n\n<script lang=\"uts\">\nexport default {\n data(){\n return {\n title: 'mixin component for global mixin'\n }\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/mixins/components/MixinCompForGlobalMixin"},"mixins_components_MixinCompForMixin":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/component-instance/mixins/components/MixinCompForMixin.uvue","code":"```vue\n<template>\n <text class=\"mt-10 mixin-component-for-mixin\">{{ title }}</text>\n</template>\n\n<script lang=\"uts\">\nexport default {\n data(){\n return {\n title: 'mixin component for mixin'\n }\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/component-instance/mixins/components/MixinCompForMixin"}},"E_directive":{"v-bind_Foo-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-bind/Foo-composition.uvue","code":"```vue\n<template>\r\n <view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>props title:</text>\r\n <text id=\"foo-props-title\">{{ title }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>props num:</text>\r\n <text id=\"foo-props-num\">{{ num }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>props obj['name']:</text>\r\n <text id=\"foo-props-obj-name\">{{ obj.name }}</text>\r\n </view>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\n import { FooPropsObj } from './type.uts'\r\n\r\n defineProps({\r\n title: {\r\n type: String,\r\n default: ''\r\n },\r\n num: {\r\n type: Number,\r\n default: 0\r\n },\r\n checked: {\r\n type: Boolean,\r\n default: false\r\n },\r\n obj: {\r\n type: Object as PropType<FooPropsObj>,\r\n default: {name: 'default name'} as FooPropsObj\r\n }\r\n })\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-bind/Foo-composition"},"v-bind_Foo-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-bind/Foo-options.uvue","code":"```vue\n<template>\r\n <view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>props title:</text>\r\n <text id='foo-props-title'>{{ title }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>props num:</text>\r\n <text id='foo-props-num'>{{ num }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>props obj['name']:</text>\r\n <text id='foo-props-obj-name'>{{ obj.name }}</text>\r\n </view>\r\n </view>\r\n</template>\r\n\r\n<script lang=\"uts\">\r\n import { FooPropsObj } from './type.uts'\r\n\r\n export default {\r\n props: {\r\n title: {\r\n type: String,\r\n default: ''\r\n },\r\n num: {\r\n type: Number,\r\n default: 0\r\n },\r\n checked: {\r\n type: Boolean,\r\n default: false\r\n },\r\n obj: {\r\n type: Object as PropType<FooPropsObj>,\r\n default: {name: 'default name'} as FooPropsObj\r\n }\r\n }\r\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-bind/Foo-options"},"v-bind_v-bind-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-bind/v-bind-composition.uvue","code":"```vue\n<template>\r\n<!-- #ifdef APP -->\r\n<scroll-view style=\"flex: 1\">\r\n <!-- #endif --> \r\n <view class=\"page\">\r\n <!-- v-bind attribute -->\r\n <button id=\"disabled-btn\" class=\"mb-10\" :disabled=\"true\">\r\n :disabled true\r\n </button>\r\n <button id=\"v-bind-disabled-btn\" class=\"mb-10\" v-bind:disabled=\"false\">\r\n v-bind:disabled false\r\n </button>\r\n\r\n <!-- v-bind style -->\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>bind object style fontSize:</text>\r\n <text id=\"bind-object-style\" :style=\"{ fontSize: dataInfo.fontSize }\">\r\n {{ dataInfo.fontSize }}\r\n </text>\r\n </view>\r\n <view id=\"bind-array-style\" class=\"mb-10 p-10\" :style=\"[dataInfo.backgroundColor, dataInfo.border]\">\r\n <view>bind arr style</view>\r\n <view class=\"my-10\">{{ dataInfo.backgroundColor }}</view>\r\n <view>{{ dataInfo.border }}</view>\r\n </view>\r\n\r\n <!-- v-bind props -->\r\n <Foo :title=\"dataInfo.fooProps.title\" :num=\"dataInfo.fooProps.num\" :obj=\"dataInfo.fooProps.obj\" />\r\n\r\n <!-- v-bind props -->\r\n <Foo checked />\r\n <!-- #ifndef MP -->\r\n <!-- 绑定对象 -->\r\n <Foo id=\"bindObj1\" v-bind=\"{ title: dataInfo.fooProps.title,num: dataInfo.fooProps.num,obj: dataInfo.fooProps.obj }\" />\r\n <!-- 绑定对象合并-->\r\n <Foo id=\"bindObj2\" v-bind=\"{ title: dataInfo.fooProps.title,num: dataInfo.fooProps.num,obj: dataInfo.fooProps.obj }\" title=\"foo title override\" />\r\n <!-- 绑定对象合并-->\r\n <Foo id=\"bindObj3\" title=\"foo\" v-bind=\"{ title: dataInfo.fooProps.title,num: dataInfo.fooProps.num,obj: dataInfo.fooProps.obj }\" />\r\n <!-- 绑定对象合并(UTSJSONObject)-->\r\n <Foo id=\"bindObj4\" v-bind=\"fooProps\" title=\"foo title(json) override\" />\r\n <!-- 绑定对象合并(UTSJSONObject)-->\r\n <Foo id=\"bindObj5\" title=\"foo\" v-bind=\"fooProps\" />\r\n <!-- #endif -->\r\n <!-- v-bind in style -->\r\n <!-- #ifdef WEB -->\r\n <view class=\"mb-10 v-bind-css\"></view>\r\n <!-- #endif -->\r\n </view>\r\n<!-- #ifdef APP -->\r\n</scroll-view>\r\n<!-- #endif --> \r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\n import Foo from './Foo-composition.uvue'\r\n import { FooProps, FooPropsObj } from './type.uts'\r\n\r\n type DataInfo = {\r\n fontSize : string\r\n backgroundColor : string\r\n border : string\r\n fooProps : FooProps\r\n vBindClassBackgroundColor : string,\r\n vBindClassRpxHeight : string,\r\n }\r\n\r\n const dataInfo = reactive({\r\n fontSize: '20px',\r\n backgroundColor: 'background-color: green',\r\n border: 'border: 2px solid red',\r\n fooProps: {\r\n title: 'foo title',\r\n num: 1,\r\n obj: {\r\n name: 'foo obj name',\r\n } as FooPropsObj\r\n },\r\n vBindClassBackgroundColor: 'red',\r\n vBindClassRpxHeight: '300rpx'\r\n } as DataInfo)\r\n \r\n const fooProps = reactive({\r\n title: 'foo title(json)',\r\n num: 2,\r\n })\r\n\r\n defineExpose({\r\n dataInfo\r\n })\r\n</script>\r\n\r\n<style>\r\n /* #ifdef WEB */\r\n .v-bind-css {\r\n background-color: v-bind(dataInfo.vBindClassBackgroundColor);\r\n height: v-bind(dataInfo.vBindClassRpxHeight);\r\n }\r\n /* #endif */\r\n</style>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-bind/v-bind-composition"},"v-bind_v-bind-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-bind/v-bind-options.uvue","code":"```vue\n<template>\r\n<!-- #ifdef APP -->\r\n<scroll-view style=\"flex: 1\">\r\n <!-- #endif -->\r\n <view class=\"page\">\r\n <!-- v-bind attribute -->\r\n <button id=\"disabled-btn\" class=\"mb-10\" :disabled=\"true\">:disabled true</button>\r\n <button id=\"v-bind-disabled-btn\" class=\"mb-10\" v-bind:disabled=\"false\">v-bind:disabled false</button>\r\n\r\n <!-- v-bind style -->\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>bind object style fontSize:</text>\r\n <text id=\"bind-object-style\" :style=\"{ fontSize: dataInfo.fontSize }\">\r\n {{ dataInfo.fontSize }}\r\n </text>\r\n </view>\r\n <view id=\"bind-array-style\" class=\"mb-10 p-10\" :style=\"[dataInfo.backgroundColor, dataInfo.border]\">\r\n <view>bind arr style</view>\r\n <view class=\"my-10\">{{ dataInfo.backgroundColor }}</view>\r\n <view>{{ dataInfo.border }}</view>\r\n </view>\r\n\r\n <!-- v-bind props -->\r\n <Foo :title=\"dataInfo.fooProps.title\" :num=\"dataInfo.fooProps.num\" :obj=\"dataInfo.fooProps.obj\" />\r\n\r\n <!-- v-bind props -->\r\n <Foo checked />\r\n \r\n <!-- #ifndef MP -->\r\n <!-- 绑定对象 -->\r\n <Foo v-bind=\"{ title: dataInfo.fooProps.title,num: dataInfo.fooProps.num,obj: dataInfo.fooProps.obj }\" />\r\n <Foo v-bind=\"fooProps\"/>\r\n <Foo id=\"bindObj1\" v-bind=\"{ title: dataInfo.fooProps.title,num: dataInfo.fooProps.num,obj: dataInfo.fooProps.obj }\" />\r\n <!-- 绑定对象合并 v-bind 在前 -->\r\n <Foo v-bind=\"{ title: dataInfo.fooProps.title,num: dataInfo.fooProps.num,obj: dataInfo.fooProps.obj }\" id=\"bindObj2\" :title=\"dataInfo.fooProps.title + ' override'\" />\r\n <!-- 绑定对象合并 v-bind 在后 -->\r\n <Foo id=\"bindObj3\" title=\"foo\" v-bind=\"{ title: dataInfo.fooProps.title,num: dataInfo.fooProps.num,obj: dataInfo.fooProps.obj }\" />\r\n <!-- 绑定对象合并 v-bind 在中间(UTSJSONObject)-->\r\n <Foo id=\"bindObj4\" v-bind=\"fooProps\" title=\"foo title(json) override\" />\r\n <!-- 绑定对象合并(UTSJSONObject)-->\r\n <Foo id=\"bindObj5\" title=\"foo\" v-bind=\"fooProps\" />\r\n <!-- #endif -->\r\n \r\n <!-- v-bind in style -->\r\n <!-- #ifdef WEB -->\r\n <view class=\"mb-10 v-bind-css\"></view>\r\n <!-- #endif -->\r\n </view>\r\n<!-- #ifdef APP -->\r\n</scroll-view>\r\n<!-- #endif -->\r\n</template>\r\n\r\n<script lang=\"uts\">\r\n import Foo from './Foo-options.uvue'\r\n import { FooProps, FooPropsObj } from './type.uts'\r\n\r\n type DataInfo = {\r\n fontSize : string\r\n backgroundColor : string\r\n border : string\r\n fooProps : FooProps\r\n vBindClassBackgroundColor : string\r\n vBindClassRpxHeight : string\r\n }\r\n\r\n export default {\r\n components: { Foo },\r\n data() {\r\n return {\r\n dataInfo: {\r\n fontSize: '20px',\r\n backgroundColor: 'background-color: green',\r\n border: 'border: 2px solid red',\r\n fooProps: {\r\n title: 'foo title',\r\n num: 1,\r\n obj: {\r\n name: 'foo obj name'\r\n } as FooPropsObj\r\n },\r\n vBindClassBackgroundColor: 'red',\r\n vBindClassRpxHeight: '300rpx'\r\n } as DataInfo,\r\n fooProps:{\r\n title: 'foo title(json)',\r\n num: 2,\r\n }\r\n }\r\n }\r\n }\r\n</script>\r\n\r\n<style>\r\n /* #ifdef WEB */\r\n .v-bind-css {\r\n background-color: v-bind(dataInfo.vBindClassBackgroundColor);\r\n height: v-bind(dataInfo.vBindClassRpxHeight);\r\n }\r\n /* #endif */\r\n</style>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-bind/v-bind-options"},"v-for_v-for-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-for/v-for-composition.uvue","code":"```vue\n<template>\r\n <!-- #ifdef APP -->\r\n <scroll-view style=\"flex: 1\">\r\n <!-- #endif -->\r\n <view class=\"page\">\r\n <text class=\"bold mb-10\">v-for number</text>\r\n <view class=\"mb-10\" v-for=\"item in 3\" :key=\"item\">\r\n <text :id=\"`number-${item}`\">{{ item }}</text>\r\n </view>\n \n <view class=\"mb-10\" v-for=\"item in utsNumber\" :key=\"item\">\n <text :id=\"`uts-number-${item}`\">{{ item }}</text>\n </view>\r\n\r\n <view class=\"bold mb-10\">v-for object</view>\r\n <view\r\n v-for=\"(value, key) in object\"\r\n :key=\"key\"\r\n class=\"mb-10 flex justify-between flex-row\">\r\n <text :id=\"key\">{{ key }}</text>\r\n <text :id=\"value\">{{ value }}</text>\r\n </view>\r\n\r\n <view class=\"bold mb-10\">v-for & v-if list items</view>\r\n <view\r\n id=\"v-for-v-if-list-items\"\r\n v-for=\"item in listItems\"\r\n :key=\"item.name\">\r\n <template v-if=\"item.show\">\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text :id=\"item.name\">{{ item.name }}</text>\r\n <text @click=\"item.count++\" :id=\"`v-if-${item.name}-count`\">{{\r\n item.count\r\n }}</text>\r\n </view>\r\n <template v-for=\"child in item.items\">\r\n <view\r\n v-if=\"child.show\"\r\n :key=\"child.name\"\r\n class=\"mb-10 flex justify-between flex-row\">\r\n <text :id=\"child.name\">{{ child.name }}</text>\r\n <text @click=\"child.count++\" :id=\"`v-if-${child.name}-count`\">{{\r\n child.count\r\n }}</text>\r\n </view>\r\n </template>\r\n </template>\r\n </view>\r\n\r\n <view class=\"bold mb-10\">v-for & v-show list items</view>\r\n <view\r\n id=\"v-for-v-if-list-items\"\r\n v-for=\"item in listItems\"\r\n :key=\"item.name\"\r\n v-show=\"item.show\">\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text :id=\"item.name\">{{ item.name }}</text>\r\n <text @click=\"item.count++\" :id=\"`v-show-${item.name}-count`\">{{\r\n item.count\r\n }}</text>\r\n </view>\r\n <view\r\n v-for=\"child in item.items\"\r\n v-show=\"child.show\"\r\n :key=\"child.name\"\r\n class=\"mb-10 flex justify-between flex-row\">\r\n <text :id=\"child.name\">{{ child.name }}</text>\r\n <text @click=\"child.count++\" :id=\"`v-show-${child.name}-count`\">{{\r\n child.count\r\n }}</text>\r\n </view>\r\n </view>\r\n\r\n <view\r\n class=\"mb-10 flex justify-between flex-row\"\r\n v-for=\"item in mapList\"\r\n :key=\"item[0]\">\r\n <text>{{ item[0] }}</text>\r\n <text :id=\"item[0]\">{{ item[1] }}</text>\r\n </view>\r\n\r\n <view class=\"mb-10\" v-for=\"(item, index) in setList\" :key=\"index\">\r\n <text :id=\"`set-value-${index + 1}`\">{{ item }}</text>\r\n </view>\r\n\r\n <view class=\"bold mb-10\">v-for UTSJSONObject</view>\r\n <view\r\n v-for=\"(value, key) in utsJSONObject\"\r\n :key=\"key\"\r\n class=\"mb-10 flex justify-between flex-row\">\r\n <text :id=\"key\">{{ key }}</text>\r\n <text :id=\"value\">{{ value }}</text>\r\n </view>\r\n </view>\r\n <!-- #ifdef APP -->\r\n </scroll-view>\r\n <!-- #endif -->\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\ntype VForObject = {\r\n key1 : string\r\n key2 : string\r\n key3 : string\r\n}\r\n\r\ntype ListItem = {\r\n name: string\r\n count : number\r\n show: boolean\r\n items?: ListItem[]\r\n}\r\n\r\n// 可通过泛型指定类型\r\nconst object = reactive<VForObject>({ key1: 'value1', key2: 'value2', key3: 'value3' })\r\nconst listItems = ref<ListItem[]>([\r\n { name: '1',\r\n count: 0,\r\n show: true,\r\n items:[\r\n { name: '1-1', count: 0, show: false },\r\n { name: '1-2', count: 0, show: true },\r\n ]\r\n },\r\n { name: '2',\r\n count: 0,\r\n show: true,\r\n items:[\r\n { name: '2-1', count: 0, show: true },\r\n { name: '2-2', count: 0, show: false },\r\n ]\r\n },\r\n { name: '3',\r\n count: 0,\r\n show: false,\r\n items:[\r\n { name: '3-1', count: 0, show: true },\r\n { name: '3-2', count: 0, show: true },\r\n ]\r\n },\r\n])\r\n\r\nconst mapList = new Map<string, string>([\r\n ['map-key-1', 'map value 1'],\r\n ['map-key-2', 'map value 2'],\r\n ['map-key-3', 'map value 3'],\r\n])\r\n\r\nconst setList = new Set<string>(['set value 1', 'set value 2', 'set value 3'])\r\n\r\nconst utsJSONObject = reactive({ utsKey1: 'UTSJSONObject-value1', utsKey2: 'UTSJSONObject-value2', utsKey3: 'UTSJSONObject-value3' })\n\nconst utsNumber = JSON.parse(\"3\") as number\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-for/v-for-composition"},"v-for_v-for-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-for/v-for-options.uvue","code":"```vue\n<template>\r\n <!-- #ifdef APP -->\r\n <scroll-view style=\"flex: 1\">\r\n <!-- #endif -->\r\n <view class=\"page\">\r\n <text class=\"bold mb-10\">v-for number</text>\r\n <view class=\"mb-10\" v-for=\"item in 3\" :key=\"item\">\r\n <text :id=\"`number-${item}`\">{{ item }}</text>\r\n </view>\n \n <view class=\"mb-10\" v-for=\"item in utsNumber\" :key=\"item\">\n <text :id=\"`uts-number-${item}`\">{{ item }}</text>\n </view>\r\n\r\n <view class=\"bold mb-10\">v-for object</view>\r\n <view\r\n v-for=\"(value, key) in object\"\r\n :key=\"key\"\r\n class=\"mb-10 flex justify-between flex-row\">\r\n <text :id=\"key\">{{ key }}</text>\r\n <text :id=\"value\">{{ value }}</text>\r\n </view>\r\n\r\n <view class=\"bold mb-10\">v-for & v-if list items</view>\r\n <view\r\n id=\"v-for-v-if-list-items\"\r\n v-for=\"item in listItems\"\r\n :key=\"item.name\">\r\n <template v-if=\"item.show\">\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text :id=\"item.name\">{{ item.name }}</text>\r\n <text @click=\"item.count++\" :id=\"`v-if-${item.name}-count`\">{{\r\n item.count\r\n }}</text>\r\n </view>\r\n <template v-for=\"child in item.items\">\r\n <view\r\n v-if=\"child.show\"\r\n :key=\"child.name\"\r\n class=\"mb-10 flex justify-between flex-row\">\r\n <text :id=\"child.name\">{{ child.name }}</text>\r\n <text @click=\"child.count++\" :id=\"`v-if-${child.name}-count`\">{{\r\n child.count\r\n }}</text>\r\n </view>\r\n </template>\r\n </template>\r\n </view>\r\n\r\n <view class=\"bold mb-10\">v-for & v-show list items</view>\r\n <view\r\n id=\"v-for-v-show-list-items\"\r\n v-for=\"item in listItems\"\r\n v-show=\"item.show\"\r\n :key=\"item.name\">\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text :id=\"item.name\">{{ item.name }}</text>\r\n <text @click=\"item.count++\" :id=\"`v-show-${item.name}-count`\">{{\r\n item.count\r\n }}</text>\r\n </view>\r\n <view\r\n v-for=\"child in item.items\"\r\n v-show=\"child.show\"\r\n :key=\"child.name\"\r\n class=\"mb-10 flex justify-between flex-row\">\r\n <text :id=\"child.name\">{{ child.name }}</text>\r\n <text @click=\"child.count++\" :id=\"`v-show-${child.name}-count`\">{{\r\n child.count\r\n }}</text>\r\n </view>\r\n </view>\r\n\r\n <view\r\n class=\"mb-10 flex justify-between flex-row\"\r\n v-for=\"item in mapList\"\r\n :key=\"item[0]\">\r\n <text>{{ item[0] }}</text>\r\n <text :id=\"item[0]\">{{ item[1] }}</text>\r\n </view>\r\n\r\n <view class=\"mb-10\" v-for=\"(item, index) in setList\" :key=\"index\">\r\n <text :id=\"`set-value-${index + 1}`\">{{ item }}</text>\r\n </view>\n\n <view class=\"bold mb-10\">v-for UTSJSONObject</view>\n <view\n v-for=\"(value, key) in utsJSONObject\"\n :key=\"key\"\n class=\"mb-10 flex justify-between flex-row\">\n <text :id=\"key\">{{ key }}</text>\n <text :id=\"value\">{{ value }}</text>\n </view>\r\n </view>\r\n <!-- #ifdef APP -->\r\n </scroll-view>\r\n <!-- #endif -->\r\n</template>\r\n\r\n<script lang=\"uts\">\r\ntype VForObject = {\r\n key1 : string\r\n key2 : string\r\n key3 : string\r\n}\r\n\r\ntype ListItem = {\r\n name: string\r\n count : number\r\n show: boolean\r\n items?: ListItem[]\r\n}\r\n\r\n// TODO: v-for map set deep array 动态增加删除\r\nexport default {\r\n data() {\r\n return {\r\n object: { key1: 'value1', key2: 'value2', key3: 'value3' } as VForObject,\r\n listItems: [\r\n { name: '1',\r\n count: 0,\r\n show: true,\r\n items:[\r\n { name: '1-1', count: 0, show: false },\r\n { name: '1-2', count: 0, show: true },\r\n ]\r\n },\r\n { name: '2',\r\n count: 0,\r\n show: true,\r\n items:[\r\n { name: '2-1', count: 0, show: true },\r\n { name: '2-2', count: 0, show: false },\r\n ]\r\n },\r\n { name: '3',\r\n count: 0,\r\n show: false,\r\n items:[\r\n { name: '3-1', count: 0, show: true },\r\n { name: '3-2', count: 0, show: true },\r\n ]\r\n },\r\n ] as ListItem[],\r\n mapList: new Map<string, string>([\r\n ['map-key-1', 'map value 1'],\r\n ['map-key-2', 'map value 2'],\r\n ['map-key-3', 'map value 3'],\r\n ]),\r\n setList: new Set<string>(['set value 1', 'set value 2', 'set value 3']),\n utsJSONObject: { utsKey1: 'UTSJSONObject-value1', utsKey2: 'UTSJSONObject-value2', utsKey3: 'UTSJSONObject-value3' },\n utsNumber: JSON.parse(\"3\") as number\r\n }\r\n }\r\n}\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-for/v-for-options"},"v-html_v-html-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-html/v-html-composition.uvue","code":"```vue\n<template>\n <view v-html=\"html\" />\n</template>\n\n<script setup lang=\"uts\">\nconst html = '<p class=\"p\" style=\"color: red;\">hello world for composition API!</p>'\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-html/v-html-composition"},"v-html_v-html-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-html/v-html-options.uvue","code":"```vue\n<template>\n <view v-html=\"html\" />\n</template>\n\n<script lang=\"uts\">\nexport default {\n data() {\n return {\n html: '<p class=\"p\" style=\"color: red;\">hello world for options API!</p>'\n }\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-html/v-html-options"},"v-if_v-if-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-if/v-if-composition.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <view class=\"mb-10 flex justify-between flex-row\">\n <text>v-if</text>\n <text id=\"v-if-show\" v-if=\"show\">show</text>\n </view>\n <button id=\"switch-v-if-btn\" @click=\"show = !show\">switch v-if</button>\n\n <view class=\"mt-10 mb-10 flex justify-between flex-row\">\n <text>num:</text>\n <text id=\"num\">{{ num }}</text>\n </view>\n <view class=\"mb-10 flex justify-between flex-row\">\n <text>v-if v-else-if v-else</text>\n <text id=\"num-v-if\" v-if=\"num == 1\">v-if num = 1</text>\n <text id=\"num-v-else-if\" v-else-if=\"num == 2\">v-else-if num = 2</text>\n <text id=\"num-v-else\" v-else>v-else</text>\n </view>\n <button id=\"change-num-btn\" @click=\"changeNum\">change num</button>\n </view>\n</template>\n\n<script setup lang=\"uts\">\nconst show = ref(true)\nconst num = ref(1)\n\nconst changeNum = () => {\n if(num.value<3) {\n num.value++\n } else {\n num.value = 1\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-if/v-if-composition"},"v-if_v-if-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-if/v-if-options.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <view class=\"mb-10 flex justify-between flex-row\">\n <text>v-if</text>\n <text id=\"v-if-show\" v-if=\"show\">show</text>\n </view>\n <button id=\"switch-v-if-btn\" @click=\"show = !show\">switch v-if</button>\n\n <view class=\"mt-10 mb-10 flex justify-between flex-row\">\n <text>num:</text>\n <text id=\"num\">{{ num }}</text>\n </view>\n <view class=\"mb-10 flex justify-between flex-row\">\n <text>v-if v-else-if v-else</text>\n <text id=\"num-v-if\" v-if=\"num == 1\">v-if num = 1</text>\n <text id=\"num-v-else-if\" v-else-if=\"num == 2\">v-else-if num = 2</text>\n <text id=\"num-v-else\" v-else>v-else</text>\n </view>\n <button id=\"change-num-btn\" @click=\"changeNum\">change num</button>\n </view>\n</template>\n\n<script lang=\"uts\">\nexport default {\n data() {\n return {\n show: true,\n num: 1\n }\n },\n methods: {\n changeNum() {\n if(this.num<3) {\n this.num++\n } else {\n this.num = 1\n }\n },\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-if/v-if-options"},"v-memo_v-memo-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-memo/v-memo-composition.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <view class=\"flex flex-row justify-between mb-10\" v-memo=\"[]\">\n <text>msg will never change:</text>\n <text id=\"v-memo-never-change-msg\">{{ msg }}</text>\n </view>\n <view class=\"flex flex-row justify-between mb-10\">\n <text>msg:</text>\n <text id=\"msg\">{{ msg }}</text>\n </view>\n <view class=\"flex flex-row justify-between mb-10\" v-memo=\"[num]\">\n <text>msg will change when num chang:</text>\n <text id=\"v-memo-num-change-msg\">{{ msg }}</text>\n </view>\n <view class=\"flex flex-row justify-between mb-10\">\n <text>num:</text>\n <text id=\"num\">{{ num }}</text>\n </view>\n <button\n id=\"change-message-btn\"\n class=\"mb-10\"\n type=\"primary\"\n @click=\"changeMessage\">\n change message\n </button>\n <button\n id=\"increment-num-btn\"\n class=\"mb-10\"\n type=\"primary\"\n @click=\"incrementNum\">\n increment num\n </button>\n </view>\n</template>\n\n<script setup lang=\"uts\">\nconst msg = ref('hello world')\n\nconst num = ref(0)\n\nconst changeMessage = () => {\n msg.value = 'msg changed'\n}\n\nconst incrementNum = () =>{\n num.value++\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-memo/v-memo-composition"},"v-memo_v-memo-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-memo/v-memo-options.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <view class=\"flex flex-row justify-between mb-10\" v-memo=\"[]\">\n <text>msg will never change:</text>\n <text id=\"v-memo-never-change-msg\">{{ msg }}</text>\n </view>\n <view class=\"flex flex-row justify-between mb-10\">\n <text>msg:</text>\n <text id=\"msg\">{{ msg }}</text>\n </view>\n <view class=\"flex flex-row justify-between mb-10\" v-memo=\"[num]\">\n <text>msg will change when num chang:</text>\n <text id=\"v-memo-num-change-msg\">{{ msg }}</text>\n </view>\n <view class=\"flex flex-row justify-between mb-10\">\n <text>num:</text>\n <text id=\"num\">{{ num }}</text>\n </view>\n <button\n id=\"change-message-btn\"\n class=\"mb-10\"\n type=\"primary\"\n @click=\"changeMessage\">\n change message\n </button>\n <button\n id=\"increment-num-btn\"\n class=\"mb-10\"\n type=\"primary\"\n @click=\"incrementNum\">\n increment num\n </button>\n </view>\n</template>\n\n<script lang=\"uts\">\nexport default {\n data() {\n return {\n msg: 'hello world',\n num: 0\n }\n },\n methods: {\n changeMessage() {\n this.msg = 'msg changed'\n },\n incrementNum(){\n this.num++\n }\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-memo/v-memo-options"},"v-model_Foo-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-model/Foo-composition.uvue","code":"```vue\n<template>\n <view>\n <view class=\"mb-10 flex justify-between flex-row\">\n <text>v-model in Foo:</text>\n <text id=\"model-value-text\">{{ modelValue }}</text>\n </view>\n <view class=\"mb-10 flex justify-between flex-row\">\n <text>v-model:msg in Foo:</text>\n <text id=\"model-msg-text\">{{ msg }}</text>\n </view>\n <view class=\"mb-10 flex justify-between flex-row\">\n <text>defineModel num:</text>\n <text id=\"model-num-text\">{{ num }}</text>\n </view>\n <view class=\"mb-10 flex justify-between flex-row\">\n <text>defineModel strArr:</text>\n <text id=\"model-str-arr-text\">{{ JSON.stringify(strArr) }}</text>\n </view>\n <view class=\"mb-10 flex justify-between flex-row\">\n <text>defineModel numArr:</text>\n <text id=\"model-num-arr-text\">{{ JSON.stringify(numArr) }}</text>\n </view>\n <button class=\"mb-10\" id=\"update-value-btn\" @click=\"updateValue\">\n update value\n </button>\n </view>\n</template>\n\n<script setup lang=\"uts\">\n// 在被修改时,触发 \"update:modelValue\" 事件\nconst modelValue = defineModel({ type: String })\n\n// 在被修改时,触发 \"update:msg\" 事件\nconst msg = defineModel('msg', { type: String, default: 'default msg' })\n\nconst num = defineModel('num', { type: Number, default: 1 })\n\nconst strArr = defineModel<string[]>('strArr', { default: () => [] as string[] })\nconst numArr = defineModel('numArr', {type: Array as PropType<number[]>, required: true })\n\nconst updateValue = () => {\n modelValue.value += '1'\n msg.value += '2'\n num.value++\n strArr.value.push(`${strArr.value.length}`)\n numArr.value.push(numArr.value.length)\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-model/Foo-composition"},"v-model_Parent":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-model/Parent.uvue","code":"```vue\n<template>\r\n <Son v-model=\"value\"></Son>\r\n</template>\r\n\r\n<script setup>\r\n import Son from \"./Son.uvue\"\r\n const value = defineModel<string>(\"modelValue\")\r\n</script>\r\n\r\n<style></style>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-model/Parent"},"v-model_Son":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-model/Son.uvue","code":"```vue\n<template>\r\n <text id=\"son-input\">{{value}}</text>\r\n</template>\r\n\r\n<script setup>\r\n const value = defineModel<string>(\"modelValue\")\r\n</script>\r\n\r\n<style></style>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-model/Son"},"v-model_v-model-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-model/v-model-composition.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <Foo\n v-model=\"str\"\n v-model:msg=\"msg\"\n v-model:strArr=\"strArr\"\n v-model:numArr=\"numArr\"\n @update:modelValue=\"handleModelValueUpdate\"\n @update:msg=\"handleModelMsgUpdate\"\n />\n <input class=\"mb-10 input\" id=\"model-value-input\" v-model=\"str\" />\n <input class=\"mb-10 input\" id=\"model-msg-input\" v-model=\"msg\" />\n <view class=\"mb-10 flex justify-between flex-row\">\n <text>handle modelValue update res:</text>\n <text id=\"handle-model-value-update-res\">{{ handleModelValueUpdateRes }}</text>\n </view>\n <view class=\"mb-10 flex justify-between flex-row\">\n <text>handle model msg update res:</text>\n <text id=\"handle-model-msg-update-res\">{{ handleModelMsgUpdateRes }}</text>\n </view>\n <Parent v-model=\"value\"></Parent>\n </view>\n</template>\n\n<script setup lang=\"uts\">\nimport Foo from './Foo-composition.uvue'\nimport Parent from './Parent.uvue'\n\nconst str = ref('str')\nconst msg = ref('msg')\nconst strArr = ref<string[]>(['0'])\nconst numArr = ref<number[]>([0])\nconst value = ref(\"nested\");\nconst handleModelValueUpdateRes = ref('')\nconst handleModelValueUpdate = (val : string) => {\n handleModelValueUpdateRes.value = val\n}\nconst handleModelMsgUpdateRes = ref('')\nconst handleModelMsgUpdate = (val : string) => {\n handleModelMsgUpdateRes.value = val\n}\n</script>\n\n<style>\n.input {\n padding: 0px 10px;\n height: 40px;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\n</style>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-model/v-model-composition"},"v-model_v-model-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-model/v-model-options.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <view class=\"mb-10 flex justify-between flex-row\">\n <text>str:</text>\n <text id=\"str\">{{ str }}</text>\n </view>\n <input class=\"mb-10 input\" id=\"model-str\" v-model=\"str\" />\n <input class=\"mb-10 input\" id=\"model-num\" v-model.number=\"num\" type=\"text\" />\n <input class=\"mb-10 input\" id=\"model-str-trim\" v-model.trim=\"strForTrim\" />\n <input class=\"mb-10 input\" id=\"model-str-lazy\" v-model.lazy=\"str\" type=\"text\" />\n <view class=\"mb-10 flex justify-between flex-row\">\n <text>typeof num:</text>\n <text id=\"typeof-num\">{{ typeof num }}</text>\n </view>\n <view class=\"mb-10 flex justify-between flex-row\">\n <text>str for trim length:</text>\n <text id=\"str-length\">{{ strForTrim.length }}</text>\n </view>\n <Parent v-model=\"value\"></Parent>\n </view>\n</template>\n\n<script lang=\"uts\">\nimport Parent from './Parent.uvue' \nexport default {\n data(){\n return {\n str: 'str',\n num: 1,\n strForTrim: ' abc ',\n value: 'nested'\n }\n },\n components: {\n Parent\n }\n}\n</script>\n\n<style>\n.input {\n padding: 0px 10px;\n height: 40px;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\n</style>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-model/v-model-options"},"v-on_v-on-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-on/v-on-composition.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <text class=\"bold mb-10\">下方按钮点击累加 count</text>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>count:</text>\r\n <text id=\"count\">{{ count }}</text>\r\n </view>\r\n <button class=\"mb-10 btn\" @click=\"handleClick\">\r\n @click=\"handleClick\" 缩写\r\n </button>\r\n <button class=\"mb-10 btn\" v-on:click=\"handleClick\">\r\n v-on:click=\"handleClick\" 方法处理函数\r\n </button>\r\n <button class=\"mb-10 btn\" v-on:click=\"count++\">\r\n v-on:click=\"count++\" 内联事件\r\n </button>\r\n <button class=\"mb-10 btn\" v-on:click=\"handleClick($event as MouseEvent)\">\r\n v-on:click=\"handleClick($event as MouseEvent)\"\r\n 内联声明,注意要显式声明$event的类型\r\n </button>\n <!-- #ifndef MP -->\r\n <button class=\"mb-10 btn\" v-on:[event]=\"handleClick\">\r\n v-on:[event]=\"handleClick\" 动态事件\r\n </button>\r\n <button class=\"mb-10 btn\" v-on=\"{ click: handleClick }\">\r\n v-on=\"{ click: handleClick }\" 对象语法\r\n </button>\n <!-- #endif -->\r\n <!-- TODO: ios 不支持 -->\r\n <!-- #ifndef APP-IOS || MP -->\r\n <button class=\"mb-10 btn\" id=\"btn-once\" @click.once=\"handleClick\">@click once</button>\r\n <!-- #endif -->\r\n <view @click=\"handleClick\">\r\n <button class=\"mb-10 btn\" id=\"btn-stop\" @click.stop=\"handleClick\">@click stop</button>\r\n </view>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\nconst count = ref(0)\r\n\r\nconst event = ref('click')\r\n\r\nconst handleClick = (e : MouseEvent) => {\r\n count.value++\r\n console.log('handleClick', e)\r\n}\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-on/v-on-composition"},"v-on_v-on-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-on/v-on-options.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <text class=\"bold mb-10\">下方按钮点击累加 count</text>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>count:</text>\r\n <text id=\"count\">{{ count }}</text>\r\n </view>\r\n <button class=\"mb-10 btn\" @click=\"handleClick\">@click=\"handleClick\" 缩写</button>\r\n <button class=\"mb-10 btn\" v-on:click=\"handleClick\">\r\n v-on:click=\"handleClick\" 方法处理函数\r\n </button>\r\n <button class=\"mb-10 btn\" v-on:click=\"count++\">\r\n v-on:click=\"count++\" 内联事件\r\n </button>\r\n <button class=\"mb-10 btn\" v-on:click=\"handleClick($event as MouseEvent)\">\r\n v-on:click=\"handleClick($event as MouseEvent)\"\r\n 内联声明,注意要显式声明$event的类型\r\n </button>\n <!-- #ifndef MP -->\r\n <button class=\"mb-10 btn\" v-on:[event]=\"handleClick\">\r\n v-on:[event]=\"handleClick\" 动态事件\r\n </button>\r\n <button class=\"mb-10 btn\" v-on=\"{ click: handleClick }\">\r\n v-on=\"{ click: handleClick }\" 对象语法\r\n </button>\n <!-- #endif -->\r\n <!-- TODO: ios 不支持 -->\r\n <!-- #ifndef APP-IOS || MP -->\r\n <button class=\"mb-10 btn\" id=\"btn-once\" @click.once=\"handleClick\">@click once</button>\r\n <!-- #endif -->\r\n <view @click=\"handleClick\">\r\n <button class=\"mb-10 btn\" id=\"btn-stop\" @click.stop=\"handleClick\">@click stop</button>\r\n </view>\r\n </view>\r\n</template>\r\n\r\n<script lang=\"uts\">\r\nexport default {\r\n data() {\r\n return {\r\n count: 0,\r\n event: 'click'\r\n }\r\n },\r\n methods: {\r\n handleClick(e : MouseEvent) {\r\n this.count++\r\n console.log('handleClick', e)\r\n }\r\n }\r\n}\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-on/v-on-options"},"v-once_v-once-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-once/v-once-composition.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <!-- #ifndef MP -->\n <view class=\"flex flex-row justify-between mb-10\" v-once>\n <text>This msg will never change:</text>\n <text id='v-once-msg'>{{ msg }}</text>\n </view>\n <!-- #endif -->\n <view class=\"flex flex-row justify-between mb-10\">\n <text>msg:</text>\n <text id=\"msg\">{{ msg }}</text>\n </view>\n <button id=\"btn\" class=\"mb-10\" type=\"primary\" @click=\"changeMessage\">\n change message\n </button>\n </view>\n</template>\n\n<script setup lang=\"uts\">\n const msg = ref('hello world')\n const changeMessage = () => {\n msg.value = 'msg changed'\n }\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-once/v-once-composition"},"v-once_v-once-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-once/v-once-options.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <!-- #ifndef MP -->\n <view class=\"flex flex-row justify-between mb-10\" v-once>\n <text>This msg will never change:</text>\n <text id='v-once-msg'>{{ msg }}</text>\n </view>\n <!-- #endif -->\n <view class=\"flex flex-row justify-between mb-10\">\n <text>msg:</text>\n <text id=\"msg\">{{ msg }}</text>\n </view>\n <button id=\"btn\" class=\"mb-10\" type=\"primary\" @click=\"changeMessage\">\n change message\n </button>\n </view>\n</template>\n\n<script lang=\"uts\">\nexport default {\n data() {\n return {\n msg: 'hello world'\n }\n },\n methods: {\n changeMessage() {\n this.msg = 'msg changed'\n }\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-once/v-once-options"},"v-pre_v-pre":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-pre/v-pre.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <text class=\"bold mb-10\">v-pre 跳过该元素及其所有子元素的编译</text>\n <text class=\"mb-10 v-pre-text\" v-pre>{{ this will not be compiled }}</text>\n </view>\n</template>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-pre/v-pre"},"v-show_Foo":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-show/Foo.uvue","code":"```vue\n<template>\n <view id=\"foo\">\n component Foo\n </view>\n</template>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-show/Foo"},"v-show_v-show-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-show/v-show-composition.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <button id=\"toggle-btn\" @click=\"toggleShow\">toggle show/hide</button>\r\n <text>点击上方按钮,切换下方 view 显示/隐藏</text>\r\n <text>show default true: {{dataInfo.showDefaultTrue}}</text>\r\n <view class=\"mt-10 default-true\" id=\"v-show-element-default-true\" v-show=\"dataInfo.showDefaultTrue\"></view>\r\n <text>show default false: {{dataInfo.showDefaultFalse}}</text>\r\n <view class=\"mt-10 default-false\" id=\"v-show-element-default-false\" v-show=\"dataInfo.showDefaultFalse\"></view>\n <Foo v-show=\"dataInfo.showDefaultFalse\" />\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\n import Foo from './Foo.uvue'\r\n\r\n type DataInfo = {\r\n showDefaultTrue : boolean\r\n showDefaultFalse : boolean\r\n }\r\n\r\n const dataInfo = reactive({\r\n showDefaultTrue: true,\r\n showDefaultFalse: false\r\n } as DataInfo)\r\n\r\n const toggleShow = () => {\r\n dataInfo.showDefaultTrue = !dataInfo.showDefaultTrue\r\n dataInfo.showDefaultFalse = !dataInfo.showDefaultFalse\r\n }\r\n\r\n defineExpose({\r\n dataInfo\r\n })\r\n</script>\r\n\r\n<style>\r\n .default-true,\r\n .default-false {\r\n display: flex;\r\n width: 100px;\r\n height: 50px;\r\n }\r\n\r\n .default-true {\r\n background-color: greenyellow;\r\n }\r\n\r\n .default-false {\r\n background-color: antiquewhite;\r\n }\r\n</style>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-show/v-show-composition"},"v-show_v-show-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-show/v-show-options.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <button id=\"toggle-btn\" @click=\"toggleShow\">toggle show/hide</button>\r\n <text>点击上方按钮,切换下方 view 显示/隐藏</text>\r\n <text>show default true: {{dataInfo.showDefaultTrue}}</text>\r\n <view class=\"mt-10 default-true\" id=\"v-show-element-default-true\" v-show=\"dataInfo.showDefaultTrue\"></view>\r\n <text>show default false: {{dataInfo.showDefaultFalse}}</text>\r\n <view class=\"mt-10 default-false\" id=\"v-show-element-default-false\" v-show=\"dataInfo.showDefaultFalse\"></view>\n <Foo v-show=\"dataInfo.showDefaultFalse\" />\r\n </view>\r\n</template>\r\n\r\n<script lang=\"uts\">\r\n import Foo from './Foo.uvue'\r\n\r\n type DataInfo = {\r\n showDefaultTrue : boolean\r\n showDefaultFalse : boolean\r\n }\r\n\r\n export default {\r\n components: { Foo },\r\n data() {\r\n return {\r\n dataInfo: {\r\n showDefaultTrue: true,\r\n showDefaultFalse: false\r\n } as DataInfo\r\n }\r\n },\r\n methods: {\r\n toggleShow() {\r\n this.dataInfo.showDefaultTrue = !this.dataInfo.showDefaultTrue\r\n this.dataInfo.showDefaultFalse = !this.dataInfo.showDefaultFalse\r\n }\r\n }\r\n }\r\n</script>\r\n\r\n<style>\r\n .default-true,\r\n .default-false {\r\n display: flex;\r\n width: 100px;\r\n height: 50px;\r\n }\r\n\r\n .default-true {\r\n background-color: greenyellow;\r\n }\r\n\r\n .default-false {\r\n background-color: antiquewhite;\r\n }\r\n</style>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-show/v-show-options"},"v-slot_Foo-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-slot/Foo-composition.uvue","code":"```vue\n<template>\n <view>\n <slot name=\"header\" :msg=\"msg\"></slot>\n <slot :num=\"num\"></slot>\n <slot name=\"num1\" :num=\"num\"></slot>\n <slot name=\"num2\" :num=\"num\"></slot>\n <slot name=\"msgTrue\" :msg=\"msg\"></slot>\n <slot name=\"msgFalse\" :msg=\"msg\"></slot>\n <slot name=\"footer\" :arr=\"arr\"></slot>\n </view>\n</template>\n\n<script setup lang='uts'>\n const msg = ref('foo msg')\n const num = ref<number>(0)\n const arr = ref<string[]>(['a', 'b', 'c'])\n\n defineSlots<{\n header(props : { msg : string }) : any,\n default(props : { num : number }) : any,\n num1(props : { num : number }) : any,\n num2(props : { num : number }) : any,\n msgTrue(props : { msg : string }) : any,\n msgFalse(props : { msg : string }) : any,\n footer(props : { arr : string[] }) : any\n }>()\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-slot/Foo-composition"},"v-slot_Foo-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-slot/Foo-options.uvue","code":"```vue\n<template>\n <view>\n <slot name=\"header\" :msg=\"msg\"></slot>\n <slot :num=\"num\"></slot>\n <slot name=\"num1\" :num=\"num\"></slot>\n <slot name=\"num2\" :num=\"num\"></slot>\n <slot name=\"msgTrue\" :msg=\"msg\"></slot>\n <slot name=\"msgFalse\" :msg=\"msg\"></slot>\n <slot name=\"footer\" :arr=\"arr\"></slot>\n </view>\n</template>\n\n<script lang=\"uts\">\n export default {\n slots: Object as SlotsType<{\n header: { msg: string }\n default: { num: number }\n num1: { num: number }\n num2: { num: number }\n msgTrue: { msg: string }\n msgFalse: { msg: string }\n footer: { arr: string[] }\n }>,\n data(){\n return {\n msg: 'foo msg',\n num: 0,\n arr: ['a','b', 'c']\n }\n }\n }\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-slot/Foo-options"},"v-slot_v-slot-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-slot/v-slot-composition.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <Foo>\r\n <template #header=\"{ msg }\">\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>header slot msg:</text>\r\n <text id=\"slot-header\">{{ msg }}</text>\r\n </view>\r\n </template>\r\n <template #default=\"{ num }\">\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>default slot num:</text>\r\n <text id=\"slot-default\">{{ num }}</text>\r\n </view>\r\n </template>\n <!-- #ifndef MP -->\r\n <template v-for=\"item in 2\" #[`num${item}`]=\"{ num }\">\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>num{{ item }} slot:</text>\r\n <text :id=\"`slot-num${item}`\">{{ num }}</text>\r\n </view>\r\n </template>\r\n <template v-if=\"msgTrue['isShow']\" #[msgTrue['name']]=\"{ msg }\">\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>{{ msgTrue['name'] }} slot msg:</text>\r\n <text id=\"slot-msg-true\">{{ msg }}</text>\r\n </view>\r\n </template>\r\n <template v-if=\"msgFalse['isShow']\" #[msgFalse['name']]=\"{ msg }\">\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>{{ msgFalse['name'] }} slot msg:</text>\r\n <text id=\"slot-msg-false\">{{ msg }}</text>\r\n </view>\r\n </template>\n <!-- #endif -->\r\n <template #footer=\"{ arr }\">\r\n <view class=\"mb-10 flex justify-between flex-row\">\r\n <text>footer slot arr:</text>\r\n <text id=\"slot-footer\">{{ JSON.stringify(arr) }}</text>\r\n </view>\r\n </template>\r\n </Foo>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\n import Foo from './Foo-composition.uvue'\r\n\r\n const msgTrue = ref({\r\n isShow: true,\r\n name: 'msgTrue'\r\n })\r\n const msgFalse = ref({\r\n isShow: false,\r\n name: 'msgFalse'\r\n })\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-slot/v-slot-composition"},"v-slot_v-slot-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-slot/v-slot-options.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <Foo>\n <template #header=\"{ msg }\">\n <view class=\"mb-10 flex justify-between flex-row\">\n <text>header slot msg:</text>\n <text id=\"slot-header\">{{ msg }}</text>\n </view>\n </template>\n <template #default=\"{ num }\">\n <view class=\"mb-10 flex justify-between flex-row\">\n <text>default slot num:</text>\n <text id=\"slot-default\">{{ num }}</text>\n </view>\n </template>\n <!-- #ifndef MP -->\n <template v-for=\"item in 2\" #[`num${item}`]=\"{ num }\">\n <view class=\"mb-10 flex justify-between flex-row\">\n <text>num{{ item }} slot:</text>\n <text :id=\"`slot-num${item}`\">{{ num }}</text>\n </view>\n </template>\n <template v-if=\"msgTrue['isShow']\" #[msgTrue['name']]=\"{ msg }\">\n <view class=\"mb-10 flex justify-between flex-row\">\n <text>{{ msgTrue['name'] }} slot msg:</text>\n <text id=\"slot-msg-true\">{{ msg }}</text>\n </view>\n </template>\n <template v-if=\"msgFalse['isShow']\" #[msgFalse['name']]=\"{ msg }\">\n <view class=\"mb-10 flex justify-between flex-row\">\n <text>{{ msgFalse['name'] }} slot msg:</text>\n <text id=\"slot-msg-false\">{{ msg }}</text>\n </view>\n </template>\n <!-- #endif -->\n <template #footer=\"{ arr }\">\n <view class=\"mb-10 flex justify-between flex-row\">\n <text>footer slot arr:</text>\n <text id=\"slot-footer\">{{ JSON.stringify(arr) }}</text>\n </view>\n </template>\n </Foo>\n </view>\n</template>\n\n<script lang=\"uts\">\nimport Foo from './Foo-options.uvue'\nexport default {\n components: {Foo},\n data(){\n return {\n msgTrue: {\n isShow: true,\n name: 'msgTrue'\n },\n msgFalse: {\n isShow: false,\n name: 'msgFalse'\n }\n }\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-slot/v-slot-options"},"v-text_v-text-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-text/v-text-composition.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <view class=\"flex flex-row justify-between mb-10\">\n <text>v-txt for text:</text>\n <text id=\"v-text-text\" v-text=\"vTextForText\"></text>\n </view>\n <view class=\"flex flex-row justify-between mb-10\">\n <text>v-txt for view:</text>\n <view id=\"v-text-view\" v-text=\"vTextForView\"></view>\n </view>\n </view>\n</template>\n\n<script setup lang=\"uts\">\nconst vTextForText = ref('v-text for text')\nconst vTextForView = ref('v-text for view')\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-text/v-text-composition"},"v-text_v-text-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/directive/v-text/v-text-options.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <view class=\"flex flex-row justify-between mb-10\">\n <text>v-txt for text:</text>\n <text id=\"v-text-text\" v-text=\"vTextForText\"></text>\n </view>\n <view class=\"flex flex-row justify-between mb-10\">\n <text>v-txt for view:</text>\n <view id=\"v-text-view\" v-text=\"vTextForView\"></view>\n </view>\n </view>\n</template>\n\n<script lang=\"uts\">\nexport default {\n data() {\n return {\n vTextForText: 'v-text for text',\n vTextForView: 'v-text for view',\n }\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/directive/v-text/v-text-options"}},"E_error":{"runtime-error_runtime-error-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/error/runtime-error/runtime-error-composition.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <text>{{ arr[1] }}</text>\n </view>\n</template>\n\n<script setup lang=\"uts\">\nconst arr = [0]\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/error/runtime-error/runtime-error-composition"},"runtime-error_runtime-error-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/error/runtime-error/runtime-error-options.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <text>{{ arr[1] }}</text>\n </view>\n</template>\n\n<script lang=\"uts\">\n export default {\n data(){\n return {\n arr: [0]\n }\n }\n }\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/error/runtime-error/runtime-error-options"},"throw-error_throw-error-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/error/throw-error/throw-error-composition.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <button id=\"trigger-error\" @click=\"triggerError\">trigger error</button>\r\n <button class='mt-10' id=\"trigger-timeout-error\" @click=\"triggerTimeoutError\">trigger timeout error</button>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\n import { state } from '@/store/index.uts'\r\n\r\n onReady(() => {\r\n throw new Error('error in error composition page onReady')\r\n })\r\n const triggerError = () => {\r\n throw new Error('trigger error in throw error composition page')\r\n }\r\n const triggerTimeoutError = () => {\r\n setTimeout(() => {\r\n throw new Error('setTimeout trigger error in throw error composition page')\r\n }, 10)\r\n }\r\n\r\n // 自动化测试\r\n const setLifeCycleNum = (num: number) : number => {\r\n state.lifeCycleNum = num\r\n }\r\n const getLifeCycleNum = () : number => {\r\n return state.lifeCycleNum\r\n }\r\n defineExpose({\r\n getLifeCycleNum\r\n })\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/error/throw-error/throw-error-composition"},"throw-error_throw-error-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/error/throw-error/throw-error-options.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <button id=\"trigger-error\" @click=\"triggerError\">trigger error</button>\r\n <button class='mt-10' id=\"trigger-timeout-error\" @click=\"triggerTimeoutError\">trigger timeout error</button>\r\n </view>\r\n</template>\r\n\r\n<script lang=\"uts\">\r\n import { setLifeCycleNum, state } from '@/store/index.uts'\r\n\r\n export default {\r\n onReady() {\r\n throw new Error('error in error options page onReady')\r\n },\r\n methods: {\r\n triggerError() {\r\n throw new Error('trigger error in throw error options page')\r\n },\r\n triggerTimeoutError() {\r\n setTimeout(() => {\r\n throw new Error('setTimeout trigger error in throw error options page')\r\n }, 10)\r\n },\r\n // 自动化测试\r\n getLifeCycleNum() : number {\r\n return state.lifeCycleNum\r\n },\r\n // 自动化测试\r\n setLifeCycleNum(num : number) {\r\n setLifeCycleNum(num)\r\n }\r\n },\r\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/error/throw-error/throw-error-options"}},"E_examples":{"multiple-style-script_multiple-style-script":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/examples/multiple-style-script/multiple-style-script.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <view class=\"mb-10 flex flex-row justify-between\">\n <text>msg: </text>\n <text id=\"msg\">{{ msg }}</text>\n </view>\n <!-- #ifndef APP-ANDROID -->\n <view class=\"mb-10 flex flex-row justify-between\">\n <text>num: </text>\n <text id=\"num\">{{ num }}</text>\n </view>\n <!-- #endif -->\n <view class=\"mb-10\">\n <text class=\"text-red\">text red</text>\n </view>\n <view class=\"mb-10\">\n <text class=\"text-green\">text green</text>\n </view>\n <view class=\"mb-10\">\n <text class=\"font-bold\">font bold</text>\n </view>\n </view>\n</template>\n\n<script lang=\"uts\">\nexport default {\n data(){\n return {\n msg: 'Hello World'\n }\n }\n}\n</script>\n<!-- #ifndef APP-ANDROID -->\n<script setup lang=\"uts\">\nconst num = ref(0)\n</script>\n<!-- #endif -->\n\n<style>\n.text-green {\n color: green;\n}\n</style>\n<style>\n.font-bold {\n font-weight: bold;\n}\n</style>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/examples/multiple-style-script/multiple-style-script"},"nested-component-communication_nested-component-communication-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/examples/nested-component-communication/nested-component-communication-composition.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <view class=\"flex-row\">\n 父组件:\n <text class=\"parent-msg\">{{ msg }}</text>\n </view>\n <button class=\"parent-btn\" @click=\"change\">父组件改变数据</button>\n <child />\n </view>\n</template>\n\n<script setup lang=\"uts\">\nimport child from './components/child.uvue'\nimport { setComponentMsg, state } from '@/store/index.uts'\n\nconst msg = computed<number>((): number => state.componentMsg)\n\nconst change = () => {\n setComponentMsg(state.componentMsg + 1)\n}\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/examples/nested-component-communication/nested-component-communication-composition"},"nested-component-communication_nested-component-communication-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/examples/nested-component-communication/nested-component-communication-options.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <view class=\"flex-row\">\n 父组件:\n <text class=\"parent-msg\">{{ msg }}</text>\n </view>\n <button class=\"parent-btn\" @click=\"change\">父组件改变数据</button>\n <child></child>\n </view>\n</template>\n\n<script>\nimport child from './components/child.uvue'\nimport { setComponentMsg, state } from '@/store/index.uts'\nexport default {\n components: {\n child\n },\n computed: {\n msg(): number {\n return state.componentMsg\n }\n },\n methods: {\n change() {\n setComponentMsg(state.componentMsg + 1)\n }\n }\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/examples/nested-component-communication/nested-component-communication-options"},"set-custom-child-component-root-node-class_child":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/examples/set-custom-child-component-root-node-class/child.uvue","code":"```vue\n<template>\n <view>\n <button class=\"btn-child bg-orange\">button in child page</button>\n </view>\n</template>\n\n<style>\n.btn-child {\n width: 300px;\n color: rgb(83, 156, 234);\n}\n.bg-orange{\n background-color: rgb(214, 154, 50);\n}\n</style>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/examples/set-custom-child-component-root-node-class/child"},"set-custom-child-component-root-node-class_set-custom-child-component-root-node-class-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/examples/set-custom-child-component-root-node-class/set-custom-child-component-root-node-class-composition.uvue","code":"```vue\n<template>\n <view>\n <button class=\"btn-page bg-green\">button in parent page</button>\n <Child />\n </view>\n</template>\n\n<script setup lang=\"uts\">\nimport Child from './child.uvue'\n</script>\n\n<style>\n.btn-page {\n width: 280px;\n color: rgb(209, 51, 51);\n}\n.bg-green {\n background-color: rgb(105, 154, 105);\n}\n</style>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/examples/set-custom-child-component-root-node-class/set-custom-child-component-root-node-class-composition"},"set-custom-child-component-root-node-class_set-custom-child-component-root-node-class-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/examples/set-custom-child-component-root-node-class/set-custom-child-component-root-node-class-options.uvue","code":"```vue\n<template>\n <view>\n <button class=\"btn-page bg-green\">button in parent page</button>\n <Child />\n </view>\n</template>\n\n<script lang='uts'>\nimport Child from \"./child.uvue\";\nexport default {\n components: {\n Child\n }\n}\n</script>\n\n<style>\n.btn-page {\n width: 280px;\n color: rgb(209, 51, 51);\n}\n.bg-green{\n background-color: rgb(105, 154, 105);\n}\n</style>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/examples/set-custom-child-component-root-node-class/set-custom-child-component-root-node-class-options"},"unrecognized-component_unrecognized-component":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/examples/unrecognized-component/unrecognized-component.uvue","code":"```vue\n<template>\r\n\t<Abc><text>text in unrecognized component</text></Abc>\r\n</template>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/examples/unrecognized-component/unrecognized-component"},"nested-component-communication_components_child":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/examples/nested-component-communication/components/child.uvue","code":"```vue\n<template>\n <view class=\"child\">\n <view class=\"flex-row\">\n 子组件:\n <text class=\"child-msg\">{{ msg }}</text>\n </view>\n <grand-child></grand-child>\n </view>\n</template>\n\n<script>\nimport grandChild from './grandChild.uvue'\nimport { state } from '@/store/index.uts'\nexport default {\n components: {\n grandChild\n },\n computed: {\n msg(): number {\n return state.componentMsg\n }\n }\n}\n</script>\n<style>\n.child {\n margin-top: 10px;\n}\n</style>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/examples/nested-component-communication/components/child"},"nested-component-communication_components_grandChild":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/examples/nested-component-communication/components/grandChild.uvue","code":"```vue\n<template>\n <view class=\"child\">\n <view class=\"flex-row\">\n 孙组件:\n <text class=\"grandchild-msg\">{{ msg }}</text>\n </view>\n <button class=\"grandchild-btn\" @click=\"change\">孙组件清空数据</button>\n </view>\n</template>\n\n<script>\nimport { state, setComponentMsg } from '@/store/index.uts'\nexport default {\n computed: {\n msg(): number {\n return state.componentMsg\n }\n },\n methods: {\n change() {\n setComponentMsg(0)\n }\n }\n}\n</script>\n\n<style>\n.child {\n margin-top: 10px;\n}\n</style>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/examples/nested-component-communication/components/grandChild"}},"E_lifecycle":{"component_ChildComponentComposition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/lifecycle/component/ChildComponentComposition.uvue","code":"```vue\n<template>\r\n title: {{ title }}\r\n <button class=\"component-lifecycle-btn mt-10\" @click=\"updateTitle\">\r\n updateTitle\r\n </button>\r\n</template>\r\n\r\n<script setup lang='uts'>\r\nimport { state, setLifeCycleNum } from '@/store/index.uts'\r\n\r\nconst title = ref('component for composition API lifecycle test')\r\n\r\nconst emit = defineEmits<{\r\n (e : 'updateIsScroll', val : boolean) : void\r\n}>()\r\n\r\nonLoad((_ : OnLoadOptions) => {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum + 100)\r\n})\r\nonPageShow(() => {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum + 10)\r\n})\r\nonReady(() => {\r\n // 自动化测试\r\n // TODO: onReady 未触发\r\n setLifeCycleNum(state.lifeCycleNum + 10)\r\n})\r\n\r\nonPullDownRefresh(() => {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum + 10)\r\n})\r\nonPageScroll((_) => {\r\n // 自动化测试\r\n emit('updateIsScroll', true)\r\n})\r\nonReachBottom(() => {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum + 10)\r\n})\r\nonBackPress((_ : OnBackPressOptions) : boolean | null => {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum - 10)\r\n return null\r\n})\r\nonPageHide(() => {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum - 10)\r\n})\r\nonUnload(() => {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum - 100)\r\n})\r\n\r\nonBeforeMount(() => {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum + 1)\r\n console.log('component for lifecycle test onBeforeMount')\r\n})\r\n\r\nonMounted(() => {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum + 1)\r\n console.log('component for lifecycle test mounted')\r\n})\r\n\r\nonBeforeUpdate(() => {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum + 1)\r\n console.log('component for lifecycle test beforeUpdate')\r\n})\r\n\r\nonUpdated(() => {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum + 1)\r\n console.log('component for lifecycle test updated')\r\n})\r\n\r\nonBeforeUnmount(() => {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum - 1)\r\n console.log('component for lifecycle test beforeUnmount')\r\n})\r\n\r\nonUnmounted(() => {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum - 1)\r\n console.log('component for lifecycle test unmounted')\r\n})\r\n\r\nonActivated(() => {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum + 1)\r\n console.log('component for lifecycle test onActivated')\r\n})\r\nonDeactivated(() => {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum - 1)\r\n console.log('component for lifecycle test onDeactivated')\r\n})\r\n\r\nconst updateTitle = () => {\r\n title.value = 'component for lifecycle test updated'\r\n}\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/lifecycle/component/ChildComponentComposition"},"component_ChildComponentOptions":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/lifecycle/component/ChildComponentOptions.uvue","code":"```vue\n<template>\r\n title: {{ title }}\r\n <button class=\"component-lifecycle-btn mt-10\" @click=\"updateTitle\">\r\n updateTitle\r\n </button>\r\n</template>\r\n\r\n<script lang='uts'>\r\n import { state, setLifeCycleNum } from '@/store/index.uts';\r\n export default {\r\n name: 'OptionsAPIComponentLifecycle',\r\n data() {\r\n return {\r\n title: 'component for options API lifecycle test',\r\n };\r\n },\r\n beforeCreate() {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum + 1);\r\n console.log('component for lifecycle test beforeCreate');\r\n },\r\n created() {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum + 1);\r\n console.log('component for lifecycle test created');\r\n },\r\n beforeMount() {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum + 1);\r\n console.log('component for lifecycle test beforeMount');\r\n },\r\n mounted() {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum + 1);\r\n console.log('component for lifecycle test mounted');\r\n },\r\n beforeUpdate() {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum + 1);\r\n console.log('component for lifecycle test beforeUpdate');\r\n },\r\n updated() {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum + 1);\r\n console.log('component for lifecycle test updated');\r\n },\r\n beforeUnmount() {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum - 1);\r\n console.log('component for lifecycle test beforeUnmount');\r\n },\r\n unmounted() {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum - 1);\r\n console.log('component for lifecycle test unmounted');\r\n },\r\n activated() {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum + 1);\r\n console.log('component for lifecycle test activated');\r\n },\r\n deactivated() {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum - 1);\r\n console.log('component for lifecycle test deactivated');\r\n },\r\n methods: {\r\n updateTitle() {\r\n this.title = 'component for lifecycle test updated';\r\n },\r\n },\r\n };\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/lifecycle/component/ChildComponentOptions"},"component_component-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/lifecycle/component/component-composition.uvue","code":"```vue\n<template>\r\n <!-- #ifdef APP -->\r\n <scroll-view style=\"flex:1\">\r\n <!-- #endif -->\r\n <view class=\"page container\">\r\n <text class=\"mb-10\">component lifecycle 组合式 API</text>\r\n <keep-alive>\r\n <component :is=\"aliveComponent\" @updateIsScroll=\"updateIsScroll\" />\r\n </keep-alive>\r\n <button class=\"mt-10\" @click=\"scrollToBottom\">scrollToBottom</button>\n <button id=\"toggle-alive-component-btn\" class=\"mt-10\" @click=\"toggleAliveComponent\">toggle alive component</button>\r\n <button class=\"mt-10\" @click=\"navigateToHome\">navigateTo home</button>\r\n </view>\r\n <!-- #ifdef APP -->\r\n </scroll-view>\r\n <!-- #endif -->\r\n</template>\r\n\r\n<script setup lang='uts'>\r\n import ChildComponent from './ChildComponentComposition.uvue'\r\n import { state, setLifeCycleNum } from '@/store/index.uts'\r\n\r\n const aliveComponent = shallowRef<any | null>(ChildComponent)\r\n\r\n const isScrolled = ref(false)\r\n\r\n // 自动化测试\r\n const pageGetLifeCycleNum = () : number => {\r\n return state.lifeCycleNum\r\n }\r\n\r\n // 自动化测试\r\n const pageSetLifeCycleNum = (num : number) => {\n setLifeCycleNum(num)\r\n }\r\n\r\n // 自动化测试\r\n const pullDownRefresh = () => {\r\n uni.startPullDownRefresh({\r\n success() {\r\n setTimeout(() => {\r\n uni.stopPullDownRefresh()\r\n }, 1500)\r\n },\r\n })\r\n }\r\n\r\n const scrollToBottom = () => {\r\n uni.pageScrollTo({\r\n scrollTop: 3000,\r\n })\r\n }\r\n \r\n const toggleAliveComponent = () => {\r\n aliveComponent.value = aliveComponent.value == null ? ChildComponent : null\r\n }\r\n\r\n const updateIsScroll = (val : boolean) => {\r\n isScrolled.value = val\r\n }\r\n\r\n // 自动化测试\r\n const getIsScrolled = () : boolean => {\r\n return isScrolled.value\r\n }\n \n const navigateToHome = () => {\n uni.navigateTo({\n url: '/pages/index/index'\n })\n }\r\n\r\n defineExpose({\r\n pageGetLifeCycleNum,\r\n pageSetLifeCycleNum,\r\n pullDownRefresh,\r\n scrollToBottom,\r\n getIsScrolled\r\n })\r\n</script>\r\n\r\n<style>\r\n .container {\r\n height: 1200px;\r\n }\r\n</style>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/lifecycle/component/component-composition"},"component_component-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/lifecycle/component/component-options.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <text class=\"mb-10\">component lifecycle 选项式 API</text>\r\n <keep-alive>\r\n <component :is=\"aliveComponent\" />\r\n </keep-alive>\r\n <button id=\"toggle-alive-component-btn\" class=\"mt-10\" @click=\"toggleAliveComponent\">toggle alive component</button>\n <button class=\"mt-10\" @click=\"navigateToHome\">navigateTo home</button>\r\n </view>\r\n</template>\r\n\r\n<script lang='uts'>\r\nimport ChildComponent from './ChildComponentOptions.uvue'\r\nimport { state } from '@/store/index.uts'\r\n\r\nexport default {\r\n components: { ChildComponent },\r\n data(){\r\n return {\r\n aliveComponent: ChildComponent as any | null,\r\n }\r\n },\r\n methods: {\r\n // 自动化测试\r\n getLifeCycleNum(): number {\r\n return state.lifeCycleNum\r\n },\r\n toggleAliveComponent(){\r\n this.aliveComponent = this.aliveComponent == null ? ChildComponent : null\r\n },\n navigateToHome() {\n uni.navigateTo({\n url: '/pages/index/index'\n })\n }\r\n },\r\n}\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/lifecycle/component/component-options"},"page_monitor-page-lifecycle-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/lifecycle/page/monitor-page-lifecycle-composition.uvue","code":"```vue\n<script lang=\"uts\" setup>\n// #ifdef APP-ANDROID\nonAppHide(() => {\n\tconsole.log('组件监听应用生命周期 => onAppHide')\n})\nonAppShow((onShowOptions: OnShowOptions) => {\n\tconsole.log('组件监听应用生命周期 => onAppShow => onShowOptions', onShowOptions)\n})\n// #endif\n\nonPageShow(() => {\n\tconsole.log('组件监听页面生命周期 => onPageShow')\n})\nonPageHide(() => {\n\tconsole.log('组件监听页面生命周期 => onPageHide')\n})\n</script>\n\n<template>组件监听页面、应用生命周期(组合式 API)</template>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/lifecycle/page/monitor-page-lifecycle-composition"},"page_monitor-page-lifecycle-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/lifecycle/page/monitor-page-lifecycle-options.uvue","code":"```vue\n<script lang=\"uts\">\nexport default {\n\tsetup() {\n\t\t// #ifdef APP-ANDROID\n\t\tonAppHide(() => {\n\t\t\tconsole.log('组件监听应用生命周期 => onAppHide')\n\t\t})\n\t\tonAppShow((onShowOptions: OnShowOptions) => {\n\t\t\tconsole.log('组件监听应用生命周期 => onAppShow => onShowOptions', onShowOptions)\n\t\t})\n\t\t// #endif\n\n\t\tonPageShow(() => {\n\t\t\tconsole.log('组件监听页面生命周期 => onPageShow')\n\t\t})\n\t\tonPageHide(() => {\n\t\t\tconsole.log('组件监听页面生命周期 => onPageHide')\n\t\t})\n\t}\n}\n</script>\n\n<template>组件监听页面、应用生命周期(选项式 API)</template>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/lifecycle/page/monitor-page-lifecycle-options"},"page_page-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/lifecycle/page/page-composition.uvue","code":"```vue\n<template>\r\n <!-- #ifdef APP -->\r\n <scroll-view style=\"flex: 1\" :bounces=\"false\">\r\n <!-- #endif -->\r\n <view class=\"page container\">\r\n <text>page lifecycle 组合式 API</text>\r\n <view class=\"flex flex-row justify-between mt-10\">\r\n <text>onLoad 触发:</text>\r\n <text>{{ isOnloadTriggered }}</text>\r\n </view>\r\n <view class=\"flex flex-row justify-between mt-10\">\r\n <text>onPageShow 触发:</text>\r\n <text>{{ isOnPageShowTriggered }}</text>\r\n </view>\r\n <view class=\"flex flex-row justify-between mt-10\">\r\n <text>onReady 触发:</text>\r\n <text>{{ isOnReadyTriggered }}</text>\r\n </view>\r\n <view class=\"flex flex-row justify-between mt-10\">\r\n <text>onPullDownRefresh 触发:</text>\r\n <text>{{ isOnPullDownRefreshTriggered }}</text>\r\n </view>\r\n <view class=\"flex flex-row justify-between mt-10\">\r\n <text>onReachBottom 触发:</text>\r\n <text>{{ isOnReachBottomTriggered }}</text>\r\n </view>\r\n <view class=\"flex flex-row justify-between mt-10\">\r\n <text>onBackPress 触发:</text>\r\n <text>{{ isOnBackPressTriggered }}</text>\r\n </view>\r\n <view class=\"flex flex-row justify-between mt-10\">\r\n <text>onPageHide 触发:</text>\r\n <text>{{ isOnPageHideTriggered }}</text>\r\n </view>\r\n <view class=\"flex flex-row justify-between mt-10\">\r\n <text>onResize 触发:</text>\r\n <text>{{ isOnResizeTriggered }}</text>\r\n </view>\r\n <view class=\"flex flex-row justify-between mt-10\">\r\n <MonitorPageLifecycleComposition />\r\n </view>\r\n <button class=\"mt-10\" @click=\"scrollToBottom\">scrollToBottom</button>\r\n <button class=\"mt-10\" @click=\"pullDownRefresh\">\r\n trigger pullDownRefresh\r\n </button>\r\n <button class=\"mt-10\" @click=\"goOnBackPress\">\r\n 跳转 onBackPress 示例\r\n </button>\r\n </view>\r\n <!-- #ifdef APP -->\r\n </scroll-view>\r\n <!-- #endif -->\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\nimport { state, setLifeCycleNum } from '@/store/index.uts'\r\nimport MonitorPageLifecycleComposition from './monitor-page-lifecycle-composition.uvue'\r\n\r\nconst isOnloadTriggered = ref(false)\r\nconst isOnPageShowTriggered = ref(false)\r\nconst isOnReadyTriggered = ref(false)\r\nconst isOnPullDownRefreshTriggered = ref(false)\r\nconst isOnPageScrollTriggered = ref(false)\r\nconst isOnReachBottomTriggered = ref(false)\r\nconst isOnBackPressTriggered = ref(false)\r\nconst isOnPageHideTriggered = ref(false)\r\nconst isOnResizeTriggered = ref(false)\r\n\r\ntype DataInfo = {\r\n isScrolled : boolean\r\n}\r\nconst dataInfo = reactive({\r\n isScrolled: false,\r\n} as DataInfo)\r\n\r\nonLoad((options : OnLoadOptions) => {\r\n console.log('onLoad', options)\r\n isOnloadTriggered.value = true\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum + 100)\r\n})\r\nonPageShow(() => {\r\n isOnPageShowTriggered.value = true\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum + 10)\r\n})\r\nonReady(() => {\r\n isOnReadyTriggered.value = true\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum + 10)\r\n})\r\nonPullDownRefresh(() => {\r\n isOnPullDownRefreshTriggered.value = true\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum + 10)\r\n})\r\nonPageScroll((e: OnPageScrollOptions) => {\r\n console.log('onPageScroll', e)\r\n isOnPageScrollTriggered.value = true\r\n // 自动化测试\r\n dataInfo.isScrolled = true\r\n})\r\nonReachBottom(() => {\r\n isOnReachBottomTriggered.value = true\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum + 10)\r\n})\r\nonBackPress((options : OnBackPressOptions) : boolean | null => {\r\n console.log('onBackPress', options)\r\n isOnBackPressTriggered.value = true\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum - 10)\r\n return null\r\n})\r\nonPageHide(() => {\r\n isOnPageHideTriggered.value = true\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum - 10)\r\n})\r\nonUnload(() => {\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum - 100)\r\n})\r\nonResize((options: OnResizeOptions) => {\r\n console.log('onBackPress', options)\r\n isOnResizeTriggered.value = true\r\n // 自动化测试\r\n setLifeCycleNum(state.lifeCycleNum + 10)\r\n})\r\n\r\n// 自动化测试\r\nconst pageGetLifeCycleNum = () : number => {\r\n return state.lifeCycleNum\r\n}\r\n// 自动化测试\r\nconst pageSetLifeCycleNum = (num : number) => {\r\n setLifeCycleNum(num)\r\n}\r\n\r\n// 自动化测试\r\nconst pullDownRefresh = () => {\r\n uni.startPullDownRefresh({\r\n success() {\r\n setTimeout(() => {\r\n uni.stopPullDownRefresh()\r\n }, 1500)\r\n },\r\n })\r\n}\r\n\r\nconst scrollToBottom = () => {\r\n uni.pageScrollTo({\r\n scrollTop: 2000,\r\n })\r\n}\r\n\r\nconst goOnBackPress = () => {\r\n uni.navigateTo({url: '/pages/lifecycle/page/onBackPress/on-back-press-composition'})\r\n}\r\n\r\ndefineExpose({\r\n dataInfo,\r\n pageGetLifeCycleNum,\r\n pageSetLifeCycleNum,\r\n pullDownRefresh,\r\n scrollToBottom,\r\n})\r\n</script>\r\n\r\n<style>\r\n.container {\r\n height: 1200px;\r\n}\r\n</style>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/lifecycle/page/page-composition"},"page_page-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/lifecycle/page/page-options.uvue","code":"```vue\n<template>\n <!-- #ifdef APP -->\n <scroll-view style=\"flex: 1\" :bounces=\"false\">\n <!-- #endif -->\n <view class=\"page container\">\n <text>page lifecycle 选项式 API</text>\n <view class=\"flex flex-row justify-between mt-10\">\n <text>onLoad 触发:</text>\n <text>{{ isOnloadTriggered }}</text>\n </view>\n <view class=\"flex flex-row justify-between mt-10\">\n <text>onShow 触发:</text>\n <text>{{ isOnShowTriggered }}</text>\n </view>\n <view class=\"flex flex-row justify-between mt-10\">\n <text>onReady 触发:</text>\n <text>{{ isOnReadyTriggered }}</text>\n </view>\n <view class=\"flex flex-row justify-between mt-10\">\n <text>onPullDownRefresh 触发:</text>\n <text>{{ isOnPullDownRefreshTriggered }}</text>\n </view>\n <view class=\"flex flex-row justify-between mt-10\">\n <text>onReachBottom 触发:</text>\n <text>{{ isOnReachBottomTriggered }}</text>\n </view>\n <view class=\"flex flex-row justify-between mt-10\">\n <text>onBackPress 触发:</text>\n <text>{{ isOnBackPressTriggered }}</text>\n </view>\n <view class=\"flex flex-row justify-between mt-10\">\n <text>onHide 触发:</text>\n <text>{{ isOnHideTriggered }}</text>\n </view>\n <view class=\"flex flex-row justify-between mt-10\">\n <text>onResize 触发:</text>\n <text>{{ isOnResizeTriggered }}</text>\n </view>\n\t\t\t<MonitorPageLifecycleOptions />\n <button class=\"mt-10\" @click=\"scrollToBottom\">scrollToBottom</button>\n <button class=\"mt-10\" @click=\"pullDownRefresh\">\n trigger pullDownRefresh\n </button>\n\t\t\t<button class=\"mt-10\" @click=\"goOnBackPress\">\n 跳转 onBackPress 示例\n </button>\n </view>\n <!-- #ifdef APP -->\n </scroll-view>\n <!-- #endif -->\n</template>\n\n<script lang=\"uts\">\nimport { state, setLifeCycleNum } from '@/store/index.uts'\nimport MonitorPageLifecycleOptions from './monitor-page-lifecycle-options.uvue'\n type DataInfo = {\n \tisScrolled: boolean\n }\nexport default {\n\tcomponents: { MonitorPageLifecycleOptions },\n\tdata() {\n\t\treturn {\n\t\t\tisOnloadTriggered: false,\n\t\t\tisOnShowTriggered: false,\n\t\t\tisOnReadyTriggered: false,\n\t\t\tisOnPullDownRefreshTriggered: false,\n\t\t\tisOnPageScrollTriggered: false,\n\t\t\tisOnReachBottomTriggered: false,\n\t\t\tisOnBackPressTriggered: false,\n\t\t\tisOnHideTriggered: false,\n\t\t\tisOnResizeTriggered: false,\n\t\t\tdataInfo: {\n isScrolled: false,\n } as DataInfo\n\t\t}\n\t},\n\tonLoad(options : OnLoadOptions) {\n\t\tconsole.log('onLoad', options)\n\t\tthis.isOnloadTriggered = true\n\t\t// 自动化测试\n\t\tsetLifeCycleNum(state.lifeCycleNum + 100)\n\t},\n\tonShow() {\n\t\tthis.isOnShowTriggered = true\n\t\t// 自动化测试\n\t\tsetLifeCycleNum(state.lifeCycleNum + 10)\n\t},\n\tonReady() {\n\t\tthis.isOnReadyTriggered = true\n\t\t// 自动化测试\n\t\tsetLifeCycleNum(state.lifeCycleNum + 10)\n\t},\n\tonPullDownRefresh() {\n\t\tthis.isOnPullDownRefreshTriggered = true\n\t\t// 自动化测试\n\t\tsetLifeCycleNum(state.lifeCycleNum + 10)\n\t},\n\tonPageScroll(e: OnPageScrollOptions) {\n\t\tconsole.log('onPageScroll', e)\n \tthis.isOnPageScrollTriggered = true\n\t\t// 自动化测试\n\t\tthis.dataInfo.isScrolled = true\n\t},\n\tonReachBottom() {\n\t\tthis.isOnReachBottomTriggered = true\n\t\t// 自动化测试\n\t\tsetLifeCycleNum(state.lifeCycleNum + 10)\n\t},\n\tonBackPress(options : OnBackPressOptions) : boolean | null {\n\t\tconsole.log('onBackPress', options)\n\t\tthis.isOnBackPressTriggered = true\n\t\t// 自动化测试\n\t\tsetLifeCycleNum(state.lifeCycleNum - 10)\n\t\treturn null\n\t},\n\tonHide() {\n\t\tthis.isOnHideTriggered = true\n\t\t// 自动化测试\n\t\tsetLifeCycleNum(state.lifeCycleNum - 10)\n\t},\n\tonUnload() {\n\t\t// 自动化测试\n\t\tsetLifeCycleNum(state.lifeCycleNum - 100)\n\t},\n\tonResize(options: OnResizeOptions) {\n\t\tconsole.log('onBackPress', options)\n\t\tthis.isOnResizeTriggered = true\n\t\t// 自动化测试\n\t\tsetLifeCycleNum(state.lifeCycleNum + 10)\n\t},\n\tmethods: {\n\t\t// 自动化测试\n\t\tpageGetLifeCycleNum() : number {\n\t\t\treturn state.lifeCycleNum\n\t\t},\n\t\t// 自动化测试\n\t\tpageSetLifeCycleNum(num : number) {\n\t\t\tsetLifeCycleNum(num)\n\t\t},\n\t\t// 自动化测试\n\t\tpullDownRefresh() {\n\t\t\tuni.startPullDownRefresh({\n\t\t\t\tsuccess() {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tuni.stopPullDownRefresh()\n\t\t\t\t\t\t// 一秒后立即停止下拉刷新不会触发 onPullDownRefresh,因为下拉动画时间大概需要1.1~1.2秒\n\t\t\t\t\t}, 1500)\n\t\t\t\t},\n\t\t\t})\n\t\t},\n\t\tscrollToBottom() {\n\t\t\tuni.pageScrollTo({\n\t\t\t\tscrollTop: 2000,\n\t\t\t})\n\t\t},\n\t\tgoOnBackPress() {\n\t\t\tuni.navigateTo({url: '/pages/lifecycle/page/onBackPress/on-back-press-options'})\n\t\t}\n\t},\n}\n</script>\n\n<style>\n.container {\n height: 1200px;\n}\n</style>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/lifecycle/page/page-options"},"page_onBackPress_on-back-press-child-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/lifecycle/page/onBackPress/on-back-press-child-composition.uvue","code":"```vue\n<template>\r\n <view class=\"page container\">\r\n <text>测试 onBackPress 生命周期返回 false</text>\r\n </view>\r\n</template>\r\n\r\n<script lang='uts' setup>\r\n onBackPress((options: OnBackPressOptions): boolean | null => {\r\n console.log('onBackPress', options)\r\n return false\r\n })\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/lifecycle/page/onBackPress/on-back-press-child-composition"},"page_onBackPress_on-back-press-child-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/lifecycle/page/onBackPress/on-back-press-child-options.uvue","code":"```vue\n<template>\r\n <view class=\"page container\">\r\n <text>测试 onBackPress 生命周期返回 false</text>\r\n </view>\r\n</template>\r\n\r\n<script lang='uts'>\r\n export default {\r\n onBackPress(options: OnBackPressOptions): boolean | null {\r\n console.log('onBackPress', options)\r\n return false\r\n }\r\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/lifecycle/page/onBackPress/on-back-press-child-options"},"page_onBackPress_on-back-press-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/lifecycle/page/onBackPress/on-back-press-composition.uvue","code":"```vue\n<template>\r\n <view class=\"page container\">\r\n <text>测试 onBackPress 生命周期返回 true</text>\r\n <button class=\"mt-10\" @click=\"goChildPage\">\r\n 跳转子页,测试返回值为 false\r\n </button>\r\n </view>\r\n</template>\r\n\r\n<script lang=\"uts\" setup>\r\n const backPressOptions = reactive({\r\n from: 'backbutton'\r\n } as OnBackPressOptions)\r\n\r\n onBackPress((options : OnBackPressOptions) : boolean | null => {\r\n console.log('onBackPress', options)\r\n backPressOptions.from = options.from\r\n return true\r\n })\r\n const goChildPage = () => {\r\n uni.navigateTo({ url: '/pages/lifecycle/page/onBackPress/on-back-press-child-composition' })\r\n }\r\n\r\n defineExpose({\r\n goChildPage,\r\n backPressOptions\r\n })\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/lifecycle/page/onBackPress/on-back-press-composition"},"page_onBackPress_on-back-press-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/lifecycle/page/onBackPress/on-back-press-options.uvue","code":"```vue\n<template>\r\n <view class=\"page container\">\r\n <text>测试 onBackPress 生命周期返回 true</text>\r\n <button class='mt-10' @click=\"goChildPage\">跳转子页,测试返回值为 false</button>\r\n </view>\r\n</template>\r\n\r\n<script lang='uts'>\r\n export default {\r\n data() {\r\n return {\r\n backPressOptions: {\r\n from: 'backbutton'\r\n } as OnBackPressOptions\r\n }\r\n },\r\n onBackPress(options: OnBackPressOptions): boolean | null {\r\n console.log('onBackPress', options)\r\n this.backPressOptions = options\r\n return true\r\n },\r\n methods: {\r\n goChildPage() {\r\n uni.navigateTo({\r\n url: '/pages/lifecycle/page/onBackPress/on-back-press-child-options'\r\n })\r\n }\r\n }\r\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/lifecycle/page/onBackPress/on-back-press-options"}},"E_render-function":{"cloneVNode_cloneVNode-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/render-function/cloneVNode/cloneVNode-composition.uvue","code":"```vue\n<script setup lang=\"uts\">\r\n defineOptions({\r\n render() : VNode {\r\n const originalVNode = h('view', { class: 'original' }, [\r\n h('text', {}, 'Hello World'),\r\n ])\r\n const clonedVNode = cloneVNode(originalVNode, { class: 'cloned' })\r\n\r\n return h('view', { class: 'flex flex-col' }, [originalVNode, clonedVNode])\r\n }\r\n })\r\n</script>\r\n\r\n<style>\r\n .original {\r\n background-color: #ff0000;\r\n }\r\n\r\n .cloned {\r\n background-color: #00ff00;\r\n }\r\n</style>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/render-function/cloneVNode/cloneVNode-composition"},"cloneVNode_cloneVNode-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/render-function/cloneVNode/cloneVNode-options.uvue","code":"```vue\n<script lang=\"uts\">\r\n export default {\r\n render() : VNode {\r\n const originalVNode = h('view', { class: 'original' }, [\r\n h('text', {}, 'Hello World'),\r\n ])\r\n const clonedVNode = cloneVNode(originalVNode, { class: 'cloned' })\r\n\r\n return h('view', { class: 'flex flex-col' }, [originalVNode, clonedVNode])\r\n }\r\n }\r\n</script>\r\n\r\n<style>\r\n .original {\r\n background-color: #ff0000;\r\n }\r\n\r\n .cloned {\r\n background-color: #00ff00;\r\n }\r\n</style>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/render-function/cloneVNode/cloneVNode-options"},"isVNode_isVNode-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/render-function/isVNode/isVNode-composition.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <view class=\"mb-10 flex flex-row justify-between\">\r\n <text>isVNode VNode:</text>\r\n <text id=\"is-vnode-vnode\">{{ isVNodeVNode }}</text>\r\n </view>\r\n <view class=\"mb-10 flex flex-row justify-between\">\r\n <text>isVNode string:</text>\r\n <text id=\"is-vnode-string\">{{ isVNodeString }}</text>\r\n </view>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\n const isVNodeVNode = ref(false)\r\n const isVNodeString = ref(false)\r\n const vnode = h('text', {}, 'Hello World')\r\n isVNodeVNode.value = isVNode(vnode)\r\n isVNodeString.value = isVNode('abc')\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/render-function/isVNode/isVNode-composition"},"isVNode_isVNode-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/render-function/isVNode/isVNode-options.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <view class=\"mb-10 flex flex-row justify-between\">\r\n <text>isVNode VNode:</text>\r\n <text id=\"is-vnode-vnode\">{{ isVNodeVNode }}</text>\r\n </view>\r\n <view class=\"mb-10 flex flex-row justify-between\">\r\n <text>isVNode string:</text>\r\n <text id=\"is-vnode-string\">{{ isVNodeString }}</text>\r\n </view>\r\n </view>\r\n</template>\r\n\r\n<script lang=\"uts\">\r\n export default {\r\n data() {\r\n return {\r\n isVNodeVNode: false,\r\n isVNodeString: false\r\n }\r\n },\r\n onLoad() {\r\n const vnode = h('text', {}, 'Hello World')\r\n this.isVNodeVNode = isVNode(vnode)\r\n this.isVNodeString = isVNode('abc')\r\n }\r\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/render-function/isVNode/isVNode-options"},"mergeProps_mergeProps-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/render-function/mergeProps/mergeProps-composition.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <view class=\"mb-10 flex flex-row justify-between\">\r\n <text>merged class</text>\r\n <text id=\"merged-class\">{{mergedProps['class']}}</text>\r\n </view>\r\n <button class=\"mb-10\" id=\"trigger-merged-click\" @click=\"triggerMergedClick\">trigger merged onClick</button>\r\n <view>\r\n <text class=\"mb-10\">prop function result list</text>\r\n <text class=\"click-res\" v-for=\"(item, index) in propFnResList\" :key=\"index\">{{item}}</text>\r\n </view>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\n type PropFn = () => string\r\n\r\n const propA = {\r\n class: 'foo',\r\n onClick: () : string => 'propA click res'\r\n }\r\n const propB = {\r\n class: { bar: true },\r\n onClick: () : string => 'propB click res'\r\n }\r\n const mergedProps = ref({})\r\n const propFnResList = ref<string[]>([])\r\n\r\n mergedProps.value = mergeProps(propA, propB)\r\n\r\n const triggerMergedClick = () => {\r\n (mergedProps.value['onClick'] as PropFn[]).forEach(fn => { propFnResList.value.push(fn()) })\r\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/render-function/mergeProps/mergeProps-composition"},"mergeProps_mergeProps-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/render-function/mergeProps/mergeProps-options.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <view class=\"mb-10 flex flex-row justify-between\">\r\n <text>merged class</text>\r\n <text id=\"merged-class\">{{mergedProps['class']}}</text>\r\n </view>\r\n <button class=\"mb-10\" id=\"trigger-merged-click\" @click=\"triggerMergedClick\">trigger merged onClick</button>\r\n <view>\r\n <text class=\"mb-10\">prop function result list</text>\r\n <text class=\"click-res\" v-for=\"(item, index) in propFnResList\" :key=\"index\">{{item}}</text>\r\n </view>\r\n </view>\r\n</template>\r\n\r\n<script lang=\"uts\">\r\n type PropFn = () => string\r\n export default {\r\n data() {\r\n return {\r\n propA: {\r\n class: 'foo',\r\n onClick: () : string => 'propA click res'\r\n },\r\n propB: {\r\n class: { bar: true },\r\n onClick: () : string => 'propB click res'\r\n },\r\n mergedProps: {},\r\n propFnResList: [] as string[],\r\n }\r\n },\r\n onLoad() {\r\n this.mergedProps = mergeProps(this.propA, this.propB)\r\n },\r\n methods: {\r\n triggerMergedClick() {\r\n (this.mergedProps['onClick'] as PropFn[]).forEach(fn => { this.propFnResList.push(fn()) })\r\n }\r\n }\r\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/render-function/mergeProps/mergeProps-options"},"render_Foo":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/render-function/render/Foo.uvue","code":"```vue\n<template>\r\n <view>\r\n <slot name=\"header\"></slot>\r\n <slot name=\"footer\"></slot>\r\n </view>\r\n</template>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/render-function/render/Foo"},"render_render-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/render-function/render/render-composition.uvue","code":"```vue\n<script setup lang=\"uts\">\nimport CompForHFunction from '@/components/CompForHFunction.uvue'\r\nimport CompForHFunctionWithSlot from '@/components/CompForHFunctionWithSlot.uvue'\nimport Foo from './Foo.uvue'\nconst msg = ref('default msg')\n// 故意外部声明为UTSJSONObject\nconst msgProps = { class: 'uni-common-mt msg', style: { color: 'blue' } }\nconst render = ():VNode => h('view', { class: 'page' }, [\n h(CompForHFunctionWithSlot, {}, () : VNode[] => [h('text', { class: 'comp-slot' }, 'component slot')]),\n h(CompForHFunction, { msg: msg.value }),\n h('text', msgProps, msg.value),\n h(Foo, null, {\n header: (): VNode[] => [h('text', { id: \"header\" }, 'header')],\n footer: (): VNode[] => [h('text', { id: \"footer\" }, 'footer')]\n }),\n h(\n 'button',\n {\n class: 'uni-common-mt btn',\n type: 'primary',\n onClick: () => {\n msg.value = 'new msg'\n }\n },\n 'click'\n )\n])\n</script>\n\n<template><render /></template>\n\n<style>\n.btn {\n color: red;\n}\n</style>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/render-function/render/render-composition"},"render_render-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/render-function/render/render-options.uvue","code":"```vue\n<script lang=\"uts\">\r\nimport CompForHFunction from '@/components/CompForHFunction.uvue'\r\nimport CompForHFunctionWithSlot from '@/components/CompForHFunctionWithSlot.uvue'\r\nimport Foo from './Foo.uvue'\r\n// 故意外部声明为UTSJSONObject\r\nconst msgProps = { class: 'uni-common-mt msg', style: { color: 'blue' } }\r\nexport default {\r\n data() {\r\n return {\r\n msg: 'default msg'\r\n }\r\n },\r\n render() : VNode {\r\n return h('view', { class: 'page' }, [\r\n h(CompForHFunctionWithSlot, {}, () : VNode[] => [h('text', { class: 'comp-slot' }, 'component slot')]),\r\n h(CompForHFunction, { msg: this.msg }),\r\n h('text', msgProps, this.msg),\r\n h(Foo, null, {\r\n header: (): VNode[] => [h('text', { id: \"header\" }, 'header')],\r\n footer: (): VNode[] => [h('text', { id: \"footer\" }, 'footer')]\r\n }),\r\n h(\r\n 'button',\r\n {\r\n class: 'uni-common-mt btn',\r\n type: 'primary',\r\n onClick: () => {\r\n this.msg = 'new msg'\r\n }\r\n },\r\n 'click'\r\n )\r\n ])\r\n }\r\n}\r\n</script>\r\n\r\n<style>\r\n.btn {\r\n color: red;\r\n}\r\n</style>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/render-function/render/render-options"},"resolveComponent_resolveComponent-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/render-function/resolveComponent/resolveComponent-composition.uvue","code":"```vue\n<script setup lang=\"uts\">\r\n defineOptions({\r\n render() : VNode {\r\n const CompForAppComponent = resolveComponent('CompForAppComponent')\r\n return h(CompForAppComponent)\r\n }\r\n })\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/render-function/resolveComponent/resolveComponent-composition"},"resolveComponent_resolveComponent-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/render-function/resolveComponent/resolveComponent-options.uvue","code":"```vue\n<script lang=\"uts\">\r\n export default {\r\n setup() {\r\n const CompForAppComponent = resolveComponent('CompForAppComponent')\r\n\r\n return ():VNode => {\r\n return h(CompForAppComponent)\r\n }\r\n }\r\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/render-function/resolveComponent/resolveComponent-options"},"withDirectives_withDirectives-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/render-function/withDirectives/withDirectives-composition.uvue","code":"```vue\n<script setup lang=\"ts\">\r\n defineOptions({\r\n data() {\r\n return {\r\n isMounted: false\r\n }\r\n },\r\n render() : VNode {\r\n const instance = getCurrentInstance()!.proxy!\r\n \r\n const customDirective = {\r\n mounted(el : UniElement, binding : DirectiveBinding, vnode : VNode, prevVNode: VNode | null) {\r\n console.log(el, binding, vnode, prevVNode)\r\n instance.$data['isMounted'] = true\r\n }\r\n } as Directive\r\n return h('view', { class: 'page' }, [\r\n withDirectives(h('text', 'Hello World'), [[customDirective]]),\r\n h('view', { class: 'mt-10 flex flex-row justify-between' }, [\r\n h('text', {}, `isMounted:`),\r\n h('text', { id: 'is-mounted' }, `${instance.$data['isMounted']}`),\r\n ])\r\n ])\r\n }\r\n })\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/render-function/withDirectives/withDirectives-composition"},"withDirectives_withDirectives-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/render-function/withDirectives/withDirectives-options.uvue","code":"```vue\n<script lang=\"uts\">\r\n export default {\r\n data() {\r\n return {\r\n isMounted: false\r\n }\r\n },\r\n render() : VNode {\r\n const instance = this\r\n\r\n const customDirective = {\r\n mounted(el : UniElement, binding : DirectiveBinding, vnode : VNode, prevVNode : VNode | null) {\r\n console.log(el, binding, vnode, prevVNode)\r\n instance.$data['isMounted'] = true\r\n }\r\n } as Directive\r\n return h('view', { class: 'page' }, [\r\n withDirectives(h('text', 'Hello World'), [[customDirective]]),\r\n h('view', { class: 'mt-10 flex flex-row justify-between' }, [\r\n h('text', {}, `isMounted:`),\r\n h('text', { id: 'is-mounted' }, `${instance.$data['isMounted']}`),\r\n ])\r\n ])\r\n }\r\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/render-function/withDirectives/withDirectives-options"},"withModifiers_withModifiers-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/render-function/withModifiers/withModifiers-composition.uvue","code":"```vue\n<script setup lang=\"uts\">\r\n defineOptions({\r\n data() {\r\n return {\r\n parentClickedNum: 0,\r\n childClickedNum: 0\r\n }\r\n },\r\n render() : VNode {\r\n const instance = getCurrentInstance()!.proxy!\r\n\r\n return h('view', { class: 'page' }, [\r\n h('view', {\r\n onClick: () => { instance.$data['childClickedNum'] = (instance.$data['parentClickedNum'] as number) + 1 }\r\n }, [\r\n h('button', {\r\n id: 'stop-btn',\r\n onClick: withModifiers(() => { instance.$data['childClickedNum'] = (instance.$data['childClickedNum'] as number) + 1 }, ['stop'])\r\n }, 'click stop')\r\n ]),\r\n h('view', { class: 'mt-10 flex flex-row justify-between' }, [\n h('text', {}, `parentCickedNum:`),\n h('text', { id: 'parent-num' }, `${instance.$data['parentClickedNum']}`),\n ]),\n h('view', { class: 'mt-10 flex flex-row justify-between' }, [\n h('text', {}, `childClickedNum:`),\n h('text', { id: 'child-num' }, `${instance.$data['childClickedNum']}`),\n ])\r\n ])\r\n }\r\n })\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/render-function/withModifiers/withModifiers-composition"},"withModifiers_withModifiers-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/render-function/withModifiers/withModifiers-options.uvue","code":"```vue\n<script lang=\"uts\">\r\n export default {\r\n data() {\r\n return {\r\n parentClickedNum: 0,\r\n childClickedNum: 0\r\n }\r\n },\r\n render() : VNode {\r\n const instance = this\r\n\r\n return h('view', { class: 'page' }, [\r\n h('view', {\r\n onClick: () => { instance.$data['childClickedNum'] = (instance.$data['parentClickedNum'] as number) + 1 }\r\n }, [\r\n h('button', {\r\n id: 'stop-btn',\r\n onClick: withModifiers(() => { instance.$data['childClickedNum'] = (instance.$data['childClickedNum'] as number) + 1 }, ['stop'])\r\n }, 'click stop')\r\n ]),\r\n h('view', { class: 'mt-10 flex flex-row justify-between' }, [\r\n h('text', {}, `parentCickedNum:`),\r\n h('text', { id: 'parent-num' }, `${instance.$data['parentClickedNum']}`),\r\n ]),\r\n h('view', { class: 'mt-10 flex flex-row justify-between' }, [\r\n h('text', {}, `childClickedNum:`),\r\n h('text', { id: 'child-num' }, `${instance.$data['childClickedNum']}`),\r\n ])\r\n ])\r\n }\r\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/render-function/withModifiers/withModifiers-options"}},"E_built-in":{"component_keep-alive_keep-alive-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/built-in/component/keep-alive/keep-alive-composition.uvue","code":"```vue\n<template>\n <!-- #ifdef APP -->\n <scroll-view style=\"flex: 1\">\n <!-- #endif -->\n <view class=\"page\">\n <text class=\"bold mb-10\">include=\"Counter,Message\"</text>\n <KeepAlive include=\"Counter,Message\">\n <component :is=\"currentComponent\"></component>\n </KeepAlive>\n <view class=\"hr\"></view>\n <text class=\"bold mt-10 mb-10\">:include=\"/Counter|Message/\"</text>\n <KeepAlive :include=\"/Counter|Message/\">\n <component :is=\"currentComponent\"></component>\n </KeepAlive>\n <view class=\"hr\"></view>\n <text class=\"bold mb-10 mb-10\">:include=\"['Counter', 'Message']\"</text>\n <KeepAlive :include=\"['Counter', 'Message']\">\n <component :is=\"currentComponent\"></component>\n </KeepAlive>\n <view class=\"hr\"></view>\n <text class=\"bold mt-10 mb-10\">exclude=\"ShouldExclude\"</text>\n <KeepAlive exclude=\"ShouldExclude\">\n <component :is=\"currentComponent\"></component>\n </KeepAlive>\n <view class=\"hr\"></view>\n <text class=\"bold mt-10 mb-10\">:max=\"2\"</text>\n <KeepAlive :max=\"2\">\n <component :is=\"currentComponent\"></component>\n </KeepAlive>\n <view class=\"hr\"></view>\n <button class=\"mt-10 show-counter\" @click=\"changeComponent('Counter')\">show Counter</button>\n <button class=\"mt-10 show-message\" @click=\"changeComponent('Message')\">show Message</button>\n <button class=\"mt-10 show-should-exclude\" @click=\"changeComponent('ShouldExclude')\">show ShouldExclude</button>\n </view>\n <!-- #ifdef APP -->\n </scroll-view>\n <!-- #endif -->\n</template>\n\n<script setup lang=\"uts\">\nimport Counter from '@/components/keep-alive/Counter.uvue'\nimport Message from '@/components/keep-alive/Message.uvue'\nimport ShouldExclude from '@/components/keep-alive/ShouldExclude.uvue'\n\ndefineOptions({\n components: {\n Counter,\n Message,\n ShouldExclude\n }\n})\n\nconst currentComponent = ref<string>('ShouldExclude')\n\nconst changeComponent = (componentName: string) => {\n currentComponent.value = componentName\n}\n</script>\n\n<style>\n.hr {\n margin: 30rpx 0;\n border-bottom: 1px solid #ccc;\n}\n</style>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/built-in/component/keep-alive/keep-alive-composition"},"component_keep-alive_keep-alive-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/built-in/component/keep-alive/keep-alive-options.uvue","code":"```vue\n<template>\n <!-- #ifdef APP -->\n <scroll-view style=\"flex: 1\">\n <!-- #endif -->\n <view class=\"page\">\n <text class=\"bold mb-10\">include \"Counter,Message\"</text>\n <KeepAlive include=\"Counter,Message\">\n <component :is=\"currentComponent\"></component>\n </KeepAlive>\n <view class=\"hr\"></view>\n <text class=\"bold mt-10 mb-10\">include \"/Counter|Message/\"</text>\n <KeepAlive :include=\"/Counter|Message/\">\n <component :is=\"currentComponent\"></component>\n </KeepAlive>\n <view class=\"hr\"></view>\n <text class=\"bold mt-10 mb-10\">include \"['Counter', 'Message']\"</text>\n <KeepAlive :include=\"['Counter', 'Message']\">\n <component :is=\"currentComponent\"></component>\n </KeepAlive>\n <view class=\"hr\"></view>\n <text class=\"bold mt-10 mb-10\">exclude \"ShouldExclude\"</text>\n <KeepAlive exclude=\"ShouldExclude\">\n <component :is=\"currentComponent\"></component>\n </KeepAlive>\n <view class=\"hr\"></view>\n <text class=\"bold mt-10 mb-10\">max 2</text>\n <KeepAlive :max=\"2\">\n <component :is=\"currentComponent\"></component>\n </KeepAlive>\n <view class=\"hr\"></view>\n <button class=\"mt-10 show-counter\" @click=\"changeComponent('Counter')\">show Counter</button>\n <button class=\"mt-10 show-message\" @click=\"changeComponent('Message')\">show Message</button>\n <button class=\"mt-10 show-should-exclude\" @click=\"changeComponent('ShouldExclude')\">show ShouldExclude</button>\n </view>\n <!-- #ifdef APP -->\n </scroll-view>\n <!-- #endif -->\n</template>\n\n<script lang=\"uts\">\nimport Counter from '@/components/keep-alive/Counter.uvue'\nimport Message from '@/components/keep-alive/Message.uvue'\nimport ShouldExclude from '@/components/keep-alive/ShouldExclude.uvue'\nexport default {\n components: {\n Counter,\n Message,\n ShouldExclude\n },\n data() {\n return {\n currentComponent: 'ShouldExclude'\n }\n },\n methods: {\n changeComponent(componentName: string) {\n this.currentComponent = componentName\n }\n }\n}\n</script>\n\n<style>\n.hr {\n margin-top: 30rpx;\n border-bottom: 1px solid #ccc;\n}\n</style>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/built-in/component/keep-alive/keep-alive-options"},"component_teleport_teleport-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/built-in/component/teleport/teleport-composition.uvue","code":"```vue\n<template>\n <!-- #ifdef APP -->\n <scroll-view style=\"flex: 1\">\n <!-- #endif -->\n <view id=\"container\" class=\"container\">\n <text class=\"text\">.container 区域</text>\n <view id=\"content1\" class=\"content content-1\">\n <text class=\"text\">content1 区域</text>\n </view>\n <view id=\"content2\" class=\"content content-2\">\n <text class=\"text\">content2 区域</text>\n </view>\n <teleport v-if=\"show\" to=\"#content1\" :disabled=\"disabled\">\n <view class=\"send-content\">\n <text class=\"send-content-text\">内容在.container中,使用teleport在#content1元素中展示</text>\n </view>\n </teleport>\n </view>\n <!-- #ifdef APP -->\n </scroll-view>\n <!-- #endif -->\n</template>\n\n<script setup lang=\"uts\">\nconst to = ref<string>('content1')\nconst showingString = ref<string>('穿梭内容在 body 中')\nconst disabled = ref<boolean>(false)\nconst show = ref<boolean>(false)\n\nonReady(() => {\n // 需要等内容挂载后,teleport才生效\n show.value = true\n})\nconst changePosition = () => {\n to.value = '#content1'\n}\n\ndefineExpose({\n changePosition\n})\n</script>\n\n<style>\n.container {\n background-color: #f5f5f5;\n border: 1px #ccc solid;\n margin: 5px;\n padding: 10px;\n}\n\n.text {\n margin: 5px 0;\n}\n\n.content {\n height: 120px;\n border: 1px #ccc solid;\n margin: 5px;\n padding: 10px;\n}\n\n.send-content {\n padding: 5px;\n background-color: #ff5a5f;\n height: 50px;\n}\n\n.send-content-text {\n color: #fff;\n font-size: 12px;\n}\n</style>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/built-in/component/teleport/teleport-composition"},"component_teleport_teleport-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/built-in/component/teleport/teleport-options.uvue","code":"```vue\n<template>\n <!-- #ifdef APP -->\n <scroll-view style=\"flex: 1\">\n <!-- #endif -->\n <view id=\"container\" class=\"container\">\n <text class=\"text\">.container 区域</text>\n <view id=\"content1\" class=\"content content-1\">\n <text class=\"text\">content1 区域</text>\n </view>\n <view id=\"content2\" class=\"content content-2\">\n <text class=\"text\">content2 区域</text>\n </view>\n <teleport v-if=\"show\" to=\"#content1\" :disabled=\"disabled\">\n <view class=\"send-content\">\n <text class=\"send-content-text\">内容在.container中,使用teleport在#content1元素中展示</text>\n </view>\n </teleport>\n </view>\n <!-- #ifdef APP -->\n </scroll-view>\n <!-- #endif -->\n</template>\n\n<script>\nexport default {\n data() {\n return {\n to: 'content1',\n disabled: false,\n showingString: '穿梭内容在 body 中',\n show: false\n }\n },\n onReady() {\n // 需要等内容挂载后,teleport才生效\n this.show = true\n },\n methods: {\n changePosition() {\n this.to = '#content1'\n }\n }\n}\n</script>\n\n<style>\n.container {\n background-color: #f5f5f5;\n border: 1px #ccc solid;\n margin: 5px;\n padding: 10px;\n}\n.text {\n margin: 5px 0;\n}\n\n.content {\n height: 120px;\n border: 1px #ccc solid;\n margin: 5px;\n padding: 10px;\n}\n\n.send-content {\n padding: 5px;\n background-color: #ff5a5f;\n height: 50px;\n}\n\n.send-content-text {\n color: #fff;\n font-size: 12px;\n}\n</style>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/built-in/component/teleport/teleport-options"},"special-elements_component_component-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/built-in/special-elements/component/component-composition.uvue","code":"```vue\n<template>\r\n <view class=\"container\">\r\n <component :is=\"currentComponentInstance\" />\r\n <component :is=\"myInput\" :value=\"inputValue\" id=\"my-input\" />\r\n <button @click=\"changeCurrentComponent\">change current component</button>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\n import Foo from '../../../../components/Foo.uvue'\r\n import Bar from '../../../../components/Bar.uvue'\r\n\r\n const currentComponentStr = ref('Foo')\r\n const currentComponentInstance = ref(Foo)\r\n const myInput = ref('input')\r\n const inputValue = ref('default value')\r\n\r\n const changeCurrentComponent = () => {\r\n if (currentComponentStr.value === 'Foo') {\r\n currentComponentStr.value = 'Bar'\r\n currentComponentInstance.value = Bar\r\n } else {\r\n currentComponentStr.value = 'Foo'\r\n currentComponentInstance.value = Foo\r\n }\r\n }\r\n\r\n defineExpose({\r\n changeCurrentComponent\r\n })\r\n</script>\r\n\r\n<style>\r\n .item {\r\n display: flex;\r\n flex-direction: row;\r\n margin: 15px;\r\n border: #eee solid 1px;\r\n }\r\n</style>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/built-in/special-elements/component/component-composition"},"special-elements_component_component-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/built-in/special-elements/component/component-options.uvue","code":"```vue\n<template>\r\n <view class=\"container\">\r\n <component :is=\"currentComponentStr\" />\r\n <component :is=\"currentComponentInstance\" />\r\n <component :is=\"myInput\" :value=\"inputValue\" id=\"my-input\" />\r\n <button @click=\"changeCurrentComponent\">change current component</button>\r\n </view>\r\n</template>\r\n\r\n<script lang=\"uts\">\r\n import Foo from '../../../../components/Foo.uvue'\r\n import Bar from '../../../../components/Bar.uvue'\r\n export default {\r\n components: {\r\n Foo,\r\n Bar\r\n },\r\n data() {\r\n return {\r\n currentComponentStr: 'Foo',\r\n currentComponentInstance: Foo,\r\n myInput: 'input',\r\n inputValue: 'default value'\r\n }\r\n },\r\n methods: {\r\n changeCurrentComponent() {\r\n if (this.currentComponentStr === 'Foo') {\r\n this.currentComponentStr = 'Bar'\r\n this.currentComponentInstance = Bar\r\n } else {\r\n this.currentComponentStr = 'Foo'\r\n this.currentComponentInstance = Foo\r\n }\r\n }\r\n }\r\n }\r\n</script>\r\n\r\n<style>\r\n .item {\r\n display: flex;\r\n flex-direction: row;\r\n margin: 15px;\r\n border: #eee solid 1px;\r\n }\r\n</style>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/built-in/special-elements/component/component-options"},"special-elements_slots_child-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/built-in/special-elements/slots/child-composition.uvue","code":"```vue\n<template>\n <view class=\"container\">\n <view>\n <slot name=\"header\" msg=\"Here might be a page title\"></slot>\n </view>\n <view>\n <slot msg=\"A paragraph for the main content.\"></slot>\n </view>\n <view>\n <slot name=\"footer\" msg=\"Here's some contact info\"></slot>\n </view>\n </view>\n</template>\n\n<script setup lang=\"uts\">\ndefineOptions({\n name: 'child'\n})\n\ndefineSlots<{\n default(props: { msg: string }): any\n header(props: { msg: string }): any\n footer(props: { msg: string }): any\n}>()\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/built-in/special-elements/slots/child-composition"},"special-elements_slots_child-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/built-in/special-elements/slots/child-options.uvue","code":"```vue\n<template>\n <view class=\"container\">\n <view>\n <slot name=\"header\" msg=\"Here might be a page title\"></slot>\n </view>\n <view>\n <slot msg=\"A paragraph for the main content.\"></slot>\n </view>\n <view>\n <slot name=\"footer\" msg=\"Here's some contact info\"></slot>\n </view>\n </view>\n</template>\n\n<script lang=\"uts\">\nexport default {\n name: 'child',\n slots: Object as SlotsType<{\n header: { msg: string }\n default: { msg: string }\n footer: { msg: string }\n }>\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/built-in/special-elements/slots/child-options"},"special-elements_slots_slots-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/built-in/special-elements/slots/slots-composition.uvue","code":"```vue\n<template>\n <view class=\"content\">\n <child>\n <template v-slot:header=\"slotProps\">\n <view class=\"header\">{{ slotProps.msg }}</view>\n </template>\n <template v-slot:default=\"{ msg }\">\n <view class=\"main\">{{ msg }}</view>\n </template>\n <template #footer=\"{ msg: text }\">\n <view class=\"footer\">{{ text }}</view>\n </template>\n </child>\n </view>\n</template>\n\n<script setup lang=\"uts\">\nimport child from './child-composition.uvue'\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/built-in/special-elements/slots/slots-composition"},"special-elements_slots_slots-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/built-in/special-elements/slots/slots-options.uvue","code":"```vue\n<template>\n <view class=\"content\">\n <child>\n <template v-slot:header=\"slotProps\">\n <view class=\"header\">{{ slotProps.msg }}</view>\n </template>\n <template v-slot:default=\"{ msg }\">\n <view class=\"main\">{{ msg }}</view>\n </template>\n <template #footer=\"{ msg: text }\">\n <view class=\"footer\">{{ text }}</view>\n </template>\n </child>\n </view>\n</template>\n\n<script lang=\"uts\">\nimport child from './child-options.uvue'\nexport default {\n components: { child }\n}\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/built-in/special-elements/slots/slots-options"},"special-elements_template_template-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/built-in/special-elements/template/template-composition.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <template v-if=\"dataInfo.isShow\">\n <text id=\"title\">{{ title }}</text>\n </template>\n <template v-else>\n <text>隐藏标题时显示</text>\n </template>\n <button id=\"show-botton\" @click=\"handleShow\">{{ dataInfo.isShow ? '点击隐藏' : '点击显示' }}</button>\n <template v-for=\"(item, index) in list\" :key=\"index\">\n <text :class=\"'item'\">{{ index + 1 }}.{{ item.name }}</text>\n </template>\n <button @click=\"goMapStyle\">跳转绑定 Map 类型 style 页面</button>\n </view>\n</template>\n\n<script setup lang=\"uts\">\ntype DataInfo = {\n isShow: boolean\n}\ntype ListItem = {\n name: string\n}\n\nconst dataInfo = reactive({\n isShow: false\n} as DataInfo)\n\nconst title = ref<string>('hello')\nconst list = ref<ListItem[]>([\n {\n name: 'foo1'\n },\n {\n name: 'foo2'\n }\n])\n\nconst handleShow = () => {\n dataInfo.isShow = !dataInfo.isShow\n}\n\nconst goMapStyle = () => {\n uni.navigateTo({ url: '/pages/built-in/special-elements/template/template-map-style-composition' })\n}\n\ndefineExpose({\n dataInfo,\n goMapStyle\n})\n</script>\n\n<style>\n.item {\n margin: 15px;\n padding: 4px 8px;\n border: #eee solid 1px;\n}\n</style>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/built-in/special-elements/template/template-composition"},"special-elements_template_template-map-style-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/built-in/special-elements/template/template-map-style-composition.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <view :style=\"[styleW200, styleRounded, styleBorder]\" :class=\"[classPadding10, classBgRed]\">\n <text>width:200px;</text>\n <text>padding:10px;</text>\n <text>border-radius:8px;</text>\n <text>border:1px solid #ccc;</text>\n <text>background-color: red;</text>\n <text class=\"text-white\">this text color: #fff;</text>\n </view>\n <view :style=\"[stylePadding10, styleBgGreen, styleMargin10]\" :class=\"[classH200, classRounded, classBorder, classBorderRed]\">\n <text>height:200px;</text>\n <text>margin:10px;</text>\n <text>padding:10px;</text>\n <text>border-radius:8px;</text>\n <text>border:1px solid #ccc;</text>\n <text>border-color:red;</text>\n <text>background-color: green;</text>\n <text class=\"text-blue\">this text color: blue;</text>\n </view>\n <view :style=\"styleBgBlue\" :class=\"classPadding10\">\n <text>padding:10px;</text>\n <text>background-color: blue;</text>\n <text class=\"text-red\">this text color: red;</text>\n </view>\n <button class=\"mt-10\" id=\"btn\" @click=\"toggleIsClassValid\">toggle isClassValid</button>\n </view>\n</template>\n\n<script setup lang=\"uts\">\nconst styleW200 = ref(new Map<string, string>([['width', '200px']]))\nconst styleH200 = ref(new Map<string, string>([['height', '200px']]))\nconst stylePadding10 = ref(new Map<string, string>([['padding', '10px']]))\nconst styleMargin10 = ref(new Map<string, string>([['margin', '10px']]))\nconst styleRounded = ref(new Map<string, string>([['border-radius', '8px']]))\nconst styleBorder = ref(new Map<string, string>([['border', '1px solid #ccc']]))\nconst styleBorderRed = ref(new Map<string, string>([['border-color', 'red']]))\nconst styleBorderBlue = ref(new Map<string, string>([['border-color', 'blue']]))\nconst styleBorderGreen = ref(new Map<string, string>([['border-color', 'green']]))\nconst styleBgGreen = ref(new Map<string, string>([['background-color', 'green']]))\nconst styleBgBlue = ref(new Map<string, string>([['background-color', 'blue']]))\nconst styleBgRed = ref(new Map<string, string>([['background-color', 'red']]))\nconst styleTextWhite = ref(new Map<string, string>([['color', '#fff']]))\nconst styleTextBlack = ref(new Map<string, string>([['color', '#000']]))\nconst styleTextRed = ref(new Map<string, string>([['color', 'red']]))\nconst styleTextBlue = ref(new Map<string, string>([['color', 'blue']]))\nconst styleTextGreen = ref(new Map<string, string>([['color', 'green']]))\nconst isClassValid = ref(true)\nconst classW200 = ref(new Map<string, boolean>([['w-200', true]]))\nconst classH200 = ref(new Map<string, boolean>([['h-200', true]]))\nconst classPadding10 = ref(new Map<string, boolean>([['padding-10', true]]))\nconst classMargin10 = ref(new Map<string, boolean>([['margin-10', true]]))\nconst classRounded = ref(new Map<string, boolean>([['rounded', true]]))\nconst classBorder = ref(new Map<string, boolean>([['border', true]]))\nconst classBorderRed = ref(new Map<string, boolean>([['border-red', true]]))\nconst classBorderBlue = ref(new Map<string, boolean>([['border-blue', true]]))\nconst classBorderGreen = ref(new Map<string, boolean>([['border-green', true]]))\nconst classBgGreen = ref(new Map<string, boolean>([['bg-green', true]]))\nconst classBgBlue = ref(new Map<string, boolean>([['bg-blue', true]]))\nconst classBgRed = ref(new Map<string, boolean>([['bg-red', true]]))\nconst classTextWhite = ref(new Map<string, boolean>([['text-white', true]]))\nconst classTextBlack = ref(new Map<string, boolean>([['text-black', true]]))\nconst classTextRed = ref(new Map<string, boolean>([['text-red', true]]))\nconst classTextBlue = ref(new Map<string, boolean>([['text-blue', true]]))\nconst classTextGreen = ref(new Map<string, boolean>([['text-green', true]]))\nconst toggleIsClassValid = () => {\n isClassValid.value = !isClassValid.value\n classW200.value = new Map<string, boolean>([['w-200', isClassValid.value]])\n classH200.value = new Map<string, boolean>([['h-200', isClassValid.value]])\n classPadding10.value = new Map<string, boolean>([['padding-10', isClassValid.value]])\n classMargin10.value = new Map<string, boolean>([['margin-10', isClassValid.value]])\n classRounded.value = new Map<string, boolean>([['rounded', isClassValid.value]])\n classBorder.value = new Map<string, boolean>([['border', isClassValid.value]])\n classBorderRed.value = new Map<string, boolean>([['border-red', isClassValid.value]])\n classBorderBlue.value = new Map<string, boolean>([['border-blue', isClassValid.value]])\n classBorderGreen.value = new Map<string, boolean>([['border-green', isClassValid.value]])\n classBgGreen.value = new Map<string, boolean>([['bg-green', isClassValid.value]])\n classBgBlue.value = new Map<string, boolean>([['bg-blue', isClassValid.value]])\n classBgRed.value = new Map<string, boolean>([['bg-red', isClassValid.value]])\n classTextWhite.value = new Map<string, boolean>([['text-white', isClassValid.value]])\n classTextBlack.value = new Map<string, boolean>([['text-black', isClassValid.value]])\n classTextRed.value = new Map<string, boolean>([['text-red', isClassValid.value]])\n classTextBlue.value = new Map<string, boolean>([['text-blue', isClassValid.value]])\n classTextGreen.value = new Map<string, boolean>([['text-green', isClassValid.value]])\n}\n</script>\n\n<style>\n.w-200 {\n width: 200px;\n}\n\n.h-200 {\n height: 200px;\n}\n\n.padding-10 {\n padding: 10px;\n}\n\n.margin-10 {\n margin: 10px;\n}\n\n.rounded {\n border-radius: 8px;\n}\n\n.border {\n border: 1px solid #ccc;\n}\n\n.border-red {\n border-color: red;\n}\n\n.border-green {\n border-color: green;\n}\n\n.border-blue {\n border-color: blue;\n}\n\n.bg-green {\n background-color: green;\n}\n\n.bg-red {\n background-color: red;\n}\n\n.bg-blue {\n background-color: blue;\n}\n\n.text-white {\n color: #fff;\n}\n\n.text-black {\n color: #000;\n}\n\n.text-green {\n color: green;\n}\n\n.text-red {\n color: red;\n}\n\n.text-blue {\n color: blue;\n}\n</style>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/built-in/special-elements/template/template-map-style-composition"},"special-elements_template_template-map-style-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/built-in/special-elements/template/template-map-style-options.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <view :style=\"[styleW200, styleRounded, styleBorder]\" :class=\"[classPadding10, classBgRed]\">\n <text>width:200px;</text>\n <text>padding:10px;</text>\n <text>border-radius:8px;</text>\n <text>border:1px solid #ccc;</text>\n <text>background-color: red;</text>\n <text class=\"text-white\">this text color: #fff;</text>\n </view>\n <view :style=\"[stylePadding10, styleBgGreen, styleMargin10]\" :class=\"[classH200, classRounded, classBorder, classBorderRed]\">\n <text>height:200px;</text>\n <text>margin:10px;</text>\n <text>padding:10px;</text>\n <text>border-radius:8px;</text>\n <text>border:1px solid #ccc;</text>\n <text>border-color:red;</text>\n <text>background-color: green;</text>\n <text class=\"text-blue\">this text color: blue;</text>\n </view>\n <view :style=\"styleBgBlue\" :class=\"classPadding10\">\n <text>padding:10px;</text>\n <text>background-color: blue;</text>\n <text class=\"text-red\">this text color: red;</text>\n </view>\n <button class=\"mt-10\" id=\"btn\" @click=\"toggleIsClassValid\">toggle isClassValid</button>\n </view>\n</template>\n\n<script lang=\"uts\">\nexport default {\n data() {\n return {\n styleW200: new Map<string, string>([['width', '200px']]),\n styleH200: new Map<string, string>([['height', '200px']]),\n stylePadding10: new Map<string, string>([['padding', '10px']]),\n styleMargin10: new Map<string, string>([['margin', '10px']]),\n styleRounded: new Map<string, string>([['border-radius', '8px']]),\n styleBorder: new Map<string, string>([['border', '1px solid #ccc']]),\n styleBorderRed: new Map<string, string>([['border-color', 'red']]),\n styleBorderBlue: new Map<string, string>([['border-color', 'blue']]),\n styleBorderGreen: new Map<string, string>([['border-color', 'green']]),\n styleBgGreen: new Map<string, string>([['background-color', 'green']]),\n styleBgBlue: new Map<string, string>([['background-color', 'blue']]),\n styleBgRed: new Map<string, string>([['background-color', 'red']]),\n styleTextWhite: new Map<string, string>([['color', '#fff']]),\n styleTextBlack: new Map<string, string>([['color', '#000']]),\n styleTextRed: new Map<string, string>([['color', 'red']]),\n styleTextBlue: new Map<string, string>([['color', 'blue']]),\n styleTextGreen: new Map<string, string>([['color', 'green']]),\n isClassValid: true,\n classW200: new Map<string, boolean>([['w-200', true]]),\n classH200: new Map<string, boolean>([['h-200', true]]),\n classPadding10: new Map<string, boolean>([['padding-10', true]]),\n classMargin10: new Map<string, boolean>([['margin-10', true]]),\n classRounded: new Map<string, boolean>([['rounded', true]]),\n classBorder: new Map<string, boolean>([['border', true]]),\n classBorderRed: new Map<string, boolean>([['border-red', true]]),\n classBorderBlue: new Map<string, boolean>([['border-blue', true]]),\n classBorderGreen: new Map<string, boolean>([['border-green', true]]),\n classBgGreen: new Map<string, boolean>([['bg-green', true]]),\n classBgBlue: new Map<string, boolean>([['bg-blue', true]]),\n classBgRed: new Map<string, boolean>([['bg-red', true]]),\n classTextWhite: new Map<string, boolean>([['text-white', true]]),\n classTextBlack: new Map<string, boolean>([['text-black', true]]),\n classTextRed: new Map<string, boolean>([['text-red', true]]),\n classTextBlue: new Map<string, boolean>([['text-blue', true]]),\n classTextGreen: new Map<string, boolean>([['text-green', true]])\n }\n },\n methods: {\n toggleIsClassValid() {\n this.isClassValid = !this.isClassValid\n this.classW200 = new Map<string, boolean>([['w-200', this.isClassValid]])\n this.classH200 = new Map<string, boolean>([['h-200', this.isClassValid]])\n this.classPadding10 = new Map<string, boolean>([['padding-10', this.isClassValid]])\n this.classMargin10 = new Map<string, boolean>([['margin-10', this.isClassValid]])\n this.classRounded = new Map<string, boolean>([['rounded', this.isClassValid]])\n this.classBorder = new Map<string, boolean>([['border', this.isClassValid]])\n this.classBorderRed = new Map<string, boolean>([['border-red', this.isClassValid]])\n this.classBorderBlue = new Map<string, boolean>([['border-blue', this.isClassValid]])\n this.classBorderGreen = new Map<string, boolean>([['border-green', this.isClassValid]])\n this.classBgGreen = new Map<string, boolean>([['bg-green', this.isClassValid]])\n this.classBgBlue = new Map<string, boolean>([['bg-blue', this.isClassValid]])\n this.classBgRed = new Map<string, boolean>([['bg-red', this.isClassValid]])\n this.classTextWhite = new Map<string, boolean>([['text-white', this.isClassValid]])\n this.classTextBlack = new Map<string, boolean>([['text-black', this.isClassValid]])\n this.classTextRed = new Map<string, boolean>([['text-red', this.isClassValid]])\n this.classTextBlue = new Map<string, boolean>([['text-blue', this.isClassValid]])\n this.classTextGreen = new Map<string, boolean>([['text-green', this.isClassValid]])\n }\n }\n}\n</script>\n\n<style>\n.w-200 {\n width: 200px;\n}\n\n.h-200 {\n height: 200px;\n}\n\n.padding-10 {\n padding: 10px;\n}\n\n.margin-10 {\n margin: 10px;\n}\n\n.rounded {\n border-radius: 8px;\n}\n\n.border {\n border: 1px solid #ccc;\n}\n\n.border-red {\n border-color: red;\n}\n\n.border-green {\n border-color: green;\n}\n\n.border-blue {\n border-color: blue;\n}\n\n.bg-green {\n background-color: green;\n}\n\n.bg-red {\n background-color: red;\n}\n\n.bg-blue {\n background-color: blue;\n}\n\n.text-white {\n color: #fff;\n}\n\n.text-black {\n color: #000;\n}\n\n.text-green {\n color: green;\n}\n\n.text-red {\n color: red;\n}\n\n.text-blue {\n color: blue;\n}\n</style>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/built-in/special-elements/template/template-map-style-options"},"special-elements_template_template-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/built-in/special-elements/template/template-options.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <template v-if=\"dataInfo.isShow\">\n <text id=\"title\">{{ title }}</text>\n </template>\n <template v-else>\n <text>隐藏标题时显示</text>\n </template>\n <button id=\"show-botton\" @click=\"handleShow\">{{ dataInfo.isShow ? '点击隐藏' : '点击显示' }}</button>\n <template v-for=\"(item, index) in list\" :key=\"index\">\n <text :class=\"'item'\">{{ index + 1 }}.{{ item.name }}</text>\n </template>\n <button @click=\"goMapStyle\">跳转绑定 Map 类型 style 页面</button>\n </view>\n</template>\n\n<script lang='uts'>\ntype DataInfo = {\n isShow: boolean\n}\ntype objType = {\n name : string\n}\nexport default {\n data() {\n return {\n title: \"hello\",\n dataInfo: {\n isShow: false,\n } as DataInfo,\n list: [{\n name: 'foo1'\n },\n {\n name: 'foo2'\n }\n ] as objType[]\n }\n },\n methods: {\n handleShow() {\n this.dataInfo.isShow = !this.dataInfo.isShow\n },\n goMapStyle() {\n uni.navigateTo({ url: '/pages/built-in/special-elements/template/template-map-style-options' })\n }\n }\n}\n</script>\n\n<style>\n.item {\n margin: 15px;\n padding: 4px 8px;\n border: #eee solid 1px;\n}\n</style>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/built-in/special-elements/template/template-options"}},"E_reactivity":{"advanced_custom-ref_custom-ref":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/reactivity/advanced/custom-ref/custom-ref.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>state.count:</text>\r\n <text id=\"state-count\">{{ state['count'] }}</text>\r\n </view>\r\n <button class=\"mb-10 increment-btn\" @click=\"increment\">\r\n increment state.count\r\n </button>\r\n <button class=\"mb-10 trigger-ref-btn\" @click=\"triggerRefState\">\r\n triggerRef state\r\n </button>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\nconst useCustomRef = (value : UTSJSONObject) : Ref<UTSJSONObject> => {\r\n // @ts-ignore\r\n return customRef<UTSJSONObject>((track, trigger) => {\r\n return {\r\n get() : UTSJSONObject {\r\n track()\r\n return value\r\n },\r\n set(newValue : UTSJSONObject) {\r\n value = newValue\r\n trigger()\r\n }\r\n }\r\n })\r\n}\r\n\r\nconst state = useCustomRef({ count: 0 })\r\n\n\r\nconst increment = () => {\r\n state.value['count'] = (state.value['count'] as number) + 1\r\n}\r\nconst triggerRefState = () => {\r\n triggerRef(state)\r\n}\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/reactivity/advanced/custom-ref/custom-ref"},"advanced_effect-scope_effect-scope":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/reactivity/advanced/effect-scope/effect-scope.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>counter:</text>\r\n <text id=\"counter\">{{ counter }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>watch counter result:</text>\r\n <text id=\"watch-counter-res\">{{ watchCounterRes }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>watchEffect counter result:</text>\r\n <text id=\"watch-effect-counter-res\">{{ watchEffectCounterRes }}</text>\r\n </view>\r\n <button\r\n id=\"increment-counter-btn\"\r\n class=\"mt-10\"\r\n @click=\"\r\n () => {\r\n counter++;\r\n }\r\n \">\r\n increment counter\r\n </button>\r\n <button id=\"stop-effect-scope-btn\" class=\"mt-10\" @click=\"stopEffectScope\">\r\n stop effect scope\r\n </button>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\nconst scope = effectScope()\r\n\r\nconst counter = ref(0)\r\n\r\nconst watchCounterRes = ref('')\r\n\r\nconst watchEffectCounterRes = ref('')\r\n\r\nscope.run(() => {\r\n watch(counter, (newVal : number, oldVal : number) => {\r\n watchCounterRes.value = `newVal: ${newVal}, oldVal: ${oldVal}`\r\n })\r\n\r\n watchEffect(() => {\r\n watchEffectCounterRes.value = `counter: ${counter.value}`\r\n })\r\n})\r\n\r\nconst stopEffectScope = () => scope.stop()\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/reactivity/advanced/effect-scope/effect-scope"},"advanced_get-current-scope_get-current-scope":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/reactivity/advanced/get-current-scope/get-current-scope.uvue","code":"```vue\n<template>\n <view class=\"page\">\n <view class=\"flex justify-between flex-row mb-10\">\n <text>hasCurrentScope:</text>\n <text id=\"has-current-scope\">{{ hasCurrentScope }}</text>\n </view>\n <button id=\"create-scope-btn\" class=\"mt-10\" @click=\"createScope\">\n create scope\n </button>\n </view>\n</template>\n\n<script setup lang=\"uts\">\nconst hasCurrentScope = ref(false);\n\nconst createScope = () => {\n const scope = effectScope();\n scope.run(() => {\n hasCurrentScope.value = getCurrentScope() !== null;\n });\n};\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/reactivity/advanced/get-current-scope/get-current-scope"},"advanced_mark-raw_mark-raw":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/reactivity/advanced/mark-raw/mark-raw.uvue","code":"```vue\n <template><view class=\"page\">markRaw 暂不支持</view></template>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/reactivity/advanced/mark-raw/mark-raw"},"advanced_on-scope-dispose_on-scope-dispose":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/reactivity/advanced/on-scope-dispose/on-scope-dispose.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>hasCurrentScope:</text>\r\n <text id=\"has-current-scope\">{{ hasCurrentScope }}</text>\r\n </view>\r\n <button id=\"create-scope-btn\" class=\"mt-10\" @click=\"createScope\">\r\n create scope\r\n </button>\r\n <button id=\"stop-scope-btn\" class=\"mt-10\" @click=\"stopScope\">\r\n stop scope\r\n </button>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\nconst hasCurrentScope = ref(false)\r\n\r\nlet scope = null as EffectScope | null\r\n\r\nconst createScope = () => {\r\n scope = effectScope();\r\n (scope as EffectScope).run(() => {\r\n hasCurrentScope.value = getCurrentScope() != null\r\n onScopeDispose(() => {\r\n hasCurrentScope.value = getCurrentScope() != null\r\n })\r\n })\r\n}\r\n\r\nconst stopScope = () => {\r\n if (scope !== null) {\r\n (scope as EffectScope).stop()\r\n }\r\n}\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/reactivity/advanced/on-scope-dispose/on-scope-dispose"},"advanced_shallow-reactive_shallow-reactive":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/reactivity/advanced/shallow-reactive/shallow-reactive.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>state.count:</text>\r\n <text id=\"state-count\" :data-count=\"state.count\">{{ state.count }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>state.nested.count:</text>\r\n <text id=\"state-nested-count\">{{ state.nested.count }}</text>\r\n </view>\r\n <button\n id=\"increment-state-count-btn\"\r\n class=\"mb-10\"\r\n @click=\"incrementStateCount\">\r\n increment state.count\r\n </button>\r\n <button\r\n id=\"increment-state-nested-count-btn\"\r\n @click=\"incrementStateNestedCount\">\r\n increment state.nested.count\r\n </button>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\ntype StateNested = {\r\n count : number\r\n}\r\ntype State = {\r\n count : number,\r\n nested : StateNested\r\n}\n// 可通过泛型指定类型\r\nconst state = shallowReactive<State>({\r\n count: 0,\r\n nested: {\r\n count: 0\r\n }\r\n})\r\n\r\nconst incrementStateCount = () => {\r\n state.count++\r\n}\r\n\r\nconst incrementStateNestedCount = () => {\r\n state.nested.count++\r\n}\r\n\r\ndefineExpose({\r\n state\r\n})\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/reactivity/advanced/shallow-reactive/shallow-reactive"},"advanced_shallow-readonly_shallow-readonly":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/reactivity/advanced/shallow-readonly/shallow-readonly.uvue","code":"```vue\n<template>\r\n <view :key=\"pageKey\" class=\"page\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>state.count:</text>\r\n <text id=\"state-count\">{{ state.count }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>state.nested.count:</text>\r\n <text id=\"state-nested-count\">{{ state.nested.count }}</text>\r\n </view>\r\n <button\r\n id=\"increment-state-count-btn\"\r\n class=\"mb-10\"\r\n @click=\"incrementStateCount\">\r\n increment state.count\r\n </button>\r\n <button\r\n id=\"increment-state-nested-count-btn\"\r\n class=\"mb-10\"\r\n @click=\"incrementStateNestedCount\">\r\n increment state.nested.count\r\n </button>\r\n <button id=\"update-page-render-btn\" @click=\"updatePageRender\">\r\n update page render\r\n </button>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\nlet pageKey = ref<number>(0)\r\n\r\ntype StateNested = {\r\n count : number\r\n}\r\ntype State = {\r\n count : number,\r\n nested : StateNested\r\n}\n// 可通过泛型指定类型\r\nconst state = shallowReadonly<State>({\r\n count: 0,\r\n nested: {\r\n count: 0\r\n }\r\n})\r\n\r\n// #ifdef APP\r\nconst incrementStateCount = () => {\r\n state.count++\r\n}\r\n\r\nconst incrementStateNestedCount = () => {\r\n state.nested.count++\r\n}\r\n// #endif\r\n\r\nconst updatePageRender = () => {\r\n pageKey.value = Date.now()\r\n}\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/reactivity/advanced/shallow-readonly/shallow-readonly"},"advanced_shallow-ref_shallow-ref":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/reactivity/advanced/shallow-ref/shallow-ref.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>state.count:</text>\r\n <text id=\"state-count\">{{ state.count }}</text>\r\n </view>\r\n <button\n id=\"increment-state-count-btn\"\r\n class=\"mb-10\"\r\n @click=\"incrementStateCount\">\r\n increment state.count\r\n </button>\r\n <button id=\"update-state-btn\" @click=\"updateState\">update state</button>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\ntype State = {\r\n count: number\r\n}\r\n// 可通过泛型指定类型\r\nconst state = shallowRef<State>({\r\n count: 0\r\n})\r\n\r\nconst incrementStateCount = () => {\r\n state.value.count++\r\n}\r\n\r\nconst updateState = () => {\r\n state.value = { count: state.value.count } as State\r\n}\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/reactivity/advanced/shallow-ref/shallow-ref"},"advanced_to-raw_to-raw":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/reactivity/advanced/to-raw/to-raw.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>check toRaw ref:</text>\r\n <text id=\"check-to-raw-ref\">{{ checkToRawRef }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>check toRaw reactive:</text>\r\n <text id=\"check-to-raw-reactive\">{{ checkToRawReactive }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>check toRaw readonly:</text>\r\n <text id=\"check-to-raw-readonly\">{{ checkToRawReadonly }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>check toRaw shallowReactive:</text>\r\n <text id=\"check-to-raw-shallow-reactive\">{{\r\n checkToRawShallowReactive\r\n }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>check toRaw shallowReadonly:</text>\r\n <text id=\"check-to-raw-shallow-readonly\">{{\r\n checkToRawShallowReadonly\r\n }}</text>\r\n </view>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\nconst obj = {}\r\n\r\nconst refObj = ref(obj);\r\nconst checkToRawRef = toRaw<UTSJSONObject>(refObj) === obj;\r\n\r\nconst reactiveObj = reactive(obj);\r\nconst checkToRawReactive = toRaw<UTSJSONObject>(reactiveObj) === obj;\r\n\r\nconst readonlyObj = readonly(obj);\r\nconst checkToRawReadonly = toRaw<UTSJSONObject>(readonlyObj) === obj;\r\n\r\nconst shallowReactiveObj = shallowReactive(obj);\r\nconst checkToRawShallowReactive = toRaw<UTSJSONObject>(shallowReactiveObj) === obj;\r\n\r\nconst shallowReadonlyObj = shallowReadonly(obj);\r\nconst checkToRawShallowReadonly = toRaw<UTSJSONObject>(shallowReadonlyObj) === obj;\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/reactivity/advanced/to-raw/to-raw"},"advanced_trigger-ref_trigger-ref":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/reactivity/advanced/trigger-ref/trigger-ref.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>state.count:</text>\r\n <text id=\"state-count\">{{ state.count }}</text>\r\n </view>\r\n <button\r\n id=\"increment-state-count-btn\"\r\n class=\"mb-10\"\r\n @click=\"incrementStateCount\">\r\n increment state.count\r\n </button>\r\n <button id=\"trigger-ref-state-btn\" @click=\"triggerRefState\">\r\n trigger state\r\n </button>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\ntype State = {\r\n count: number\r\n}\r\nconst state = shallowRef({\r\n count: 0\r\n} as State)\r\n\r\nconst incrementStateCount = () => {\r\n state.value.count++\r\n}\r\n\r\nconst triggerRefState = () => {\r\n triggerRef(state)\r\n}\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/reactivity/advanced/trigger-ref/trigger-ref"},"core_computed_computed-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/reactivity/core/computed/computed-composition.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>count:</text>\r\n <text id=\"count\">{{ count }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>computed double count:</text>\r\n <text id=\"double-count\">{{ doubleCount }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>obj.arr:</text>\r\n <text id=\"obj-arr\">{{ JSON.stringify(obj.arr) }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>computed obj.arr.length:</text>\r\n <text id=\"obj-arr-len\">{{ objArrLen }}</text>\r\n </view>\n <view class=\"flex justify-between flex-row mb-10\">\n <text>computed stateText(1):</text>\n <text id=\"computed-with-argument\">{{ stateText(1) }}</text>\n </view>\r\n <button id=\"update-btn\" @click=\"update\">update</button>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\nconst count = ref(0)\r\n\r\nconst doubleCount = computed(() : number => {\r\n return count.value * 2\r\n})\r\n\r\ntype Obj = {\r\n arr : number[]\r\n}\r\n\r\nconst obj = reactive({\r\n arr: [1, 2, 3]\r\n} as Obj)\r\n\r\n\r\nconst objArrLen = computed<number>(() : number => {\r\n return obj.arr.length\r\n})\r\n\r\nconst update = () => {\r\n count.value++\r\n obj.arr.push(obj.arr.length + 1)\r\n}\n\nconst stateText = computed(() => {\n return (state: number) => {\n const stateArr = ['未审核', '审核中', '审核通过']\n return stateArr[state]\n }\n})\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/reactivity/core/computed/computed-composition"},"core_computed_computed-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/reactivity/core/computed/computed-options.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>count:</text>\r\n <text id=\"count\">{{ count }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>computed double count:</text>\r\n <text id=\"double-count\">{{ doubleCount }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>obj.arr:</text>\r\n <text id=\"obj-arr\">{{ JSON.stringify(obj.arr) }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>computed obj.arr.length:</text>\r\n <text id=\"obj-arr-len\">{{ objArrLen }}</text>\r\n </view>\n <view class=\"flex justify-between flex-row mb-10\">\n <text>computed stateText(1):</text>\n <text id=\"computed-with-argument\">{{ stateText(1) }}</text>\n </view>\r\n <button id=\"update-btn\" @click=\"update\">update</button>\r\n </view>\r\n</template>\r\n\r\n<script lang=\"uts\">\r\ntype Obj = {\r\n arr : number[]\r\n}\r\n\r\nexport default {\r\n data(){\r\n return {\r\n count: 0,\r\n obj:{\r\n arr: [1,2,3]\r\n } as Obj\r\n }\r\n },\r\n computed: {\r\n doubleCount(): number {\r\n return this.count * 2\r\n },\r\n objArrLen(): number {\r\n return this.obj.arr.length\r\n },\n stateText() {\n return (state: number) => {\n const stateArr = ['未审核', '审核中', '审核通过']\n return stateArr[state]\n }\n }\r\n },\r\n methods: {\r\n update(){\r\n this.count++\r\n this.obj.arr.push(this.obj.arr.length + 1)\r\n }\r\n }\r\n}\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/reactivity/core/computed/computed-options"},"core_reactive_reactive":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/reactivity/core/reactive/reactive.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>count:</text>\r\n <text id=\"count\">{{ count }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>obj.str:</text>\r\n <text id=\"obj-str\">{{ obj['str'] }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>obj.num:</text>\r\n <text id=\"obj-num\">{{ obj['num'] }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>obj.arr:</text>\r\n <text id=\"obj-arr\">{{ JSON.stringify(obj['arr']) }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>count1:</text>\r\n <text id=\"count1\">{{ count1 }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>obj1.a.b.c:</text>\r\n <text id=\"obj1-a-b-c\">{{ obj1.getString('a.b.c') }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>arr1(spread):</text>\r\n <text id=\"arr1\">{{ JSON.stringify(arr1) }}</text>\r\n </view>\r\n <button class='mb-10' id=\"update-count-btn\" @click=\"updateCount\">update count</button>\r\n <button class='mb-10' id=\"update-obj-str-btn\" @click=\"updateObjStr\">update obj.str</button>\r\n <button class='mb-10' id=\"update-obj-num-btn\" @click=\"updateObjNum\">update obj.num</button>\r\n <button class='mb-10' id=\"update-obj-arr-btn\" @click=\"updateObjArr\">update obj.arr</button>\r\n <button class='mb-10' id=\"update-obj1-a-b-c-btn\" @click=\"updateObj1_A_B_C\">update obj1.a.b.c</button>\r\n <button class='mb-10' id=\"update-arr1-btn\" @click=\"updateArr1(false)\">update arr1 without reactive</button>\r\n <button class='mb-10' id=\"update-arr1-reactive-btn\" @click=\"updateArr1(true)\">update arr1 with reactive</button>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\n const count = ref(0)\r\n\r\n // TODO: 待支持后补充泛型示例\r\n const obj = reactive({\r\n str: 'default str',\r\n num: count,\r\n arr: ['a', 'b', 'c']\r\n })\r\n\r\n const updateObjStr = () => {\r\n obj['str'] = 'new str';\r\n }\r\n\r\n const updateObjNum = () => {\r\n obj['num'] = (obj['num'] as number) + 1\r\n }\r\n\r\n const updateCount = () => {\r\n count.value++\r\n }\r\n\r\n const updateObjArr = () => {\r\n (obj['arr'] as string[]).push('d')\r\n }\r\n\r\n const obj1 = reactive({\r\n a: { b: { c: 'c' } }\r\n })\r\n\r\n const count1 = ref(0)\r\n watchEffect(() => {\r\n count1.value++\r\n // 测试getString等keyPath触发依赖收集\r\n obj1.getString(\"a.b.c\")\r\n })\r\n function updateObj1_A_B_C() {\r\n ((obj1[\"a\"] as UTSJSONObject)[\"b\"] as UTSJSONObject)[\"c\"] = \"c1-\" + Date.now()\r\n }\r\n const arr1 = ref<number[]>([])\r\n function test(...args : number[]) {\r\n arr1.value = args\r\n }\r\n function updateArr1(isReactive : boolean) {\r\n if (isReactive) {\r\n test(...reactive([4, 5, 6]))\r\n } else {\r\n test(...[1, 2, 3])\r\n }\r\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/reactivity/core/reactive/reactive"},"core_readonly_readonly":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/reactivity/core/readonly/readonly.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>data.str:</text>\r\n <text id=\"data-str\">{{ data.str }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>data.num:</text>\r\n <text id=\"data-num\">{{ data.num }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>data.arr:</text>\r\n <text id=\"data-arr\">{{ JSON.stringify(data.arr) }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>readonly data.str:</text>\r\n <text id=\"readonly-data-str\">{{ readonlyData.str }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>readonly data.num:</text>\r\n <text id=\"readonly-data-num\">{{ readonlyData.num }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>readonly data.arr:</text>\r\n <text id=\"readonly-data-arr\">{{ JSON.stringify(readonlyData.arr) }}</text>\r\n </view>\r\n\r\n <button id=\"update-data-btn\" class=\"mb-10\" @click=\"updateData\">\r\n update data\r\n </button>\r\n <button id=\"update-readonly-data-btn\" @click=\"updateReadonlyData\">\r\n update readonly data\r\n </button>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\ntype Data = {\r\n str : string,\r\n num : number,\r\n arr : string[]\r\n}\r\n// 可通过泛型指定类型\r\nconst data = reactive<Data>({\r\n str: 'default str',\r\n num: 0,\r\n arr: ['a', 'b', 'c']\r\n})\r\n// 可通过泛型指定类型\r\nconst readonlyData = readonly<Data>(data)\r\n\r\nconst updateData = () => {\r\n data.str = 'new str'\r\n data.num++\r\n data.arr.push('d')\r\n}\r\n\r\nconst updateReadonlyData = () => {\n readonlyData.str = 'new readonly str'\n readonlyData.num++\n readonlyData.arr.push('e')\n}\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/reactivity/core/readonly/readonly"},"core_ref_ref":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/reactivity/core/ref/ref.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>count:</text>\r\n <text id=\"count\">{{ count }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>str:</text>\r\n <text id=\"str\">{{ str }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>bool:</text>\r\n <text id=\"bool\">{{ bool }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>arr:</text>\r\n <text id=\"arr\">{{ JSON.stringify(arr) }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>counter.count:</text>\r\n <text id=\"counter-count\">{{ counter.count }}</text>\r\n </view>\n <view class=\"flex justify-between flex-row mb-10\">\n <text>counters.length:</text>\n <text id=\"counters-count\">{{ counters.length }}</text>\n </view>\r\n <button class='mb-10' id=\"change-count-btn\" @click=\"changeCount\">change count</button>\r\n <button class='mb-10' id='change-str-btn' @click='changeStr'>change str</button>\r\n <button class='mb-10' id='change-bool-btn' @click='changeBool'>change bool</button>\r\n <button class='mb-10' id='change-arr-btn' @click='changeArr'>change arr</button>\r\n <button class='mb-10' id='change-counter-btn' @click='changeCounter'>change counter</button>\n <button class='mb-10' id='change-counters-btn' @click='changeCounters'>change counters</button>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\n // 基础数据类型可自动推导类型\r\n const count = ref(0)\r\n const str = ref('default str')\r\n const bool = ref(false)\r\n\r\n // 可通过泛型指定类型\r\n const arr = ref<number[]>([1, 2, 3])\r\n type Counter = {\r\n count : number\r\n }\r\n // 可通过泛型指定类型\r\n const counter = ref<Counter>({\r\n count: 0\r\n })\n \n const counters = ref<Counter[]>([])\r\n\r\n const changeCount = () => {\r\n count.value++\r\n }\r\n const changeStr = () => {\r\n str.value = 'new str'\r\n }\r\n const changeBool = () => {\r\n bool.value = !bool.value\r\n }\r\n const changeArr = () => {\r\n arr.value.push(arr.value.length + 1)\r\n }\r\n const changeCounter = () => {\r\n counter.value.count++\r\n }\n const changeCounters = () => {\n counters.value.push({ count: 0 })\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/reactivity/core/ref/ref"},"core_watch_watch-composition":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/reactivity/core/watch/watch-composition.uvue","code":"```vue\n<template>\r\n <!-- #ifdef APP -->\r\n <scroll-view style=\"flex: 1; padding-bottom: 20px\">\r\n <!-- #endif -->\r\n <view class=\"page\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>count:</text>\r\n <text id=\"count\" ref=\"countRef\">{{ count }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch count result:</text>\r\n <text id=\"watch-count-res\">{{ watchCountRes }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>watch count track number:</text>\r\n <text id=\"watch-count-track-num\">{{ watchCountTrackNum }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch count cleanup number:</text>\r\n <text id=\"watch-count-cleanup-res\">{{ watchCountCleanupRes }}</text>\r\n </view>\r\n\r\n <button class=\"increment-btn mb-10\" @click=\"increment\">increment</button>\r\n <button class=\"stop-watch-count-btn mb-10\" @click=\"triggerStopWatchCount\">\r\n stop watch count\r\n </button>\r\n\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>obj.str:</text>\r\n <text id=\"obj-str\" ref=\"objStrRef\">{{ obj.str }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>watch obj.str trigger number:</text>\r\n <text id=\"watch-obj-str-trigger-num\">{{ watchObjStrTriggerNum }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>obj.num:</text>\r\n <text id=\"obj-num\">{{ obj.num }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>obj.bool:</text>\r\n <text id=\"obj-bool\" ref=\"objBoolRef\">{{ obj.bool }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>obj.arr:</text>\r\n <text id=\"obj-arr\" ref=\"objArrRef\">{{ JSON.stringify(obj.arr) }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch obj result:</text>\r\n <text id=\"watch-obj-res\">{{ watchObjRes }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch obj.str result:</text>\r\n <text id=\"watch-obj-str-res\">{{ watchObjStrRes }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch obj.bool result:</text>\r\n <text id=\"watch-obj-bool-res\">{{ watchObjBoolRes }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch obj.arr result:</text>\r\n <text id=\"watch-obj-arr-res\">{{ watchObjArrRes }}</text>\r\n </view>\r\n\r\n <button class=\"update-obj-btn mb-10\" @click=\"updateObj\">\r\n update obj\r\n </button>\r\n\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch count and obj.num result:</text>\r\n <text id=\"watch-count-obj-num-res\">{{ watchCountAndObjNumRes }}</text>\r\n </view>\r\n </view>\r\n <!-- #ifdef APP -->\r\n </scroll-view>\r\n <!-- #endif -->\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\ntype Obj = {\r\n num : number,\r\n str : string,\r\n bool : boolean,\r\n arr : number[]\r\n}\r\n\r\nconst countRef = ref<UniTextElement | null>(null)\r\nconst count = ref(0)\r\nconst watchCountRes = ref('')\r\nconst watchCountCleanupRes = ref('')\r\nconst watchCountTrackNum = ref(0)\r\n\r\nconst stopWatchCount = watch(count, (count : number, prevCount : number, onCleanup : OnCleanup) => {\r\n // #ifdef APP\r\n watchCountRes.value = `count: ${count}, prevCount: ${prevCount}, count ref text (flush sync): ${countRef.value!.value}`\r\n // #endif\r\n // #ifdef WEB\r\n watchCountRes.value = `count: ${count}, prevCount: ${prevCount}, count ref text (flush sync): ${(countRef.value!.childNodes[0] as HTMLElement).innerText}`\r\n // #endif\r\n const cancel = () => {\r\n watchCountCleanupRes.value = `watch count cleanup: ${count}`\r\n }\r\n onCleanup(cancel)\r\n}, {\r\n // 侦听器在响应式依赖改变时立即触发\r\n flush: 'sync',\r\n // 响应属性或引用作为依赖项被跟踪时调用\r\n onTrack(event : DebuggerEvent) {\r\n if (event.type === 'get') {\r\n watchCountTrackNum.value++\r\n }\r\n }\r\n // TODO: vue>3.4.15 开始 监听函数、onTrack、onTrigger 同时存在修改响应式数据时,会报错 Maximum call stack size exceeded\r\n // 所以将 onTrack 与 onTrigger 调整到两个 watch 里\r\n})\r\n\r\nconst triggerStopWatchCount = () => stopWatchCount()\r\n\r\nconst increment = () => {\r\n count.value++\r\n}\r\n\r\nconst obj = reactive({\r\n num: 0,\r\n str: 'num: 0',\r\n bool: false,\r\n arr: [0]\r\n} as Obj)\r\n\r\n// immediate: true 第一次触发, 旧值应该是 undefined, 现在 app 是初始值\r\nconst watchObjRes = ref('')\r\nwatch(obj, (obj : Obj, prevObj ?: Obj) => {\r\n watchObjRes.value = `obj: ${JSON.stringify(obj)}, prevObj: ${JSON.stringify(prevObj)}`\r\n}, { immediate: true })\r\n\r\nconst objStrRef = ref<UniTextElement | null>(null)\r\nconst watchObjStrRes = ref('')\r\nconst watchObjStrTriggerNum = ref(0)\r\nwatch(() : string => obj.str, (str : string, prevStr : string) => {\r\n // #ifdef APP\r\n watchObjStrRes.value = `str: ${str}, prevStr: ${prevStr}, obj.str ref text (flush pre): ${objStrRef.value!.value}`\r\n // #endif\r\n // #ifdef WEB\r\n watchObjStrRes.value = `str: ${str}, prevStr: ${prevStr}, obj.str ref text (flush pre): ${(objStrRef.value!.childNodes[0] as HTMLElement).innerText}`\r\n // #endif\r\n}, {\r\n // 侦听器在组件渲染之前触发\r\n flush: 'pre',\r\n // 侦听器回调被依赖项的变更触发时调用\r\n onTrigger(event : DebuggerEvent) {\r\n if (event.type === 'set') {\r\n watchObjStrTriggerNum.value++\r\n }\r\n }\r\n})\r\n\r\nconst objBoolRef = ref<UniTextElement | null>(null)\r\nconst watchObjBoolRes = ref('')\r\nwatch(() : boolean => obj.bool, (bool : boolean, prevBool : boolean) => {\r\n // #ifdef APP\r\n watchObjBoolRes.value = `bool: ${bool}, prevBool: ${prevBool}, obj.bool ref text (flush post): ${objBoolRef.value!.value}`\r\n // #endif\r\n // #ifdef WEB\r\n watchObjBoolRes.value = `bool: ${bool}, prevBool: ${prevBool}, obj.bool ref text (flush post): ${(objBoolRef.value!.childNodes[0] as HTMLElement).innerText}`\r\n // #endif\r\n}, {\r\n // 侦听器延迟到组件渲染之后触发\r\n flush: 'post'\r\n})\r\n\r\n\r\nconst watchObjArrRes = ref('')\r\nwatch(() : number[] => obj.arr, (arr : number[], prevArr : number[]) => {\r\n watchObjArrRes.value = `arr: ${JSON.stringify(arr)}, prevArr: ${JSON.stringify(prevArr)}`\r\n}, { deep: true })\r\n\r\nconst watchCountAndObjNumRes = ref('')\r\nwatch([count, () : number => obj.num], (state : number[], preState : number[]) => {\r\n watchCountAndObjNumRes.value = `state: ${JSON.stringify(state)}, preState: ${JSON.stringify(preState)}`\r\n})\r\n\r\nconst updateObj = () => {\r\n obj.num++\r\n obj.str = `num: ${obj.num}`\r\n obj.bool = !obj.bool\r\n obj.arr.push(obj.num)\r\n}\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/reactivity/core/watch/watch-composition"},"core_watch_watch-options":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/reactivity/core/watch/watch-options.uvue","code":"```vue\n<template>\r\n <!-- #ifdef APP -->\r\n <scroll-view style=\"flex: 1; padding-bottom: 20px\">\r\n <!-- #endif -->\r\n <view class=\"page\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>count:</text>\r\n <text id=\"count\" ref=\"countRef\">{{ count }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch count result:</text>\r\n <text id=\"watch-count-res\">{{ watchCountRes }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>watch count track number:</text>\r\n <text id=\"watch-count-track-num\">{{ watchCountTrackNum }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch count cleanup number:</text>\r\n <text id=\"watch-count-cleanup-res\">{{ watchCountCleanupRes }}</text>\r\n </view>\r\n\r\n <button class=\"increment-btn mb-10\" @click=\"increment\">increment</button>\r\n <button class=\"stop-watch-count-btn mb-10\" @click=\"triggerStopWatchCount\">\r\n stop watch count\r\n </button>\r\n\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>obj.str:</text>\r\n <text id=\"obj-str\" ref=\"objStrRef\">{{ obj.str }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>watch obj.str trigger number:</text>\r\n <text id=\"watch-obj-str-trigger-num\">{{ watchObjStrTriggerNum }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>obj.num:</text>\r\n <text id=\"obj-num\">{{ obj.num }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>obj.bool:</text>\r\n <text id=\"obj-bool\" ref=\"objBoolRef\">{{ obj.bool }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>obj.arr:</text>\r\n <text id=\"obj-arr\" ref=\"objArrRef\">{{ JSON.stringify(obj.arr) }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch obj result:</text>\r\n <text id=\"watch-obj-res\">{{ watchObjRes }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch obj.str result:</text>\r\n <text id=\"watch-obj-str-res\">{{ watchObjStrRes }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch obj.bool result:</text>\r\n <text id=\"watch-obj-bool-res\">{{ watchObjBoolRes }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch obj.arr result:</text>\r\n <text id=\"watch-obj-arr-res\">{{ watchObjArrRes }}</text>\r\n </view>\r\n\r\n <button class=\"update-obj-btn mb-10\" @click=\"updateObj\">\r\n update obj\r\n </button>\r\n </view>\r\n <!-- #ifdef APP -->\r\n </scroll-view>\r\n <!-- #endif -->\r\n</template>\r\n\r\n<script lang=\"uts\">\r\n type Obj = {\r\n num : number,\r\n str : string,\r\n bool : boolean,\r\n arr : number[]\r\n }\r\n\r\n export default {\r\n data() {\r\n return {\r\n countRef: null as UniTextElement | null,\r\n count: 0,\r\n watchCountRes: '',\r\n watchCountCleanupRes: '',\r\n watchCountTrackNum: 0,\r\n stopWatchCount: () => { },\r\n obj: {\r\n num: 0,\r\n str: 'num: 0',\r\n bool: false,\r\n arr: [0]\r\n } as Obj,\r\n watchObjRes: '',\r\n objStrRef: null as UniTextElement | null,\r\n watchObjStrRes: '',\r\n watchObjStrTriggerNum: 0,\r\n objBoolRef: null as UniTextElement | null,\r\n watchObjBoolRes: '',\r\n watchObjArrRes: '',\r\n }\r\n },\r\n onReady() {\r\n // TODO: app-android this.$watch 返回类型不对\r\n // watchCountTrackNum 各端表现也不一致\r\n const self = this\r\n // #ifdef APP\r\n this.$watch('count',\r\n (count : number, prevCount : number, onCleanup : OnCleanup) => {\r\n this.watchCountRes = `count: ${count}, prevCount: ${prevCount}, count ref text (flush sync): ${(this.$refs['countRef'] as UniTextElement).value}`\r\n const cancel = () => {\r\n this.watchCountCleanupRes = `watch count cleanup: ${count}`\r\n }\r\n onCleanup(cancel)\r\n },\r\n {\r\n // 侦听器在响应式依赖改变时立即触发\r\n flush: 'sync',\r\n // 响应属性或引用作为依赖项被跟踪时调用\r\n onTrack(event : DebuggerEvent) {\r\n if (event.type === 'get') {\r\n self.watchCountTrackNum++\r\n }\r\n }\r\n // TODO: vue>3.4.15 开始 监听函数、onTrack、onTrigger 同时存在修改响应式数据时,会报错 Maximum call stack size exceeded\r\n // 所以将 onTrack 与 onTrigger 调整到两个 watch 里\r\n })\r\n // #endif\r\n // #ifdef WEB\r\n this.stopWatchCount = this.$watch(\r\n 'count',\r\n (count : number, prevCount : number, onCleanup : OnCleanup) => {\r\n this.watchCountRes = `count: ${count}, prevCount: ${prevCount}, count ref text (flush sync): ${(this.$refs['countRef'] as UniTextElement).childNodes[0].getAttribute('value')}`\r\n const cancel = () => {\r\n this.watchCountCleanupRes = `watch count cleanup: ${count}`\r\n }\r\n onCleanup(cancel)\r\n },\r\n {\r\n // 侦听器在响应式依赖改变时立即触发\r\n flush: 'sync',\r\n // 响应属性或引用作为依赖项被跟踪时调用\r\n onTrack(event : DebuggerEvent) {\r\n if (event.type === 'get') {\r\n self.watchCountTrackNum++\r\n }\r\n }\r\n // TODO: vue>3.4.15 开始 监听函数、onTrack、onTrigger 同时存在修改响应式数据时,会报错 Maximum call stack size exceeded\r\n // 所以将 onTrack 与 onTrigger 调整到两个 watch 里\r\n })\r\n // #endif\r\n },\r\n watch: {\r\n obj: {\r\n handler(obj : Obj, prevObj ?: Obj) {\r\n if (prevObj == null) {\r\n this.watchObjRes = `obj: {\"num\":${obj.num},\"str\":\"${obj.str}\",\"bool\":${obj.bool},\"arr\":${JSON.stringify(obj.arr)}}, prevObj: ${JSON.stringify(prevObj)}`\r\n } else {\r\n // #ifdef WEB\r\n this.watchObjRes = `obj: {\"num\":${obj.num},\"str\":\"${obj.str}\",\"bool\":${obj.bool},\"arr\":${JSON.stringify(obj.arr)}}, prevObj: {\"num\":${prevObj?.num},\"str\":\"${prevObj?.str}\",\"bool\":${prevObj?.bool},\"arr\":${JSON.stringify(prevObj?.arr)}}`\r\n // #endif\r\n // #ifndef WEB\r\n this.watchObjRes = `obj: {\"num\":${obj.num},\"str\":\"${obj.str}\",\"bool\":${obj.bool},\"arr\":${JSON.stringify(obj.arr)}}, prevObj: {\"num\":${prevObj.num},\"str\":\"${prevObj.str}\",\"bool\":${prevObj.bool},\"arr\":${JSON.stringify(prevObj.arr)}}`\r\n // #endif\r\n }\r\n },\r\n // immediate: true 第一次触发, 旧值应该是 undefined, 现在 app 是初始值\r\n immediate: true,\r\n deep: true\r\n },\r\n 'obj.str': function (str : string, prevStr : string) {\r\n // #ifdef APP\r\n this.watchObjStrRes = `str: ${str}, prevStr: ${prevStr}, obj.str ref text (flush pre): ${(this.$refs['objStrRef'] as UniTextElement).value}`\r\n // #endif\r\n // #ifdef WEB\r\n this.watchObjStrRes = `str: ${str}, prevStr: ${prevStr}, obj.str ref text (flush pre): ${(this.$refs.objStrRef as UniTextElement).childNodes[0].getAttribute('value')}`\r\n // #endif\r\n },\r\n 'obj.bool': {\r\n handler: function (bool : boolean, prevBool : boolean) {\r\n // #ifdef APP\r\n this.watchObjBoolRes = `bool: ${bool}, prevBool: ${prevBool}, obj.bool ref text (flush post): ${(this.$refs['objBoolRef'] as UniTextElement).value}`\r\n // #endif\r\n // #ifdef WEB\r\n this.watchObjBoolRes = `bool: ${bool}, prevBool: ${prevBool}, obj.bool ref text (flush post): ${(this.$refs.objBoolRef as UniTextElement).childNodes[0].getAttribute('value')}`\r\n // #endif\r\n },\r\n // 侦听器延迟到组件渲染之后触发\r\n flush: 'post',\r\n deep: true\r\n },\r\n 'obj.arr': {\r\n handler: function (arr : number[], prevArr : number[]) {\r\n this.watchObjArrRes = `arr: ${JSON.stringify(arr)}, prevArr: ${JSON.stringify(prevArr)}`\r\n },\r\n deep: true\r\n }\r\n },\r\n methods: {\r\n triggerStopWatchCount() {\r\n // #ifdef WEB\r\n this.stopWatchCount()\r\n // #endif\r\n },\r\n increment() {\r\n this.count++\r\n },\r\n updateObj() {\r\n this.obj.num++\r\n this.obj.str = `num: ${this.obj.num}`\r\n this.obj.bool = !this.obj.bool\r\n this.obj.arr.push(this.obj.num)\r\n }\r\n }\r\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/reactivity/core/watch/watch-options"},"core_watch-effect_watch-effect":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/reactivity/core/watch-effect/watch-effect.uvue","code":"```vue\n<template>\r\n <!-- #ifdef APP -->\r\n <scroll-view style=\"flex: 1; padding-bottom: 20px\">\r\n <!-- #endif -->\r\n <view class=\"page\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>count:</text>\r\n <text id=\"count\" ref=\"countRef\">{{ count }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch count result:</text>\r\n <text id=\"watch-count-res\">{{ watchCountRes }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>watch count track number:</text>\r\n <text id=\"watch-count-track-num\">{{ watchCountTrackNum }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch count cleanup number:</text>\r\n <text id=\"watch-count-cleanup-res\">{{ watchCountCleanupRes }}</text>\r\n </view>\r\n\r\n <button class=\"increment-btn mb-10\" @click=\"increment\">increment</button>\r\n <button class=\"stop-watch-count-btn mb-10\" @click=\"triggerStopWatchCount\">\r\n stop watch count\r\n </button>\r\n\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>obj.str:</text>\r\n <text id=\"obj-str\" ref=\"objStrRef\">{{ obj.str }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>watch obj.str trigger number:</text>\r\n <text id=\"watch-obj-str-trigger-num\">{{ watchObjStrTriggerNum }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>obj.num:</text>\r\n <text id=\"obj-num\">{{ obj.num }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>obj.bool:</text>\r\n <text id=\"obj-bool\" ref=\"objBoolRef\">{{ obj.bool }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>obj.arr:</text>\r\n <text id=\"obj-arr\" ref=\"objArrRef\">{{ JSON.stringify(obj.arr) }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch obj result:</text>\r\n <text id=\"watch-obj-res\">{{ watchObjRes }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch obj.str result:</text>\r\n <text id=\"watch-obj-str-res\">{{ watchObjStrRes }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch obj.bool result:</text>\r\n <text id=\"watch-obj-bool-res\">{{ watchObjBoolRes }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch obj.arr result:</text>\r\n <text id=\"watch-obj-arr-res\">{{ watchObjArrRes }}</text>\r\n </view>\r\n\r\n <button class=\"update-obj-btn mb-10\" @click=\"updateObj\">\r\n update obj\r\n </button>\r\n\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch count and obj.num result:</text>\r\n <text id=\"watch-count-obj-num-res\">{{ watchCountAndObjNumRes }}</text>\r\n </view>\r\n </view>\r\n <!-- #ifdef APP -->\r\n </scroll-view>\r\n <!-- #endif -->\r\n</template>\r\n\r\n<script setup lang='uts'>\r\n type Obj = {\r\n num : number,\r\n str : string,\r\n bool : boolean,\r\n arr : number[]\r\n }\r\n\r\n const countRef = ref<UniTextElement | null>(null)\r\n const count = ref(0)\r\n const watchCountRes = ref('')\r\n const watchCountCleanupRes = ref('')\r\n const watchCountTrackNum = ref(0)\r\n\r\n const stopWatchCount = watchEffect((onCleanup : OnCleanup) => {\r\n if (countRef.value !== null) {\r\n // #ifdef APP\r\n watchCountRes.value = `count: ${count.value}, count ref text (flush sync): ${countRef.value!.value}`\r\n // #endif\r\n // #ifdef WEB\r\n watchCountRes.value = `count: ${count.value}, count ref text (flush sync): ${(countRef.value!.childNodes[0] as HTMLElement).innerText}`\r\n // #endif \r\n } else {\r\n watchCountRes.value = `count: ${count.value}, count ref text (flush sync): `\r\n }\r\n const cancel = () => {\r\n watchCountCleanupRes.value = `watch count cleanup: ${count.value}`\r\n }\r\n onCleanup(cancel)\r\n }, {\r\n // 侦听器在响应式依赖改变时立即触发\r\n flush: 'sync',\r\n // 响应属性或引用作为依赖项被跟踪时调用\r\n onTrack(event : DebuggerEvent) {\r\n if (event.type === 'get') {\r\n watchCountTrackNum.value++\r\n }\r\n },\r\n })\r\n\r\n const triggerStopWatchCount = () => stopWatchCount()\r\n\r\n const increment = () => {\r\n count.value++\r\n }\r\n\r\n const obj = reactive({\r\n num: 0,\r\n str: 'num: 0',\r\n bool: false,\r\n arr: [0]\r\n } as Obj)\r\n\r\n const watchObjRes = ref('')\r\n watchEffect(() => {\r\n watchObjRes.value = `obj: ${JSON.stringify(obj)}`\r\n })\r\n\r\n const objStrRef = ref<UniTextElement | null>(null)\r\n const watchObjStrRes = ref('')\r\n const watchObjStrTriggerNum = ref(0)\r\n \r\n watchEffect(() => {\r\n if (objStrRef.value !== null) {\r\n // #ifdef APP\r\n watchObjStrRes.value = `str: ${obj.str}, obj.str ref text (flush pre): ${objStrRef.value!.value}`\r\n // #endif\r\n // #ifdef WEB\r\n watchObjStrRes.value = `str: ${obj.str}, obj.str ref text (flush pre): ${(objStrRef.value!.childNodes[0] as HTMLElement).innerText}`\r\n // #endif \r\n } else {\r\n watchObjStrRes.value = `str: ${obj.str}, obj.str ref text (flush pre): `\r\n }\r\n }, {\r\n // 侦听器在组件渲染之前触发\r\n flush: 'pre',\r\n // 侦听器回调被依赖项的变更触发时调用\r\n onTrigger(event : DebuggerEvent) {\r\n if (event.type === 'set') {\r\n watchObjStrTriggerNum.value++\r\n }\r\n }\r\n })\r\n\r\n const objBoolRef = ref<UniTextElement | null>(null)\r\n const watchObjBoolRes = ref('')\r\n watchEffect(() => {\r\n if (objBoolRef.value !== null) {\r\n // #ifdef APP\r\n watchObjBoolRes.value = `bool: ${obj.bool}, obj.bool ref text (flush post): ${objBoolRef.value!.value}`\r\n // #endif\r\n // #ifdef WEB\r\n watchObjBoolRes.value = `bool: ${obj.bool}, obj.bool ref text (flush post): ${(objBoolRef.value!.childNodes[0] as HTMLElement).innerText}`\r\n // #endif \r\n } else {\r\n watchObjBoolRes.value = `bool: ${obj.bool}, obj.bool ref text (flush post): `\r\n }\r\n }, {\r\n // 侦听器延迟到组件渲染之后触发\r\n flush: 'post'\r\n })\r\n\r\n\r\n const watchObjArrRes = ref('')\r\n watchEffect(() => {\r\n watchObjArrRes.value = `arr: ${JSON.stringify(obj.arr)}`\r\n })\r\n\r\n const watchCountAndObjNumRes = ref('')\r\n watchEffect(() => {\r\n watchCountAndObjNumRes.value = `count: ${count.value}, obj.num: ${obj.num}`\r\n })\r\n\r\n const updateObj = () => {\r\n obj.num++\r\n obj.str = `num: ${obj.num}`\r\n obj.bool = !obj.bool\r\n obj.arr.push(obj.num)\r\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/reactivity/core/watch-effect/watch-effect"},"core_watch-post-effect_watch-post-effect":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/reactivity/core/watch-post-effect/watch-post-effect.uvue","code":"```vue\n<template>\r\n <!-- #ifdef APP -->\r\n <scroll-view style=\"flex: 1; padding-bottom: 20px\">\r\n <!-- #endif -->\r\n <view class=\"page\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>count:</text>\r\n <text id=\"count\" ref=\"countRef\">{{ count }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch count result:</text>\r\n <text id=\"watch-count-res\">{{ watchCountRes }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>watch count track number:</text>\r\n <text id=\"watch-count-track-num\">{{ watchCountTrackNum }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch count cleanup number:</text>\r\n <text id=\"watch-count-cleanup-res\">{{ watchCountCleanupRes }}</text>\r\n </view>\r\n\r\n <button class=\"increment-btn mb-10\" @click=\"increment\">increment</button>\r\n <button class=\"stop-watch-count-btn mb-10\" @click=\"triggerStopWatchCount\">\r\n stop watch count\r\n </button>\r\n\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>obj.str:</text>\r\n <text id=\"obj-str\" ref=\"objStrRef\">{{ obj.str }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>watch obj.str trigger number:</text>\r\n <text id=\"watch-obj-str-trigger-num\">{{ watchObjStrTriggerNum }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>obj.num:</text>\r\n <text id=\"obj-num\">{{ obj.num }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>obj.bool:</text>\r\n <text id=\"obj-bool\" ref=\"objBoolRef\">{{ obj.bool }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>obj.arr:</text>\r\n <text id=\"obj-arr\" ref=\"objArrRef\">{{ JSON.stringify(obj.arr) }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch obj result:</text>\r\n <text id=\"watch-obj-res\">{{ watchObjRes }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch obj.str result:</text>\r\n <text id=\"watch-obj-str-res\">{{ watchObjStrRes }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch obj.arr result:</text>\r\n <text id=\"watch-obj-arr-res\">{{ watchObjArrRes }}</text>\r\n </view>\r\n\r\n <button class=\"update-obj-btn mb-10\" @click=\"updateObj\">\r\n update obj\r\n </button>\r\n\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch count and obj.num result:</text>\r\n <text id=\"watch-count-obj-num-res\">{{ watchCountAndObjNumRes }}</text>\r\n </view>\r\n </view>\r\n <!-- #ifdef APP -->\r\n </scroll-view>\r\n <!-- #endif -->\r\n</template>\r\n\r\n<script setup lang='uts'>\r\n type Obj = {\r\n num : number,\r\n str : string,\r\n bool : boolean,\r\n arr : number[]\r\n }\r\n\r\n const countRef = ref<UniTextElement | null>(null)\r\n const count = ref<number>(0)\r\n const watchCountRes = ref('')\r\n const watchCountCleanupRes = ref('')\r\n const watchCountTrackNum = ref(0)\r\n\r\n const stopWatchCount = watchPostEffect((onCleanup : OnCleanup) => {\r\n if (countRef.value !== null) {\r\n // #ifdef APP\r\n watchCountRes.value = `count: ${count.value}, count ref text: ${countRef.value!.value}`\r\n // #endif\r\n // #ifdef WEB\r\n watchCountRes.value = `count: ${count.value}, count ref text: ${(countRef.value!.childNodes[0] as HTMLElement).innerText}`\r\n // #endif \r\n } else {\r\n watchCountRes.value = `count: ${count.value}, count ref text: `\r\n }\r\n const cancel = () => {\r\n watchCountCleanupRes.value = `watch count cleanup: ${count.value}`\r\n }\r\n onCleanup(cancel)\r\n },\r\n {\r\n // 响应属性或引用作为依赖项被跟踪时调用\r\n onTrack(event : DebuggerEvent) {\r\n if (event.type === 'get') {\r\n watchCountTrackNum.value++\r\n }\r\n }\r\n },\r\n )\r\n\r\n const triggerStopWatchCount = () => stopWatchCount()\r\n\r\n const increment = () => {\r\n count.value++\r\n }\r\n\r\n const obj = reactive({\r\n num: 0,\r\n str: 'num: 0',\r\n bool: false,\r\n arr: [0]\r\n } as Obj)\r\n\r\n const watchObjRes = ref('')\r\n watchPostEffect(() => {\r\n watchObjRes.value = `obj: {\"num\":${obj.num},\"str\":\"${obj.str}\",\"bool\":${obj.bool},\"arr\":${JSON.stringify(obj.arr)}}`\r\n })\r\n\r\n const objStrRef = ref<UniTextElement | null>(null)\r\n const watchObjStrRes = ref('')\r\n const watchObjStrTriggerNum = ref(0)\r\n \r\n watchPostEffect(() => {\r\n if (objStrRef.value !== null) {\r\n // #ifdef APP\r\n watchObjStrRes.value = `str: ${obj.str}, obj.str ref text: ${objStrRef.value!.value}`\r\n // #endif\r\n // #ifdef WEB\r\n watchObjStrRes.value = `str: ${obj.str}, obj.str ref text: ${(objStrRef.value!.childNodes[0] as HTMLElement).innerText}`\r\n // #endif \r\n } else {\r\n watchObjStrRes.value = `str: ${obj.str}, obj.str ref text: `\r\n }\r\n },{\r\n // 侦听器回调被依赖项的变更触发时调用\r\n onTrigger(event : DebuggerEvent) {\r\n if (event.type === 'set') {\r\n watchObjStrTriggerNum.value++\r\n }\r\n }\r\n })\r\n\r\n const watchObjArrRes = ref('')\r\n watchPostEffect(() => {\r\n watchObjArrRes.value = `arr: ${JSON.stringify(obj.arr)}`\r\n })\r\n\r\n const watchCountAndObjNumRes = ref('')\r\n watchPostEffect(() => {\r\n watchCountAndObjNumRes.value = `count: ${count.value}, obj.num: ${obj.num}`\r\n })\r\n\r\n const updateObj = () => {\r\n obj.num++\r\n obj.str = `num: ${obj.num}`\r\n obj.bool = !obj.bool\r\n obj.arr.push(obj.num)\r\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/reactivity/core/watch-post-effect/watch-post-effect"},"core_watch-sync-effect_watch-sync-effect":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/reactivity/core/watch-sync-effect/watch-sync-effect.uvue","code":"```vue\n<template>\r\n <!-- #ifdef APP -->\r\n <scroll-view style=\"flex: 1; padding-bottom: 20px\">\r\n <!-- #endif -->\r\n <view class=\"page\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>count:</text>\r\n <text id=\"count\" ref=\"countRef\">{{ count }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch count result:</text>\r\n <text id=\"watch-count-res\">{{ watchCountRes }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>watch count track number:</text>\r\n <text id=\"watch-count-track-num\">{{ watchCountTrackNum }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch count cleanup number:</text>\r\n <text id=\"watch-count-cleanup-res\">{{ watchCountCleanupRes }}</text>\r\n </view>\r\n\r\n <button class=\"increment-btn mb-10\" @click=\"increment\">increment</button>\r\n <button class=\"stop-watch-count-btn mb-10\" @click=\"triggerStopWatchCount\">\r\n stop watch count\r\n </button>\r\n\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>obj.str:</text>\r\n <text id=\"obj-str\" ref=\"objStrRef\">{{ obj.str }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>watch obj.str trigger number:</text>\r\n <text id=\"watch-obj-str-trigger-num\">{{ watchObjStrTriggerNum }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>obj.num:</text>\r\n <text id=\"obj-num\">{{ obj.num }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>obj.bool:</text>\r\n <text id=\"obj-bool\" ref=\"objBoolRef\">{{ obj.bool }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>obj.arr:</text>\r\n <text id=\"obj-arr\" ref=\"objArrRef\">{{ JSON.stringify(obj.arr) }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch obj result:</text>\r\n <text id=\"watch-obj-res\">{{ watchObjRes }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch obj.str result:</text>\r\n <text id=\"watch-obj-str-res\">{{ watchObjStrRes }}</text>\r\n </view>\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch obj.arr result:</text>\r\n <text id=\"watch-obj-arr-res\">{{ watchObjArrRes }}</text>\r\n </view>\r\n\r\n <button class=\"update-obj-btn mb-10\" @click=\"updateObj\">\r\n update obj\r\n </button>\r\n\r\n <view class=\"flex justify-between mb-10\">\r\n <text>watch count and obj.num result:</text>\r\n <text id=\"watch-count-obj-num-res\">{{ watchCountAndObjNumRes }}</text>\r\n </view>\r\n </view>\r\n <!-- #ifdef APP -->\r\n </scroll-view>\r\n <!-- #endif -->\r\n</template>\r\n\r\n<script setup lang='uts'>\r\n type Obj = {\r\n num : number,\r\n str : string,\r\n bool : boolean,\r\n arr : number[]\r\n }\r\n\r\n const countRef = ref<UniTextElement | null>(null)\r\n const count = ref(0)\r\n const watchCountRes = ref('')\r\n const watchCountCleanupRes = ref('')\r\n const watchCountTrackNum = ref(0)\r\n\r\n const stopWatchCount = watchSyncEffect((onCleanup : OnCleanup) => {\r\n if (countRef.value !== null) {\r\n // #ifdef APP\r\n watchCountRes.value = `count: ${count.value}, count ref text: ${countRef.value!.value}`\r\n // #endif\r\n // #ifdef WEB\r\n watchCountRes.value = `count: ${count.value}, count ref text: ${(countRef.value!.childNodes[0] as HTMLElement).innerText}`\r\n // #endif \r\n } else {\r\n watchCountRes.value = `count: ${count.value}, count ref text: `\r\n }\r\n const cancel = () => {\r\n watchCountCleanupRes.value = `watch count cleanup: ${count.value}`\r\n }\r\n onCleanup(cancel)\r\n },\r\n {\r\n // 响应属性或引用作为依赖项被跟踪时调用\r\n onTrack(event : DebuggerEvent) {\r\n if (event.type === 'get') {\r\n watchCountTrackNum.value++\r\n }\r\n }\r\n },\r\n )\r\n\r\n const triggerStopWatchCount = () => stopWatchCount()\r\n\r\n const increment = () => {\r\n count.value++\r\n }\r\n\r\n const obj = reactive({\r\n num: 0,\r\n str: 'num: 0',\r\n bool: false,\r\n arr: [0]\r\n } as Obj)\r\n\r\n const watchObjRes = ref('')\r\n watchSyncEffect(() => {\r\n watchObjRes.value = `obj: {\"num\":${obj.num},\"str\":\"${obj.str}\",\"bool\":${obj.bool},\"arr\":${JSON.stringify(obj.arr)}}`\r\n })\r\n\r\n const objStrRef = ref<UniTextElement | null>(null)\r\n const watchObjStrRes = ref('')\r\n const watchObjStrTriggerNum = ref(0)\r\n \r\n watchSyncEffect(() => {\r\n if (objStrRef.value !== null) {\r\n // #ifdef APP\r\n watchObjStrRes.value = `str: ${obj.str}, obj.str ref text: ${objStrRef.value!.value}`\r\n // #endif\r\n // #ifdef WEB\r\n watchObjStrRes.value = `str: ${obj.str}, obj.str ref text: ${(objStrRef.value!.childNodes[0] as HTMLElement).innerText}`\r\n // #endif \r\n } else {\r\n watchObjStrRes.value = `str: ${obj.str}, obj.str ref text: `\r\n }\r\n }, {\r\n // 侦听器回调被依赖项的变更触发时调用\r\n onTrigger(event : DebuggerEvent) {\r\n if (event.type === 'set') {\r\n watchObjStrTriggerNum.value++\r\n }\r\n }\r\n })\r\n\r\n const watchObjArrRes = ref('')\r\n watchSyncEffect(() => {\r\n watchObjArrRes.value = `arr: ${JSON.stringify(obj.arr)}`\r\n })\r\n\r\n const watchCountAndObjNumRes = ref('')\r\n watchSyncEffect(() => {\r\n watchCountAndObjNumRes.value = `count: ${count.value}, obj.num: ${obj.num}`\r\n })\r\n\r\n const updateObj = () => {\r\n obj.num++\r\n obj.str = `num: ${obj.num}`\r\n obj.bool = !obj.bool\r\n obj.arr.push(obj.num)\r\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/reactivity/core/watch-sync-effect/watch-sync-effect"},"utilities_is-proxy_is-proxy":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/reactivity/utilities/is-proxy/is-proxy.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>isProxy(count):</text>\r\n <text id=\"is-proxy-count\">{{ isProxyCount }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>isProxy(refCount):</text>\r\n <text id=\"is-proxy-ref-count\">{{ isProxyRefCount }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>isProxy(reactiveCount):</text>\r\n <text id=\"is-proxy-reactive-count\">{{ isProxyReactiveCount }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>isProxy(readonlyCount):</text>\r\n <text id=\"is-proxy-readonly-count\">{{ isProxyReadonlyCount }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>isProxy(shallowReactiveCount):</text>\r\n <text id=\"is-proxy-shallow-reactive-count\">{{\r\n isProxyShallowReactiveCount\r\n }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>isProxy(shallowReadonlyCount):</text>\r\n <text id=\"is-proxy-shallow-readonly-count\">{{\r\n isProxyShallowReadonlyCount\r\n }}</text>\r\n </view>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\nconst count = 0;\r\nconst isProxyCount = isProxy(count);\r\n\r\nconst refCount = ref(0);\r\nconst isProxyRefCount = isProxy(refCount);\r\n\r\nconst reactiveCount = reactive({ count: 0 });\r\nconst isProxyReactiveCount = isProxy(reactiveCount);\r\n\r\nconst readonlyCount = readonly({ count: 0 });\r\nconst isProxyReadonlyCount = isProxy(readonlyCount);\r\n\r\nconst shallowReactiveCount = shallowReactive({ count: 0 });\r\nconst isProxyShallowReactiveCount = isProxy(shallowReactiveCount);\r\n\r\nconst shallowReadonlyCount = shallowReadonly({ count: 0 });\r\nconst isProxyShallowReadonlyCount = isProxy(shallowReadonlyCount);\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/reactivity/utilities/is-proxy/is-proxy"},"utilities_is-reactive_is-reactive":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/reactivity/utilities/is-reactive/is-reactive.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>isReactive(count):</text>\r\n <text id=\"is-reactive-count\">{{ isReactiveCount }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>isReactive(count):</text>\r\n <text id=\"is-reactive-count\">{{ isReactiveCount }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>isReactive(refCount):</text>\r\n <text id=\"is-reactive-ref-count\">{{ isReactiveRefCount }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>isReactive(reactiveCount):</text>\r\n <text id=\"is-reactive-reactive-count\">{{ isReactiveReactiveCount }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>isReactive(readonlyCount):</text>\r\n <text id=\"is-reactive-readonly-count\">{{ isReactiveReadonlyCount }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>isReactive(shallowReactiveCount):</text>\r\n <text id=\"is-reactive-shallow-reactive-count\">{{\r\n isReactiveShallowReactiveCount\r\n }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>isReactive(shallowReadonlyCount):</text>\r\n <text id=\"is-reactive-shallow-readonly-count\">{{\r\n isReactiveShallowReadonlyCount\r\n }}</text>\r\n </view>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\nconst count = 0;\r\nconst isReactiveCount = isReactive(count);\r\n\r\nconst refCount = ref(0);\r\nconst isReactiveRefCount = isReactive(refCount);\r\n\r\nconst reactiveCount = reactive({ count: 0 });\r\nconst isReactiveReactiveCount = isReactive(reactiveCount);\r\n\r\nconst readonlyCount = readonly({ count: 0 });\r\nconst isReactiveReadonlyCount = isReactive(readonlyCount);\r\n\r\nconst shallowReactiveCount = shallowReactive({ count: 0 });\r\nconst isReactiveShallowReactiveCount = isReactive(shallowReactiveCount);\r\n\r\nconst shallowReadonlyCount = shallowReadonly({ count: 0 });\r\nconst isReactiveShallowReadonlyCount = isReactive(shallowReadonlyCount);\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/reactivity/utilities/is-reactive/is-reactive"},"utilities_is-readonly_is-readonly":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/reactivity/utilities/is-readonly/is-readonly.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>isReadonly(count):</text>\r\n <text id=\"is-readonly-count\">{{ isReadonlyCount }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>isReadonly(refCount):</text>\r\n <text id=\"is-readonly-ref-count\">{{ isReadonlyRefCount }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>isReadonly(reactiveCount):</text>\r\n <text id=\"is-readonly-reactive-count\">{{ isReadonlyReactiveCount }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>isReadonly(readonlyCount):</text>\r\n <text id=\"is-readonly-readonly-count\">{{ isReadonlyReadonlyCount }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>isReadonly(shallowReactiveCount):</text>\r\n <text id=\"is-readonly-shallow-reactive-count\">{{\r\n isReadonlyShallowReactiveCount\r\n }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>isReadonly(shallowReadonlyCount):</text>\r\n <text id=\"is-readonly-shallow-readonly-count\">{{\r\n isReadonlyShallowReadonlyCount\r\n }}</text>\r\n </view>\r\n </view>\r\n</template>\r\n\r\n<script setup lang='uts'>\r\n const count = 0;\r\n const isReadonlyCount = isReadonly(count);\r\n\r\n const refCount = ref(0);\r\n const isReadonlyRefCount = isReadonly(refCount);\r\n\r\n const reactiveCount = reactive({ count: 0 });\r\n const isReadonlyReactiveCount = isReadonly(reactiveCount);\r\n\r\n const readonlyCount = readonly({ count: 0 });\r\n const isReadonlyReadonlyCount = isReadonly(readonlyCount);\r\n\r\n const shallowReactiveCount = shallowReactive({ count: 0 });\r\n const isReadonlyShallowReactiveCount = isReadonly(shallowReactiveCount);\r\n\r\n const shallowReadonlyCount = shallowReadonly({ count: 0 });\r\n const isReadonlyShallowReadonlyCount = isReadonly(shallowReadonlyCount);\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/reactivity/utilities/is-readonly/is-readonly"},"utilities_is-ref_is-ref":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/reactivity/utilities/is-ref/is-ref.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>ref count:</text>\r\n <text id=\"ref-count\">{{ refCount }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>isRef ref count:</text>\r\n <text id=\"is-ref-ref-count\">{{ isRefRefCount }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>count:</text>\r\n <text id=\"count\">{{ count }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>isRef count:</text>\r\n <text id=\"is-ref-count\">{{ isRefCount }}</text>\r\n </view>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\nconst refCount = ref(0);\r\nconst count = 0;\r\nconst isRefRefCount = isRef(refCount);\r\nconst isRefCount = isRef(count);\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/reactivity/utilities/is-ref/is-ref"},"utilities_to-ref_to-ref":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/reactivity/utilities/to-ref/to-ref.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>count:</text>\r\n <text id=\"count\">{{ count }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>isRef count:</text>\r\n <text id=\"is-ref-count\">{{ isRefCount }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>ref count:</text>\r\n <text id=\"ref-count\">{{ refCount }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>isRef ref count:</text>\r\n <text id=\"is-ref-ref-count\">{{ isRefRefCount }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>obj.num:</text>\r\n <text id=\"obj-num\">{{ obj.num }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>toRef(obj, \"num\"):</text>\r\n <text id=\"to-ref-obj-num\">{{ objNum }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>toRef(() => obj.num):</text>\r\n <text id=\"to-ref-fn-obj-num\">{{ readonlyObjNum }}</text>\r\n </view>\r\n\r\n <button class=\"mt-10\" id=\"increment-btn\" @click=\"increment\">\r\n increment obj.num\r\n </button>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\nconst count = 0;\r\nconst isRefCount = isRef(count);\r\nconst refCount = toRef<number>(count);\r\nconst isRefRefCount = isRef(refCount);\r\n\r\ntype Obj = {\r\n num : number\r\n}\r\nconst obj = reactive({\r\n num: 0\r\n} as Obj)\r\n\r\nconst objNum = toRef<number>(obj, 'num')\r\n\r\nconst readonlyObjNum = toRef<number>(() : number => obj.num)\r\n\r\nconst increment = () => {\r\n obj.num++;\r\n objNum.value++;\r\n readonlyObjNum.value++;\r\n}\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/reactivity/utilities/to-ref/to-ref"},"utilities_to-refs_to-refs":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/reactivity/utilities/to-refs/to-refs.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>state.num:</text>\r\n <text id=\"state-num\">{{ state['num'] }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>state.str:</text>\r\n <text id=\"state-str\">{{ state['str'] }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>stateAsRefs.num:</text>\r\n <text id=\"state-as-refs-num\">{{ (stateAsRefs['num'] as Ref<number>).value }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>stateAsRefs.str:</text>\r\n <text id=\"state-as-refs-str\">{{ (stateAsRefs['str'] as Ref<string>).value }}</text>\r\n </view>\r\n <button class=\"mt-10\" id=\"update-state-btn\" @click=\"updateState\">update state</button>\r\n </view>\r\n</template>\r\n\r\n<script setup lang='uts'>\r\n // toRefs 仅支持 array 和 UTSJSONObject, 不支持自定义类型\r\n const state = reactive({\r\n num: 0,\r\n str: 'str-0'\r\n })\r\n\r\n const stateAsRefs = toRefs(state)\r\n\r\n const updateState = () => {\r\n state['num'] = (state['num'] as number) + 1;\r\n (stateAsRefs['str'] as Ref<string>).value = `str-${(stateAsRefs['num'] as Ref<number>).value}`\r\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/reactivity/utilities/to-refs/to-refs"},"utilities_to-value_to-value":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/reactivity/utilities/to-value/to-value.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>ref count:</text>\r\n <text id=\"ref-count\">{{ refCount }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>isRef ref count:</text>\r\n <text id=\"is-ref-ref-count\">{{ isRefRefCount }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>count:</text>\r\n <text id=\"count\">{{ count }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>isRef count:</text>\r\n <text id=\"is-ref-count\">{{ isRefCount }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>obj.num:</text>\r\n <text id=\"obj-num\">{{ obj.num }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>toValue(() => obj.num):</text>\r\n <text id=\"to-value-obj-num\">{{ toValueObjNum }}</text>\r\n </view>\r\n <button class=\"mt-10\" id=\"increment-btn\" @click=\"increment\">\r\n increment obj.num\r\n </button>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\nconst refCount = ref<number>(0);;\r\nconst isRefRefCount = isRef(refCount);\r\nconst count = toValue(refCount);\r\nconst isRefCount = isRef(count);\r\n\r\ntype Obj = {\r\n num : number\r\n}\r\nconst obj = reactive({\r\n num: 0\r\n} as Obj)\r\n\r\nlet toValueObjNum = toValue(() : number => 0)\r\n\r\nconst increment = () => {\r\n obj.num++;\r\n toValueObjNum++;\r\n}\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/reactivity/utilities/to-value/to-value"},"utilities_un-ref_un-ref":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/pages/reactivity/utilities/un-ref/un-ref.uvue","code":"```vue\n<template>\r\n <view class=\"page\">\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>ref count:</text>\r\n <text id=\"ref-count\">{{ refCount }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>ref count type:</text>\r\n <text id=\"ref-count-type\">{{ refCountType }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>count:</text>\r\n <text id=\"count\">{{ count }}</text>\r\n </view>\r\n <view class=\"flex justify-between flex-row mb-10\">\r\n <text>count type:</text>\r\n <text id=\"count-type\">{{ countType }}</text>\r\n </view>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\nconst refCount = ref<number>(0);\r\nconst refCountType = typeof refCount;\r\nconst count = unref(refCount);\r\nconst countType = typeof count;\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/pages/reactivity/utilities/un-ref/un-ref"}},"E_components":{"Bar":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/hello-uvue/components/Bar.uvue","code":"```vue\n<template>\n\t<text class=\"component-bar\">this is component Bar</text>\n</template>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/hello-uvue/components/Bar"},"CompForAppComponent":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/hello-uvue/components/CompForAppComponent.uvue","code":"```vue\n<template>\n <text class=\"uni-common-mt bold\">component for app.component</text>\n</template>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/hello-uvue/components/CompForAppComponent"},"CompForAppUse":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/hello-uvue/components/CompForAppUse.uvue","code":"```vue\n<template>\n <view>\n <text class=\"uni-common-mt bold\">component for app.use</text>\n <text class=\"uni-common-mt plugin1\">plugin1: {{ plugin1 }}</text>\n <text class=\"uni-common-mt plugin2\">plugin2: {{ plugin2 }}</text>\n <text class=\"uni-common-mt plugin3\">plugin3: {{ plugin3 }}</text>\n <text class=\"uni-common-mt plugin4\">plugin4: {{ plugin4 }}</text>\n <CompForPlugin1 />\n <CompForPlugin2 />\n </view>\n</template>\n\n<script lang=\"uts\">\nexport default {\n inject: ['plugin3', 'plugin4'],\n}\n</script>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/hello-uvue/components/CompForAppUse"},"CompForHFunction":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/hello-uvue/components/CompForHFunction.uvue","code":"```vue\n<template>\r\n <view>\r\n <text class=\"uni-common-mt bold component-for-h-function\">component for h()</text>\r\n <text id=\"comp-for-h-function-msg\">{{msg}}</text>\r\n </view>\r\n</template>\r\n\r\n<script>\r\n export default {\r\n props: {\r\n msg: {\r\n type: String\r\n }\r\n }\r\n }\r\n</script>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/hello-uvue/components/CompForHFunction"},"CompForHFunctionWithSlot":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/hello-uvue/components/CompForHFunctionWithSlot.uvue","code":"```vue\n<template>\r\n <view>\r\n <text class=\"uni-common-mt bold component-for-h-function\">component for h() with slot</text>\r\n <slot />\r\n </view>\r\n</template>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/hello-uvue/components/CompForHFunctionWithSlot"},"CompForPlugin":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/hello-uvue/components/CompForPlugin.uvue","code":"```vue\n<template>\n <text class=\"uni-common-mt component-for-plugin\">component for plugin</text>\n</template>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/hello-uvue/components/CompForPlugin"},"CompForPluginCopy":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/hello-uvue/components/CompForPluginCopy.uvue","code":"```vue\n<template>\n <text class=\"uni-common-mt component-for-plugin\">component for plugin</text>\n</template>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/hello-uvue/components/CompForPluginCopy"},"Foo":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/hello-uvue/components/Foo.uvue","code":"```vue\n<template>\r\n\t<text class=\"component-foo\">this is component Foo</text>\r\n</template>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/hello-uvue/components/Foo"},"custom-call-easy-method":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/hello-uvue/components/custom-call-easy-method.uvue","code":"```vue\n<template>\r\n <view>{{result}}</view>\r\n</template>\r\n\r\n<script>\r\n export default {\r\n data() {\r\n return {\r\n result: ''\r\n }\r\n },\r\n methods: {\r\n foo() : string {\r\n this.result = \"custom foo\"\r\n return this.result\r\n }\r\n }\r\n }\r\n</script>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/hello-uvue/components/custom-call-easy-method"},"define-expose-foo_define-expose-foo":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/hello-uvue/components/define-expose-foo/define-expose-foo.uvue","code":"```vue\n<script setup lang='uts'>\n const str = 'foo str'\n const num = ref(0)\n const increment = () => {\n num.value++\n }\n \n defineExpose({\n str,\n num,\n increment\n })\n \n</script>\n\n<template>\n <!-- #ifdef MP -->\n <view></view>\n <!-- #endif -->\n</template>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/hello-uvue/components/define-expose-foo/define-expose-foo"},"keep-alive_Counter":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/hello-uvue/components/keep-alive/Counter.uvue","code":"```vue\n<template>\r\n\t<view>\r\n\t\t<text class=\"counter-text\">count: {{ count }}</text>\r\n\t\t<button class=\"uni-common-mt counter-btn\" @click=\"increment\">+</button>\n\t\t<text class=\"uni-common-mt\" id=\"activated-num\">activated num: {{ activatedNum }}</text>\n\t\t<text class=\"uni-common-mt\" id=\"deactivated-num\">deactivated num: {{ deactivatedNum }}</text>\r\n\t</view>\r\n</template>\r\n\r\n<script lang=\"uts\">\r\n\texport default {\r\n\t\tname: 'Counter',\r\n\t\tdata() {\r\n\t\t\treturn {\r\n\t\t\t\tcount: 0,\r\n\t\t\t\tactivatedNum: 0,\r\n\t\t\t\tdeactivatedNum: 0,\r\n\t\t\t}\r\n\t\t},\r\n\t\tactivated() { this.activatedNum++ },\r\n\t\tdeactivated() { this.deactivatedNum++ },\r\n\t\tmethods: {\r\n\t\t\tincrement() {\n\t\t\t\tconsole.log('this.count: ',this.count);\r\n\t\t\t\tthis.count++\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n</script>\r\n\r\n<style>\r\n\t.counter-btn {\r\n\t\theight: 40px;\r\n\t\tline-height: 40px;\r\n\t\tborder: 1px solid #ccc;\r\n\t\tborder-radius: 4px;\r\n\t\ttext-align: center;\r\n\t}\r\n</style>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/hello-uvue/components/keep-alive/Counter"},"keep-alive_Message":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/hello-uvue/components/keep-alive/Message.uvue","code":"```vue\n<template>\r\n\t<view>\r\n\t\t<text class=\"uni-common-mt message-text\">msg: {{msg}}</text>\r\n\t\t<text class=\"uni-common-mt change-message\" @click=\"changeMessage\">change message</text>\r\n\t</view>\r\n</template>\r\n\r\n<script lang=\"uts\">\r\n\texport default {\r\n\t\tname: 'Message',\r\n\t\tdata() {\r\n\t\t\treturn {\r\n\t\t\t\tmsg: 'default message'\r\n\t\t\t}\r\n\t\t},\r\n\t\tmethods: {\r\n\t\t\tchangeMessage() {\r\n\t\t\t\tthis.msg = 'message changed'\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n</script>\r\n\r\n<style>\r\n\t.change-message {\r\n\t\theight: 40px;\r\n\t\tline-height: 40px;\r\n\t\tborder: 1px solid #ccc;\r\n\t\tborder-radius: 4px;\r\n\t\ttext-align: center;\r\n\t}\r\n</style>\r\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/hello-uvue/components/keep-alive/Message"},"keep-alive_ShouldExclude":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/hello-uvue/components/keep-alive/ShouldExclude.uvue","code":"```vue\n<template>\r\n\t<view>\n\t\t<text>should not be keep-alive</text>\r\n\t\t<text class=\"uni-common-mt should-exclude-text\">count: {{ count }}</text>\r\n\t\t<button class=\"uni-common-mt should-exclude-btn\" @click=\"increment\">+</button>\r\n\t</view>\r\n</template>\r\n\r\n<script lang=\"uts\">\r\n\texport default {\n\t\tname: 'ShouldExclude',\r\n\t\tdata() {\r\n\t\t\treturn {\r\n\t\t\t\tcount: 0\r\n\t\t\t}\r\n\t\t},\r\n\t\tmethods: {\r\n\t\t\tincrement() {\r\n\t\t\t\tthis.count++\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n</script>\n\n<style>\n\t.should-exclude-btn{\n\t\theight: 40px;\n\t\tline-height: 40px;\n\t\tborder: 1px solid #ccc;\n\t\tborder-radius: 4px;\n\t\ttext-align: center;\n\t}\n</style>\n\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/hello-uvue/components/keep-alive/ShouldExclude"},"test-type_test-type":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/hello-uvue/components/test-type/test-type.uvue","code":"```vue\n<template>\n\t<view>\n\t\ttest-type\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tname:\"test-type\",\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\t\n\t\t\t};\n\t\t}\n\t}\n</script>\n\n<style>\n\n</style>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/hello-uvue/components/test-type/test-type"},"test-type1_test-type1":{"gitUrl":"https://gitcode.net/dcloud/hello-uvue/-/tree/alpha/hello-uvue/components/test-type1/test-type1.uvue","code":"```vue\n<template>\n\t<view>\n\t\ttest-type1\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tname:\"test-type1\",\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\t\n\t\t\t};\n\t\t}\n\t}\n</script>\n\n<style>\n\n</style>\n```","webUrl":"https://hellouvue.dcloud.net.cn/#/hello-uvue/components/test-type1/test-type1"}}}