Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
unidocs-zh
提交
b33713c0
unidocs-zh
项目概览
DCloud
/
unidocs-zh
通知
3598
Star
108
Fork
921
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
120
列表
看板
标记
里程碑
合并请求
109
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
unidocs-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
120
Issue
120
列表
看板
标记
里程碑
合并请求
109
合并请求
109
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
b33713c0
编写于
8月 10, 2023
作者:
W
wanganxp
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
更新教程
上级
38bfdc94
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
313 addition
and
25 deletion
+313
-25
docs/collocation/pages.md
docs/collocation/pages.md
+30
-10
docs/tutorial/page.md
docs/tutorial/page.md
+203
-7
docs/tutorial/vue-basics.md
docs/tutorial/vue-basics.md
+73
-1
docs/uni-app-x/readme.md
docs/uni-app-x/readme.md
+2
-0
docs/uts/function.md
docs/uts/function.md
+5
-7
未找到文件。
docs/collocation/pages.md
浏览文件 @
b33713c0
...
...
@@ -898,14 +898,14 @@ h5 平台下拉刷新动画,只有 circle 类型。
> `HBuilderX 2.5.5`起支持`easycom`组件模式。
传统vue组件,需要安装、引用、注册,三个步骤后才能使用组件。
`easycom`
将其精简为一步。
只要组件安装在项目根目录或uni_modules的components目录下,并符合
`components/组件名称/组件名称.vue`
或
`uni_modules/插件ID/components/组件名称/组件名称.vue`
目录结构。就可以不用引用、注册,直接在页面中使用。
如下:
只要组件路径符合规范(具体见下),就可以不用引用、注册,直接在页面中使用。如下:
```
html
<template>
<view
class=
"container"
>
<comp-a></comp-a>
<uni-list>
<uni-list-item
title=
"第一行"
></uni-list-item>
<uni-list-item
title=
"第二行"
></uni-list-item>
</uni-list>
</view>
</template>
...
...
@@ -913,20 +913,40 @@ h5 平台下拉刷新动画,只有 circle 类型。
// 这里不用import引入,也不需要在components内注册uni-list组件。template里就可以直接用
export
default
{
data
()
{
return
{
}
return
{}
}
}
</script>
```
不管components目录下安装了多少组件,
`easycom`
打包后会自动剔除没有使用的组件,对组件库的使用尤为友好。
`路径规范`
指:
1.
安装在项目根目录的components目录下,并符合
`components/组件名称/组件名称.vue`
2.
安装在uni_modules下,路径为
`uni_modules/插件ID/components/组件名称/组件名称.vue`
工程目录:
<pre
v-pre=
""
data-lang=
""
>
<code
class=
"lang-"
style=
"padding:0"
>
┌─components
│ └─comp-a
│ └─comp-a.vue 符合easycom规范的组件
└─uni_modules
[
uni_module
](
/uni_modules
)
中符合easycom规范的组件
└─uni_modules
└─uni-list
└─components
└─uni-list
└─ uni-list.vue
</code>
</pre>
不管components目录下安装了多少组件,
`easycom`
打包会自动剔除没有使用的组件,对组件库的使用尤为友好。
组件库批量安装,随意使用,自动按需打包。以官方的
`uni-ui`
为例,在HBuilderX新建项目界面选择
`uni-ui`
项目模板,只需在页面中敲u,拉出大量组件代码块,直接选择,即可使用。大幅提升开发效率,降低使用门槛。
在
[
uni-app插件市场
](
https://ext.dcloud.net.cn/
)
下载符合
`components/组件名称/组件名称.vue`
目录结构的组件,均可直接使用。
**自定义easycom配置的示例**
`easycom`
是自动开启的,不需要手动开启,有需求时可以在
`pages.json`
的
`easycom`
节点进行个性化设置,如关闭自动扫描,或自定义扫描匹配组件的策略。设置参数如下:
|属性 |类型 |默认值 |描述 |
...
...
@@ -934,7 +954,7 @@ h5 平台下拉刷新动画,只有 circle 类型。
|autoscan |Boolean|true |是否开启自动扫描,开启后将会自动扫描符合
`components/组件名称/组件名称.vue`
目录结构的组件 |
|custom |Object |- |以正则方式自定义组件匹配规则。如果
`autoscan`
不能满足需求,可以使用
`custom`
自定义匹配规则 |
**自定义easycom配置的示例**
如果你的组件,不符合easycom前述的
`路径规范`
。可以在pages.json的easycom节点中自行定义路径规范。
如果需要匹配node_modules内的vue文件,需要使用
`packageName/path/to/vue-file-$1.vue`
形式的匹配规则,其中
`packageName`
为安装的包名,
`/path/to/vue-file-$1.vue`
为vue文件在包内的路径。
...
...
@@ -953,7 +973,7 @@ h5 平台下拉刷新动画,只有 circle 类型。
-
`easycom`
方式引入组件不是全局引入,而是局部引入。例如在H5端只有加载相应页面才会加载使用的组件
-
在组件名完全一致的情况下,
`easycom`
引入的优先级低于手动引入(区分连字符形式与驼峰形式)
-
考虑到编译速度,直接在
`pages.json`
内修改
`easycom`
不会触发重新编译,需要改动页面内容触发。
-
`easycom`
只处理vue组件,不处理小程序专用组件(如微信的wxml格式组件)。不处理后缀为.nvue的组件。
但vue组件也可以全端运行,包括小程序和app-nvue
。可以参考uni ui,使用vue后缀,同时兼容nvue页面。
-
`easycom`
只处理vue组件,不处理小程序专用组件(如微信的wxml格式组件)。不处理后缀为.nvue的组件。
因为nvue页面引入的组件也是.vue组件
。可以参考uni ui,使用vue后缀,同时兼容nvue页面。
-
`nvue`
页面里引用
`.vue`
后缀的组件,会按照nvue方式使用原生渲染,其中不支持的css会被忽略掉。这种情况同样支持
`easycom`
## tabBar
...
...
docs/tutorial/page.md
浏览文件 @
b33713c0
## 页面简介
uni-app项目中,一个页面就是一个符合
`Vue SFC规范`
的
`.vue`
文件或
`.nvue`
文件。
uni-app项目中,一个页面就是一个符合
`Vue SFC规范`
的
vue
文件。
`.vue`
页面和
`.nvue`
页面,均全平台支持,差异在于当uni-app发行到App平台时,
`.vue`
文件会使用webview进行渲染,
`.nvue`
会使用原生进行渲染,详见:
[
nvue原生渲染
](
/tutorial/nvue-outline
)
。
-
在 uni-app js 引擎版中,后缀名是
`.vue`
文件或
`.nvue`
文件。
-
在 uni-app x 中,后缀名是
`.uvue`
文件
这些页面均全平台支持,差异在于当 uni-app 发行到App平台时,
`.vue`
文件会使用webview进行渲染,
`.nvue`
会使用原生进行渲染,详见:
[
nvue原生渲染
](
/tutorial/nvue-outline
)
。
一个页面可以同时存在vue和nvue,在
[
pages.json
](
../collocation/pages.md
)
的路由注册中不包含页面文件名后缀,同一个页面可以对应2个文件名。重名时优先级如下:
-
在非app平台,先使用vue,忽略nvue
-
在app平台,使用nvue,忽略vue
## 新建页面
`uni-app`
中的页面,
通常会
保存在工程根目录下的
`pages`
目录下。
`uni-app`
中的页面,
默认
保存在工程根目录下的
`pages`
目录下。
每次新建页面,均需在
`pages.json`
中配置
`pages`
列表;未在
`pages.json -> pages`
中
配置的页面,
`uni-app`
会在编译阶段进行忽略。pages.json的完整配置参考:
[
全局文件
](
/collocation/pages
)
。
每次新建页面,均需在
`pages.json`
中配置
`pages`
列表;未在
`pages.json -> pages`
中
注册的页面,
`uni-app`
会在编译阶段进行忽略。pages.json的完整配置参考:
[
页面配置
](
../collocation/pages.md
)
。
通过HBuilderX开发
`uni-app`
项目时,在
`uni-app`
项目上右键“新建页面”,HBuilderX会自动在
`pages.json`
中完成页面注册,开发更方便。
...
...
@@ -18,17 +25,206 @@ uni-app项目中,一个页面就是一个符合`Vue SFC规范`的`.vue`文件
<img
src=
"https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/pages-add-02.png"
style=
"max-width:450px"
></img>
</div>
新建页面时,可以选择vue或nvue,还可以选择
`是否创建同名目录`
。创建目录的意义在于,如果你的页面较复杂,需要拆分多个附属的js、css、组件等文件,则使用目录归纳比较合适。如果只有一个页面文件,大可不必多放一层目录。
## 删除页面
删除页面时,需做两件工作:
-
删除
`.vue`
文件或
`.nvue`
文件
-
删除
`pages.json -> pages`
列表项中的配置
-
删除
`pages.json -> pages`
列表项中的配置 (如使用HBuilderX删除页面,会在状态栏提醒删除pages.json对应内容)
## pages.json
pages.json是工程的页面管理配置文件,包括:页面路由注册、页面参数配置(原生标题栏、下拉刷新...)、首页tabbar等众多功能。
其篇幅较长,另见
[
pages.json
](
../collocation/pages.md
)
## 应用首页
`uni-app`
会将
`pages.json -> pages`
配置项中的第一个页面,作为当前工程的首页(启动页)。
`pages.json -> pages`
配置项中的第一个页面,作为当前工程的首页(启动页)。
```
json
{
"pages"
:
[
{
"path"
:
"pages/index/index"
,
//名字叫不叫index无所谓,位置在第一个,就是首页
"style"
:
{
"navigationBarTitleText"
:
"首页"
//页面标题
}
},
{
"path"
:
"pages/my"
,
"style"
:
{
"navigationBarTitleText"
:
"我的"
}
},
]
}
```
## 页面内容构成
uni-app 页面基于 vue 规范。一个页面内,有3个根节点标签
`<template>`
、
`<script>`
、
`<style>`
,分别是模板组件区、脚本区、样式区。
```
html
<template>
<view
class=
"content"
>
<button
@
click=
"buttonClick"
>
{{title}}
</button>
</view>
</template>
<script>
export
default
{
data
()
{
return
{
title
:
"
Hello world
"
,
// 定义绑定在页面上的data数据
}
},
onLoad
()
{
// 页面启动的生命周期,这里编写页面加载时的逻辑
},
methods
:
{
buttonClick
:
function
()
{
console
.
log
(
"
按钮被点了
"
)
},
}
}
</script>
<style>
.content
{
width
:
750
rpx
;
background-color
:
white
;
}
</style>
```
### template模板区
template中文名为
`模板`
,它类似html的标签。但有2个区别:
1.
html中script和style是html的二级节点。但在vue文件中,template、script、style这3个是平级关系。
2.
html中写的是web标签,但vue的template中写的全都是vue组件,每个组件支持属性、事件、vue指令,还可以绑定vue的data数据。
在vue2中,template的二级节点只能有一个节点,一般是在一个根view下继续写页面组件(如上示例代码)。
但在vue3中,template可以有多个二级节点,省去一个层级,如下:
```
html
<template>
<view>
<text>
标题
</text>
</view>
<scroll-view>
</scroll-view>
</template>
```
可以在manifest中切换使用vue2还是vue3(uni-app x中只支持vue3)
### script脚本区
script中编写脚本,可以通过lang属性指定脚本语言。
-
在vue和nvue中,默认是js,可以指定ts
-
在uvue中,仅支持uts。
```
html
<script
lang=
"ts"
>
</script>
```
在vue的选项式(option)规范中,script下包含
`export default {}`
。(除了选项式,还有
[
组合式
](
vue3-composition-api.md
)
)
页面级的代码大多写在
`export default {}`
中。写在里面的代码,会随着页面关闭而关闭。
#### export default 外的代码
先来介绍写在
`export default {}`
外面的代码,一般有几种情况:
1.
import三方js/ts模块
2.
import非easycom的组件(一般组件推荐使用
[
easycom
](
../collocation/pages.md#easycom
)
,无需导入注册)
3.
在ts/uts中,对data的类型进行type定义
4.
定义作用域更大的变量,注意外层的静态变量不会跟随页面关闭而回收
```
html
<script
lang=
"ts"
>
const
TAB_OFFSET
=
1
;
// 外层静态变量不会跟随页面关闭而回收
import
charts
from
'
charts.ts
'
;
// 导入外部js/ts模块
import
swiperPage
from
'
swiper-page.vue
'
;
//导入非easycom的组件
type
GroupType
=
{
id
:
number
,
title
:
string
}
// 在ts中,为下面data数据的 groupList 定义类型
export
default
{
components
:
{
swiperPage
},
// 注册非easycom组件
data
()
{
return
{
groupList
:
[
{
id
:
1
,
title
:
"
第一组
"
},
{
id
:
2
,
title
:
"
第二组
"
},
]
as
GroupType
[],
// 为数据groupList定义ts类型
}
},
onLoad
()
{},
methods
:
{}
}
</script>
```
#### export default 里的代码
`export default {}`
里的内容,是页面的主要逻辑代码。包括几部分:
1.
data:template模板中需要使用的数据。具体
[
另见
](
vue-basics.md#data
)
2.
页面生命周期:如页面加载、隐藏、关闭,具体
[
见下
](
#lifecycle
)
3.
methods方法,如按钮点击、屏幕滚动
如下页面代码的逻辑是:
1.
在data中定义了
`title`
,初始值是"点我"
2.
在页面中放置了一个button组件,按钮文字区使用
`{{}}`
模板写法,里面写
`title`
,把data里的
`title`
绑定到按钮的文字区,即按钮的初始文字是"点我"
3.
按钮的点击事件
`@click`
,指向了methods里的一个方法
`buttonClick`
,点击按钮即触发这个方法的执行
4.
buttonClick方法里通过
`this.title`
的方式,访问data数据,并重新赋值为"被点了"。由于vue中data和界面是双向绑定,修改data中的
`title`
后,因为按钮文字绑定了
`title`
,会自动更新按钮的文字。
整体效果就是,刚开始按钮文字是"点我",点一下后按钮文字变成了"被点了"
```
html
<template>
<view>
<button
@
click=
"buttonClick"
>
{{title}}
</button>
</view>
</template>
<script>
export
default
{
data
()
{
return
{
title
:
"
点我
"
,
// 定义绑定在页面上的data数据
// 多个data在这里继续定义。逗号分隔
}
},
onLoad
()
{
// 页面启动的生命周期,这里编写页面加载时的逻辑
},
// 多个页面生命周期监听,在这里继续写。逗号分隔
methods
:
{
buttonClick
:
function
()
{
this
.
title
=
"
被点了
"
},
// 多个方法,在这里继续写。逗号分隔
}
}
</script>
```
本章节为页面代码介绍,并非vue教程,了解data数据需
[
详见
](
vue-basics.md#data
)
### style样式区
style的写法与web的css基本相同。
如果页面是nvue或uvue,使用原生渲染而不是webview渲染,那么它们支持的css是有限的。
详见
[
css文档
](
syntax-css.md
)
## 页面生命周期
@lifecycle
## 页面生命周期@lifecycle
``uni-app``
页面除支持 Vue 组件生命周期外还支持下方页面生命周期函数,当以组合式 API 使用时,在 Vue2 和 Vue3 中存在一定区别,请分别参考:
[
Vue2 组合式 API 使用文档
](
/tutorial/vue-composition-api.html
)
和
[
Vue3 组合式 API 使用文档
](
/tutorial/vue3-composition-api.html
)
。
...
...
docs/tutorial/vue-basics.md
浏览文件 @
b33713c0
...
...
@@ -471,7 +471,7 @@ v-on 指令,它用于监听 DOM 事件。v-on缩写为‘ @ ’,下文简称
## data 属性
## data 属性
@data
data 必须声明为返回一个初始数据对象的函数(注意函数内返回的数据对象不要直接引用函数外的对象);否则页面关闭时,数据不会自动销毁,再次打开该页面时,会显示上次数据。
...
...
@@ -499,8 +499,80 @@ data 必须声明为返回一个初始数据对象的函数(注意函数内返
}
```
return 外可以写一些复杂计算:
```
ts
<
script
lang
=
"
ts
"
>
export
default
{
data
()
{
const
date
=
new
Date
()
return
{
year
:
date
.
getFullYear
()
as
number
}
}
}
<
/script>
```
data数据在template中有2种绑定方式:
1.
text区域使用
`{{}}`
。详见
[
插值
](
#插值
)
2.
属性区域通过:属性名称,在属性值里直接写变量。详见
[
v-bind
](
#v-bind
)
```
html
<template>
<view
class=
"content"
>
<button
@
click=
"buttonClick"
:disabled=
"buttonEnable"
>
{{title}}
</button>
</view>
</template>
<script>
export
default
{
data
()
{
return
{
title
:
"
点我
"
,
buttonEnable
:
false
}
},
methods
:
{
buttonClick
:
function
()
{
this
.
buttonEnable
=
true
this
.
title
=
"
被点了,不能再点了
"
},
}
}
</script>
```
data数据在script中引用,通过
`this.`
的方式。如果在某些methods中this被指向了其他内容,则需要提前把this赋值给另一个变量,比如
`let that = this`
。
```
html
<script>
export
default
{
data
()
{
return
{
connectedWifi
:
""
}
},
methods
:
{
buttonClick
:
function
()
{
const
that
=
this
// 下面的this指向会变化,另存一下
uni
.
startWifi
({
success
:
function
()
{
uni
.
getConnectedWifi
({
success
:
function
(
res
)
{
const
{
wifi
}
=
res
that
.
connectedWifi
=
JSON
.
stringify
(
wifi
)
},
fail
:
function
(
res
)
{
}
})
},
fail
:
function
(
res
)
{
}
})
},
}
}
</script>
```
## Class 与 Style 绑定
...
...
docs/uni-app-x/readme.md
浏览文件 @
b33713c0
# `uni-app x 并未发布,本文档为内部使用`
# uni-app x 是什么?
uni-app x,是下一代 uni-app,是一个跨平台应用开发引擎。
...
...
docs/uts/function.md
浏览文件 @
b33713c0
...
...
@@ -165,20 +165,18 @@ const myPet = pet("Vivie");
myPet
();
// 返回结果 "Vivie"
```
### 函数参数
### 函数
默认
参数
#### 默认参数
函数参数可以有默认值,当省略相应的参数时使用默认值。
函数参数可以设默认值,当省略相应的参数时使用默认值。此时该参数也就成了可选参数。
```
ts
function
multiply
(
a
:
number
,
b
:
number
=
1
):
number
{
return
a
*
b
;
}
multiply
(
5
);
// 5
multiply
(
5
);
//
a为5,未传b的值,b默认为1,结果为
5
```
我们可以在能够使用
常规的函数定义的场景下使用默认参数,例如:
可以在
常规的函数定义的场景下使用默认参数,例如:
```
ts
function
print
(
msg
:
string
=
""
)
{
console
.
log
(
msg
)
...
...
@@ -187,7 +185,7 @@ print(); // ""
class
Persion
{
test
(
msg
:
string
|
null
=
null
)
{
test
(
msg
:
string
|
null
=
null
)
{
// 默认值可以为null
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录