From acd9c20c1c405759d001ddd59f6be6c1243c3373 Mon Sep 17 00:00:00 2001 From: wanganxp Date: Mon, 27 May 2024 05:30:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BB=84=E4=BB=B6=E5=92=8Cvu?= =?UTF-8?q?e=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/component/README.md | 169 +++++++++++++++++++++++++++++++++++---- docs/vue/README.md | 126 +++++++++++++++++++++-------- docs/vue/component.md | 13 ++- docs/vue/data-bind.md | 2 +- 4 files changed, 252 insertions(+), 58 deletions(-) diff --git a/docs/component/README.md b/docs/component/README.md index 0d33f1c3..3964aa41 100644 --- a/docs/component/README.md +++ b/docs/component/README.md @@ -1,28 +1,165 @@ -# uvue组件概述 +# 组件概述 -## 定义 +## 组件定义 - 组件是视图层的基本组成单元。 -- 组件是一个单独且可复用的功能模块的封装。 +- 组件是一个单独且可复用的UI及配套功能模块的封装。 + +我们知道js逻辑可以封装为函数或类库。而对于页面上可视的元素,则可以将ui、样式、逻辑一起封装为组件。 + +组件涉及较多的概念,包括组件名称、开头和闭合标签、组件属性、组件属性值、组件事件、组件vue指令、组件text内容、子组件。 + +我们先看一个简单的例子: +```vue + + content + +``` + +上面的代码,是一个组件,组件名为component-name,这个组件有2个属性,property1和property2,这2个属性的属性值都是"value",组件的text内容为"content" + +然后我们看一个全面但有些复杂的示例,这段示例融合了组件的各种概念: + +```vue + + +``` + +所有组件,都写在template标签下面。 + +- 组件的名称和开始/结束标签 +每个组件,都有开始和结束标签。\ +标签由尖括号包裹,它有开始标签和结束标签。结束标签的`<`后面用`/`来表示结束。结束标签也称为闭合标签。 +比如上面例子中template节点下第一个子节点 ,view 表示这个组件的名称,为开始标签,为闭合标签。这是一个空的view视图组件。 + +如果标签没有text内容或子组件,可以写成 自闭合标签,即只写 开始标签,并且 开始标签 以 `/>` 结尾。\ +比如上面例子中的 `` + +- 组件内容text +指组件的内容区,即组件的开始标签和闭合标签之间的文字内容。\ +比如上面例子中button组件中的“修改文字内容”。\ +uni-app x中只有button、text组件等少数组件支持内容区,具体需查阅每个组件文档。 + +- 子组件 +组件的内容区可以不是文字,而是下级组件。\ +比如上面例子中view组件的子组件是text组件,而scroll-view组件下面有3个button子组件。\ +并非所有组件都支持子组件,一般视图组件肯定是支持子组件的,其他组件需要查阅组件的文档说明。 + +- 组件属性 +组件开始标签的组件名称后面,以空格分割的、以等号赋值的,不以v-或@开头的普通属性。\ +比如上面例子中button组件的[type属性](../component/button.md),它定义了组件的一些控制参数,这是由组件作者给使用者提供的自定义参数。\ + +- 组件属性值 +在属性名后面用=号赋值的内容。\ +比如上面例子中button组件的type属性,其属性值为primary,`type="primary"`,即表示一个主按钮。\ + +- 事件 +组件在发生某些事件后触发的函数。\ +比如上面例子中button组件的click事件。`@click="buttonClick_changeText"`。\ +buttonClick_changeText 是script里定义的一个函数。\ +事件区别于普通属性名的特征是以@开头,事件值指向一个函数(选项式指向一个method)。\ +很多事件还有event参数。\ +比如上面例子中image组件的error事件,绑定到imgerror函数,它有一个参数event对象,类型是ImageErrorEvent。接下来的代码打印了event对象的2个属性。 + +- vue指令 +vue提供的一批特殊写法的属性,它们以v-开头,比如上面例子中text组件的v-if指令,绑定了一个titleShow的响应式变量,根据变量的true或false可以决定text组件是否显示。详见[vue指令](./built-in.md)\ +有一种特殊指令`v-bind`,一种把属性值变成script以便绑定响应式变量的写法,它的完整写法是 v-bind:普通属性名 = "属性值", +但它更常见的写法是简写为在普通属性前面加个冒号,比如上面例子中text组件的:style,`:style="'color:' + titleColor"`。\ +这个写法的意思是,text组件的style样式中,color属性的值绑定到了script定义的响应式变量titleColor上,修改这个响应式变量的值,text组件的文字颜色就会跟着变化。\ +绑定后属性值的内容变成了script,而不再是普通字符串。所以在属性值里写字符串需要再加单引号。 + + +组件们,有公共的属性和事件,[详见](../component/common.md),也有组件特有的属性和事件,详见每个组件的文档。 + +每个组件可以有多个属性、指令、事件,用空格分割。它们赋值的=号,前后可以允许0个或1个空格。 + +所有组件与属性名都是**小写**,单词之间以连字符`-`连接。 + +## 组件的分类 + +uni-app x文档规范中有一批标准组件,同时也支持扩展自定义组件。 + +### 1. 标准组件 +- 1.1 内置组件 +内置在uni-app x引擎中,开发者无需在代码中引用和注册的,可以直接使用。比如view、text、button... +- 1.2 ext组件 +在app平台,对于不太常用、体积又大的官方基础组件,虽然其文档在uni-app x的官方文档中,但并没有内置到uni-app x引擎中。需要开发者下载ext组件到项目下才能使用。\ +出现这种情况一般是由于小程序规范里内置了该组件,而App端又不常用。(为了多端兼容,uni的组件规范是参考小程序组件规范制定的)\ +比如[animation-view组件](./animation-view.md)。\ +除了ext组件,还有ext api,它们情况类似,详细介绍:[ext插件](https://uniapp.dcloud.net.cn/api/extapi.html) + +### 2. 自定义组件 + +标准组件只是一些基础组件。开发者还可以自行扩展组件,封装UI和逻辑,称为自定义组件。 + +这类组件需要手动下载到项目中,或者自行在项目下编写。 + +自定义组件,按开发方式分类,又有2种:前端uvue组件 和 原生uts组件 + +- 2.1 前端uvue组件 +即开发者自己按照vue组件规范编写的uvue文件。这种组件一般由前端工程师编写。详见[uvue组件模型介绍](../vue/component.md) +- 2.2 原生uts组件 +这是一种App平台专用的扩展机制。 +由Android或iOS的原生开发者,按照uts插件的组件规范编写,把原生的view嵌入到uvue页面上,它在编写时贴近但不完全是vue组件开发规范。\ +不过对于组件的使用者来讲,用法就是标准的uvue组件了。详见[uts组件开发指南](../plugin/uts-component.md)\ +uts原生组件,下载组件到项目后(或自己按规范编写),在页面template里直接引用即可。无需导入注册组件。 + +对于前端uvue组件,又有2种引用方式。 +1. 传统vue组件: +需要先import、注册,然后再在页面template中使用。[详见](../vue/component.md#manual-import-component) +2. easycom组件 +easycom组件是uni-app提供的一种易用方式,它通过一个路径规范让编译器知道组件的位置,实现自动的import和注册。详见[easycom组件规范](../vue/component.md#easycom) -每个组件,包括如下几个部分:以组件名称为标记的开始标签和结束标签、组件内容、组件属性、组件属性值。 +在uni插件市场([https://ext.dcloud.net.cn/](https://ext.dcloud.net.cn/)),下载的组件基本都是easycom组件规范或uts原生组件规范,都是在页面里可以直接引用的。 -- 组件名称由尖括号包裹,称为标签,它有开始标签和结束标签。结束标签的`<`后面用`/`来表示结束。结束标签也称为闭合标签。如下面示例的``是开始标签,``是结束标签。 -- 在开始标签和结束标签之间,称为组件内容。如下面示例的`content` -- 开始标签上可以写属性,属性可以有多个,多个属性之间用空格分割 -- 每个属性通过`=`赋值 +插件市场的功能较多,可以看介绍了解:[详见](https://uniapp.dcloud.net.cn/plugin/plugin-ext-introduction.html) -## 组件种类 +## 其他组件概念 +- datacom +`datacom`是一种数据驱动的组件,只需要给出符合格式的数据就可以使用。它是uvue组件的子类,尤其适合云端一体组件。详见:[datacom介绍](https://uniapp.dcloud.net.cn/component/datacom.html) -uvue页面中,支持3种组件: -1. 内置组件,即文档左侧的组件清单 -2. 自定义uvue组件,即开发者自己按照vue组件规范编写的uvue文件。这种组件一般由前端工程师编写。如果按照指定目录规范放置,在使用组件时无需import和注册,即[easycom组件规范](../vue/component.md#easycom) -3. uts原生组件。由Android或iOS的原生开发者,按照uts插件的组件规范编写,它在编写时贴近但不完全是vue组件开发规范。不过对于组件的使用者来讲,用法就是标准的uvue组件了。[详见](../plugin/uts-component.md) +- uni_modules +`uni_modules`是uni-app生态的包管理方案。非内置组件,可以放在项目下任意位置,也可以封装在`uni_modules`下。一般对外提供的成熟组件都应该封装在`uni_modules`下。\ +如果还不了解`uni_modules`,那务必需要阅读:[uni_modules介绍](https://uniapp.dcloud.net.cn/plugin/uni_modules.html) -## 组件监听页面生命周期 -`4.0` 起可通过组合式 API 实现组件中监听页面生命周期,[示例代码](../vue/component.md#component-lifecycle)。 +## 组件的编写 +- 前端uvue组件的开发指南:[详见](../vue/component.md) +- uts原生组件的开发指南:[详见](../plugin/uts-component.md) +组件开发完毕后可发布到插件市场,插件作者指南:[详见](https://uniapp.dcloud.net.cn/plugin/publish.html) + + ## 调用组件方法@methods 需要把组件分为 内置组件、easycom组件、非easycom组件,这3种组件有不同的方法调用方式。[详情](../vue/component.md#page-call-component-method) @@ -76,7 +213,7 @@ easycom组件,用法和内置组件一样。也是使用 `this.$refs` 获取 ### vue 与 uvue 不同文件后缀的优先级 @priority -新建组件时,默认组件的后缀名为.uvue,但也支持.vue。 +新建组件时(注意不是新建页面),默认组件的后缀名为.uvue,但也支持.vue。 .vue里面写uvue的语法,可以正常被.uvue页面引用和编译。 diff --git a/docs/vue/README.md b/docs/vue/README.md index ffce57f4..acf144a4 100644 --- a/docs/vue/README.md +++ b/docs/vue/README.md @@ -39,46 +39,48 @@ HBuilderX/uni-app x,会跟踪vue版本的升级,版本映射表如下 注意html中,根节点是``,` ``` +可以看出整体和html还是很接近的。但响应式变量和绑定机制,可以免去写大量的dom操作代码,让开发更高效轻松。 + +基于选项式的示例,下面章节会提供。 + ## template template中文名为`模板`,它类似html的标签。但有2个区别: 1. html中 `script` 和 `style` 是 html 的二级节点。但在 uvue 文件中,`template`、`script`、`style` 这3个是平级关系。 -2. html 中写的是 web 标签,但 vue 的 `template` 中写的全都是 vue 组件(包括[内置基础组件](../component/README.md)、自定义uvue组件、[uts原生插件组件](../plugin/uts-component.md)),每个组件支持属性、事件、vue 指令,还可以绑定 vue 的 data 数据。 +2. html 中写的是 web 标签,但 vue 的 `template` 中写的全都是 vue 组件(包括[内置基础组件](../component/README.md)、自定义前端uvue组件、[uts原生插件组件](../plugin/uts-component.md)),每个组件支持属性、事件、vue 指令,还可以绑定 vue 的 data 数据。 组件,即component,是vue中非常重要的概念,或者说现代开发框架都离不开组件概念。 @@ -86,19 +88,39 @@ template中文名为`模板`,它类似html的标签。但有2个区别: 在 uni-app x 中, ``是最基本的视图容器组件,``则是文字组件,`