built-in.md 13.9 KB
Newer Older
D
DCloud_LXH 已提交
1 2 3 4 5
# 内置内容

## 指令 @directives

<!-- VUEJSON.directives.compatibility -->
D
DCloud_LXH 已提交
6 7 8 9 10 11 12 13 14 15

### v-text

更新元素的文本内容。

- 期望的绑定值类型:string
- 详细信息

  v-text 将覆盖元素中所有现有的内容。

16
示例 [详情](<!-- VUEJSON.E_directive.v-text_v-text-options.gitUrl -->)
D
DCloud_LXH 已提交
17

18
::: preview <!-- VUEJSON.E_directive.v-text_v-text-options.webUrl -->
D
DCloud_LXH 已提交
19

20 21 22 23
>选项式 API

<!-- VUEJSON.E_directive.v-text_v-text-options.code -->

24 25 26 27
> 组合式 API

<!-- VUEJSON.E_directive.v-text_v-text-composition.code -->

D
DCloud_LXH 已提交
28 29 30 31 32
:::

### v-html

更新元素的内容,并且不会被解析。
D
DCloud_LXH 已提交
33 34

::: warning 注意
D
DCloud_LXH 已提交
35
`App-android` 平台,`v-html` 指令通过编译为 [rich-text](../component/rich-text.md) 组件实现。因此,`v-html` 指令的内容必须是 `rich-text` 支持的格式, 并且要遵循标签嵌套规则,例如, `swiper` 标签内只允许嵌套 `swiper-item` 标签。\
D
DCloud_LXH 已提交
36 37 38 39
同时,受限于 `rich-text` 组件不支持 `class` 样式,`v-html` 指令中同样不支持 `class` 样式。\
绑定 `v-html` 的标签内的内容会被忽略,`v-html` 指令的内容会编译为 `rich-text` 组件渲染为该标签的子节点。
:::

40
示例 [详情](<!-- VUEJSON.E_directive.v-html_v-html-options.gitUrl -->)
D
DCloud_LXH 已提交
41

42
::: preview <!-- VUEJSON.E_directive.v-html_v-html-options.webUrl -->
D
DCloud_LXH 已提交
43

44 45 46 47
>选项式 API

<!-- VUEJSON.E_directive.v-html_v-html-options.code -->

48 49 50 51
> 组合式 API

<!-- VUEJSON.E_directive.v-html_v-html-composition.code -->

D
DCloud_LXH 已提交
52 53 54 55 56 57 58
:::


### v-show

基于表达式值的真假性,来改变元素的可见性。

59
示例 [详情](<!-- VUEJSON.E_directive.v-show_v-show-options.gitUrl -->)
D
DCloud_LXH 已提交
60

61
::: preview <!-- VUEJSON.E_directive.v-show_v-show-options.webUrl -->
D
DCloud_LXH 已提交
62

63 64 65 66
>选项式 API

<!-- VUEJSON.E_directive.v-show_v-show-options.code -->

67 68 69 70
> 组合式 API

<!-- VUEJSON.E_directive.v-show_v-show-composition.code -->

D
DCloud_LXH 已提交
71 72 73 74 75 76 77 78 79 80 81 82
:::

### v-if

基于表达式值的真假性,来条件性地渲染元素或者模板片段。

- 详细信息

`v-if` 元素被触发,元素及其所包含的指令/组件都会销毁和重构。如果初始条件是假,那么其内部的内容根本都不会被渲染。

  可用于 `<template>` 表示仅包含文本或多个元素的条件块。

83
示例 [详情](<!-- VUEJSON.E_directive.v-if_v-if-options.gitUrl -->)
D
DCloud_LXH 已提交
84

85
::: preview <!-- VUEJSON.E_directive.v-if_v-if-options.webUrl -->
D
DCloud_LXH 已提交
86

87 88 89 90
>选项式 API

<!-- VUEJSON.E_directive.v-if_v-if-options.code -->

91 92 93 94
> 组合式 API

<!-- VUEJSON.E_directive.v-if_v-if-composition.code -->

D
DCloud_LXH 已提交
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
:::

### v-for

基于原始数据多次渲染元素或模板块。

- 期望的绑定值类型:`Array | UTSJSONObject | number | string | Iterable`

- 详细信息

  指令值必须使用特殊语法 `alias in expression` 为正在迭代的元素提供一个别名:

  ```vue
  <view v-for="item in items">
  {{ item.text }}
  </view>
  ```
  `v-for` 的默认方式是尝试就地更新元素而不移动它们。要强制其重新排序元素,你需要用特殊 attribute `key` 来提供一个排序提示:

  ```vue
  <view v-for="item in items" :key="item.id">
  {{ item.text }}
  </view>
  ```

120
示例 [详情](<!-- VUEJSON.E_directive.v-for_v-for-options.gitUrl -->)
D
DCloud_LXH 已提交
121

122
::: preview <!-- VUEJSON.E_directive.v-for_v-for-options.webUrl -->
D
DCloud_LXH 已提交
123

124 125 126 127
>选项式 API

<!-- VUEJSON.E_directive.v-for_v-for-options.code -->

128 129 130 131
> 组合式 API

<!-- VUEJSON.E_directive.v-for_v-for-composition.code -->

D
DCloud_LXH 已提交
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
:::

### v-on

给元素绑定事件监听器。

- 缩写:`@`

- 期望的绑定值类型:`Function | Object (不带参数)`

- 参数:`event` (使用对象语法则为可选项)

- 修饰符
  - `.stop` - 调用 `event.stopPropagation()`
  - `.once` - 最多触发一次处理函数。
D
DCloud_LXH 已提交
147 148 149

- [事件修饰符](https://uniapp.dcloud.net.cn/tutorial/vue3-basics.html#%E4%BA%8B%E4%BB%B6%E4%BF%AE%E9%A5%B0%E7%AC%A6) 只支持 `stop``once`

150
示例 [详情](<!-- VUEJSON.E_directive.v-on_v-on-options.gitUrl -->)
D
DCloud_LXH 已提交
151

152
::: preview <!-- VUEJSON.E_directive.v-on_v-on-options.webUrl -->
D
DCloud_LXH 已提交
153

154 155 156 157
>选项式 API

<!-- VUEJSON.E_directive.v-on_v-on-options.code -->

158 159 160 161
> 组合式 API

<!-- VUEJSON.E_directive.v-on_v-on-composition.code -->

D
DCloud_LXH 已提交
162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
:::

### v-bind

动态的绑定一个或多个 attribute,也可以是组件的 prop。

- 缩写:
  - `:` 或者 `.` (当使用 `.prop` 修饰符)
  - 值可以省略 (当 attribute 和绑定的值同名时)

- 期望:`any (带参数) | Object (不带参数)`

- 参数:`attrOrProp (可选的)`

- 用途

  当用于绑定 `class``style` attribute,`v-bind` 支持额外的值类型如数组或对象。

  当用于组件 props 绑定时,所绑定的 props 必须在子组件中已被正确声明。

  当不带参数使用时,可以用于绑定一个包含了多个 attribute 名称-绑定值对的对象。

184
示例 [详情](<!-- VUEJSON.E_directive.v-bind_v-bind-options.gitUrl -->)
D
DCloud_LXH 已提交
185

186
::: preview <!-- VUEJSON.E_directive.v-bind_v-bind-options.webUrl -->
D
DCloud_LXH 已提交
187

188 189 190 191
>选项式 API

<!-- VUEJSON.E_directive.v-bind_v-bind-options.code -->

192 193 194 195
> 组合式 API

<!-- VUEJSON.E_directive.v-bind_v-bind-composition.code -->

D
DCloud_LXH 已提交
196 197 198 199 200 201 202 203 204 205 206 207 208
:::

### v-model

在表单输入元素或组件上创建双向绑定。

- 期望的绑定值类型:根据表单输入元素或组件输出的值而变化

- 修饰符 <Badge text="仅 Android">
  - `.lazy` - 监听 `change` 事件而不是 `input` 事件
  - `.number` - 将输入的合法字符串转为数字
  - `.trim` - 移除输入内容两端空格

209
示例 [详情](<!-- VUEJSON.E_directive.v-model_v-model-options.gitUrl -->)
D
DCloud_LXH 已提交
210

211
::: preview <!-- VUEJSON.E_directive.v-model_v-model-options.webUrl -->
D
DCloud_LXH 已提交
212

213 214 215 216
>选项式 API

<!-- VUEJSON.E_directive.v-model_v-model-options.code -->

217 218 219 220
> 组合式 API

<!-- VUEJSON.E_directive.v-model_v-model-composition.code -->

D
DCloud_LXH 已提交
221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250
:::

### v-pre

跳过该元素及其所有子元素的编译。

- 无需传入

- 详细信息

  元素内具有 `v-pre`,所有 Vue 模板语法都会被保留并按原样渲染。最常见的用例就是显示原始双大括号标签及内容。

示例 [详情](<!-- VUEJSON.E_directive.v-pre_v-pre.gitUrl -->)

::: preview <!-- VUEJSON.E_directive.v-pre_v-pre.webUrl -->

<!-- VUEJSON.E_directive.v-pre_v-pre.code -->

:::

### v-once

仅渲染元素和组件一次,并跳过之后的更新。

- 无需传入

- 详细信息

  在随后的重新渲染,元素/组件及其所有子项将被当作静态内容并跳过渲染。这可以用来优化更新时的性能。

251
示例 [详情](<!-- VUEJSON.E_directive.v-once_v-once-options.gitUrl -->)
D
DCloud_LXH 已提交
252

253
::: preview <!-- VUEJSON.E_directive.v-once_v-once-options.webUrl -->
D
DCloud_LXH 已提交
254

255 256 257 258
>选项式 API

<!-- VUEJSON.E_directive.v-once_v-once-options.code -->

259 260 261 262
> 组合式 API

<!-- VUEJSON.E_directive.v-once_v-once-composition.code -->

D
DCloud_LXH 已提交
263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278
:::

### v-slot

用于声明具名插槽或是期望接收 props 的作用域插槽。

- 缩写:`#`

- 期望的绑定值类型:能够合法在函数参数位置使用的 JavaScript 表达式。支持解构语法。绑定值是可选的——只有在给作用域插槽传递 props 才需要。

- 参数:插槽名 (可选,默认是 `default`)

- 仅限:
  - `<template>`
  - [components](./component.md) (用于带有 prop 的单个默认插槽)

279
示例 [详情](<!-- VUEJSON.E_directive.v-slot_v-slot-options.gitUrl -->)
D
DCloud_LXH 已提交
280

281
::: preview <!-- VUEJSON.E_directive.v-slot_v-slot-options.webUrl -->
D
DCloud_LXH 已提交
282

283 284 285 286
>选项式 API

<!-- VUEJSON.E_directive.v-slot_v-slot-options.code -->

287 288 289 290
> 组合式 API

<!-- VUEJSON.E_directive.v-slot_v-slot-composition.code -->

D
DCloud_LXH 已提交
291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320
:::

### v-memo

- 期望的绑定值类型:`any[]`

- 详细信息

  缓存一个模板的子树。在元素和组件上都可以使用。为了实现缓存,该指令需要传入一个固定长度的依赖值数组进行比较。如果数组里的每个值都与最后一次的渲染相同,那么整个子树的更新将被跳过。举例来说:

    ```vue
    <view v-memo="[valueA, valueB]">
      ...
    </view>
    ```

  当组件重新渲染,如果 `valueA``valueB` 都保持不变,这个 `<view>` 及其子项的所有更新都将被跳过。实际上,甚至虚拟 DOM 的 vnode 创建也将被跳过,因为缓存的子树副本可以被重新使用。

  正确指定缓存数组很重要,否则应该生效的更新可能被跳过。`v-memo` 传入空依赖数组 (`v-memo="[]"`) 将与 `v-once` 效果相同。

  v-memo 仅用于性能至上场景中的微小优化,应该很少需要。最常见的情况可能是有助于渲染海量 v-for 列表 (长度超过 1000 的情况):

  当组件的 `selected` 状态改变,默认会重新创建大量的 vnode,尽管绝大部分都跟之前是一模一样的。`v-memo` 用在这里本质上是在说“只有当该项的被选中状态改变时才需要更新”。这使得每个选中状态没有变的项能完全重用之前的 vnode 并跳过差异比较。注意这里 memo 依赖数组中并不需要包含 `item.id`,因为 Vue 也会根据 item 的 `:key` 进行判断。

  ::: warning 警告
  当搭配 `v-for` 使用 `v-memo`,确保两者都绑定在同一个元素上。`v-memo` 不能用在 `v-for` 内部。
  :::

  `v-memo` 也能被用于在一些默认优化失败的边际情况下,手动避免子组件出现不需要的更新。但是一样的,开发者需要负责指定正确的依赖数组以免跳过必要的更新。

321
示例 [详情](<!-- VUEJSON.E_directive.v-memo_v-memo-options.gitUrl -->)
D
DCloud_LXH 已提交
322

323
::: preview <!-- VUEJSON.E_directive.v-memo_v-memo-options.webUrl -->
D
DCloud_LXH 已提交
324

325 326 327 328
>选项式 API

<!-- VUEJSON.E_directive.v-memo_v-memo-options.code -->

329 330 331 332
> 组合式 API

<!-- VUEJSON.E_directive.v-memo_v-memo-composition.code -->

D
DCloud_LXH 已提交
333 334
:::

D
DCloud_LXH 已提交
335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472
## 组件 @component

- [props](../component/README.md#props)
- [自定义事件](../component/README.md#自定义事件)
- [计算属性和侦听器](../component/README.md#计算属性和侦听器)
- [作用域插槽的类型](../component/README.md#作用域插槽的类型)
- [监听页面生命周期](../component/README.md#监听页面生命周期)
- [vue 与 uvue 不同文件后缀的优先级](../component/README.md#priority)

::: warning 注意
- App 端,如需页面级滚动,根节点必须是 `scroll-view` 标签。
:::

### \<KeepAlive> @keep-alive

<!-- VUEJSON.keep-alive.description -->

<!-- VUEJSON.keep-alive.attribute -->

<!-- VUEJSON.keep-alive.event -->

<!-- VUEJSON.keep-alive.example -->

<!-- VUEJSON.keep-alive.compatibility -->

<!-- VUEJSON.keep-alive.children -->

<!-- VUEJSON.keep-alive.reference -->

### \<Transition> @transition

<!-- VUEJSON.transition.description -->

<!-- VUEJSON.transition.attribute -->

<!-- VUEJSON.transition.event -->

<!-- VUEJSON.transition.example -->

<!-- VUEJSON.transition.compatibility -->

<!-- VUEJSON.transition.children -->

<!-- VUEJSON.transition.reference -->


### \<TransitionGroup> @transition-group

<!-- VUEJSON.transition-group.description -->

<!-- VUEJSON.transition-group.attribute -->

<!-- VUEJSON.transition-group.event -->

<!-- VUEJSON.transition-group.example -->

<!-- VUEJSON.transition-group.compatibility -->

<!-- VUEJSON.transition-group.children -->

<!-- VUEJSON.transition-group.reference -->


### \<Teleport> @teleport

<!-- VUEJSON.teleport.description -->

<!-- VUEJSON.teleport.attribute -->

**注意:**
- App-Android 平台暂不支持动态修改 `to` 属性。

<!-- VUEJSON.teleport.event -->

<!-- VUEJSON.teleport.example -->

<!-- VUEJSON.teleport.compatibility -->

<!-- VUEJSON.teleport.children -->

<!-- VUEJSON.teleport.reference -->

## 特殊元素 @special-elements

### \<template> @template

<!-- VUEJSON.template.description -->

<!-- VUEJSON.template.attribute -->

<!-- VUEJSON.template.event -->

<!-- VUEJSON.template.example -->

<!-- VUEJSON.template.compatibility -->

<!-- VUEJSON.template.children -->

<!-- VUEJSON.template.reference -->


### \<slot> @slot

<!-- VUEJSON.slot.description -->

<!-- VUEJSON.slot.attribute -->

<!-- VUEJSON.slot.event -->

<!-- VUEJSON.slot.example -->

<!-- VUEJSON.slot.compatibility -->

<!-- VUEJSON.slot.children -->

<!-- VUEJSON.slot.reference -->

### \<component> @component

<!-- VUEJSON.component.description -->

<!-- VUEJSON.component.attribute -->

<!-- VUEJSON.component.event -->

<!-- VUEJSON.component.example -->

<!-- VUEJSON.component.compatibility -->

<!-- VUEJSON.component.children -->

<!-- VUEJSON.component.reference -->

## 特殊 Attributes @special-attributes

<!-- VUEJSON.special_attributes.compatibility -->

<!-- VUEJSON.special_attributes.example -->
D
DCloud_LXH 已提交
473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534

### key

`key` 这个特殊的 attribute 主要作为 Vue 的虚拟 DOM 算法提示,在比较新旧节点列表时用于识别 vnode。

- 预期:`number | string | symbol`

- 详细信息

  在没有 key 的情况下,Vue 将使用一种最小化元素移动的算法,并尽可能地就地更新/复用相同类型的元素。如果传了 key,则将根据 key 的变化顺序来重新排列元素,并且将始终移除/销毁 key 已经不存在的元素。

  同一个父元素下的子元素必须具有唯一的 key。重复的 key 将会导致渲染异常。

  最常见的用例是与 `v-for` 结合:

  ```vue
  <view>
    <text v-for="item in items" :key="item.id">...</text>
  </view>
  ```

  也可以用于强制替换一个元素/组件而不是复用它。当你想这么做时它可能会很有用:

  - 在适当的时候触发组件的生命周期钩子
  - 触发过渡

  举例来说:

  ```vue
  <transition>
    <text :key="text">{{ text }}</text>
  </transition>
  ```

`text` 变化时,`<text>` 总是会被替换而不是更新,因此 transition 将会被触发。

### ref

用于注册模板引用。

- 预期:`string | Function`

- 详细信息

`ref` 用于注册元素或子组件的引用。

使用选项式 API,引用将被注册在组件的 `this.$refs` 对象里:

```vue
<!-- 存储为 this.$refs["textRef"] -->
<text ref="textRef">hello</text>
```

使用组合式 API,引用将存储在与名字匹配的 ref 里:[详情](./component.md#page-call-component-method)

`this.$refs` 也是非响应式的,因此你不应该尝试在模板中使用它来进行数据绑定。

### is

用于绑定动态组件。

- 预期:`string | Component`