pagesjson.md 13.0 KB
Newer Older
D
DCloud_LXH 已提交
1 2
# pages.json

D
DCloud_LXH 已提交
3
`pages.json` 文件是 uni-app x 的页面管理配置文件,决定**应用的首页**、页面文件的路径、窗口样式、原生的导航栏、底部的原生tabbar 等。
D
DCloud_LXH 已提交
4

D
DCloud_LXH 已提交
5
**所有页面,均需在pages.json中注册,否则不会被打包到应用中。**
D
DCloud_LXH 已提交
6 7 8 9 10 11 12 13 14 15 16 17 18

在HBuilderX中新建页面,默认会在pages.json中自动注册。在HBuilderX中删除页面文件,也会在状态栏提示从pages.json中移除注册。

除了管理页面,pages.json支持对页面进行特殊配置,比如应用首页的tabbar、每个页面的顶部导航栏设置。

但这些uni-app中设计的功能,主要是为了解决页面由webview渲染带来的性能问题,由原生提供一些配置来优化。

uni-app x的app平台,页面不再由webview渲染,其实不需要原生提供特殊配置来优化。但为了开发的便利和多端的统一,也支持了tabbar和导航栏设置。\
但不再支持uni-app的app-plus专用配置以及tabbar的midbutton。

如pages.json中配置的导航栏和tabbar功能无法满足你的需求,可以不在pages.json中配置,自己用view做导航栏和tabbar。\
hello uni-app x有相关示例,参考:
- 自定义导航栏:[插件地址](https://ext.dcloud.net.cn/plugin?id=14618)
W
wanganxp 已提交
19
- 自定义tabbar:[源码参考](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/alpha/pages/template/custom-tab-bar/custom-tab-bar.uvue);注意事项[见下](#pages-tabbar)
D
DCloud_LXH 已提交
20
插件市场也有其他封装好的插件,请自行搜索。
D
DCloud_LXH 已提交
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

## 配置项列表

<!-- PAGESJSON.pages.description -->

<!-- PAGESJSON.pages.table -->

<!-- PAGESJSON.pages.compatibility -->

### globalStyle 配置项列表 @pages-globalstyle

globalStyle节点里是所有页面都生效的全局样式配置。它的配置与页面级style基本相同,但优先级低于页面级style配置。

<!-- PAGESJSON.pages_globalStyle.description -->

<!-- PAGESJSON.pages_globalStyle.table -->

<!-- PAGESJSON.pages_globalStyle.compatibility -->

40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
#### h5 配置项列表 @globalstyle-h5

<!-- PAGESJSON.globalStyle_h5.description -->

<!-- PAGESJSON.globalStyle_h5.table -->

<!-- PAGESJSON.globalStyle_h5.compatibility -->

##### titleNView 配置项列表 @h5-titlenview

<!-- PAGESJSON.h5_titleNView.description -->

<!-- PAGESJSON.h5_titleNView.table -->

<!-- PAGESJSON.h5_titleNView.compatibility -->

##### pullToRefresh 配置项列表 @h5-pulltorefresh

<!-- PAGESJSON.h5_pullToRefresh.description -->

<!-- PAGESJSON.h5_pullToRefresh.table -->

<!-- PAGESJSON.h5_pullToRefresh.compatibility -->


###### contentdown 配置项列表 @pulltorefresh-contentdown

<!-- PAGESJSON.pullToRefresh_contentdown.description -->

<!-- PAGESJSON.pullToRefresh_contentdown.table -->

<!-- PAGESJSON.pullToRefresh_contentdown.compatibility -->


###### contentover 配置项列表 @pulltorefresh-contentover

<!-- PAGESJSON.pullToRefresh_contentover.description -->

<!-- PAGESJSON.pullToRefresh_contentover.table -->

<!-- PAGESJSON.pullToRefresh_contentover.compatibility -->

###### contentrefresh 配置项列表 @pulltorefresh-contentrefresh

<!-- PAGESJSON.pullToRefresh_contentrefresh.description -->

<!-- PAGESJSON.pullToRefresh_contentrefresh.table -->

<!-- PAGESJSON.pullToRefresh_contentrefresh.compatibility -->

D
DCloud_LXH 已提交
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
### pages 配置项列表 @pagesoptionspage

pages节点里注册页面,数据格式是数组,数组每个项都是一个对象,通过path属性指定页面路径,通过style指定该页面的样式配置。

<!-- PAGESJSON.PagesOptionsPage.description -->

<!-- PAGESJSON.PagesOptionsPage.table -->

<!-- PAGESJSON.PagesOptionsPage.compatibility -->

**Tips:**

- **pages节点的第一项为应用入口页(即首页)**
- **应用中新增/减少页面**,都需要对 pages 数组进行修改
- 文件名**不需要写后缀**,框架会自动寻找路径下的页面资源
fxy060608's avatar
fxy060608 已提交
105
- 页面路径必须与真实的文件路径大小写保持一致,即**大小写敏感**
D
DCloud_LXH 已提交
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152

**示例**

假使开发目录为:

<pre v-pre="" data-lang="">
	<code class="lang-" style="padding:0">
┌─pages
│  ├─index
│  │  └─index.uvue
│  └─login
│     └─login.uvue
├─static
├─main.uts
├─App.uvue
├─manifest.json
└─pages.json
	</code>
</pre>

则需要在 pages.json 中填写

```javascript
{
    "pages": [
        {
            "path": "pages/index/index",
            "style": { ... }
        }, {
            "path": "pages/login/login",
            "style": { ... }
        }
    ]
}
```


#### style 配置项列表 @pagesoptionspage-style

用于设置每个页面的状态栏、导航条的颜色、文字等信息。

页面中配置项会覆盖 [globalStyle](#pages-globalstyle) 中相同的配置项

<!-- PAGESJSON.PagesOptionsPage_style.description -->

<!-- PAGESJSON.PagesOptionsPage_style.table -->

DCloud-yyl's avatar
DCloud-yyl 已提交
153
<!-- PAGESJSON.PagesOptionsPage_style.compatibility -->
D
DCloud_LXH 已提交
154

DCloud-yyl's avatar
DCloud-yyl 已提交
155
<a id="pagesoptionspage-tips"></a>
shutao-dc's avatar
shutao-dc 已提交
156

D
DCloud_LXH 已提交
157
**Tips**
DCloud_Heavensoft's avatar
DCloud_Heavensoft 已提交
158 159 160
- 横屏
	* Web:横竖屏由手机浏览器控制,无法在pages.json中指定。uni-app x的页面和基础组件都支持自适应宽屏界面
	* Android:默认是竖屏。从4.13起支持配置pageOrientation实现横屏或自动旋转适应
DCloud-yyl's avatar
DCloud-yyl 已提交
161
	* iOS:在iPhone手机上默认竖屏,在ipad上默认自适应,ipad旋转为横屏后uni-app x应用也会横屏。可以在项目的 Info.plist 中配置应用可支持的横竖屏列表来修改默认横竖屏状态,详见[应用可支持横竖屏列表配置](https://uniapp.dcloud.net.cn/tutorial/app-nativeresource-ios.html#orientation),配置后应用将限定在可支持的横竖屏列表中配置的值(如配置应用可支持的列表仅为横屏,则应用只能显示为横屏)。uni-app x的页面和基础组件都支持自适应宽屏界面
D
DCloud_LXH 已提交
162 163
- 状态栏
	* 手机顶部状态栏的背景色、前景色(white/black)与navigationBarBackgroundColor和navigationBarTextStyle相同
164
	* 小程序平台,pages.json中各个颜色的设置仅支持普通的16进制数值。App和Web支持设为transparent,即透明。
W
wanganxp 已提交
165
	* 如需动态设置状态栏颜色,使用api [uni.setNavigationBarColor](../api/set-navigation-bar-color.md)
166 167
	* 当navigationStyle设为custom时,原生导航栏不显示。此时需要注意系统状态栏背景色恒为透明。
	* 注意不同手机的状态栏高度并不相同,如需获取本机的状态栏高度,使用api [uni.getWindowInfo](../api/get-window-info.md) 或 css变量 [--status-bar-height](../css/common/variable.md)
D
DCloud_LXH 已提交
168 169
- 下拉刷新
	* pages.json中下拉刷新是页面级配置,方便使用但灵活度有限。
W
wanganxp 已提交
170
	* 如需自定义下拉刷新,请使用[scroll-view](../component/scroll-view.md)[list-view](../component/list-view.md)的下拉刷新。
DCloud-yyl's avatar
DCloud-yyl 已提交
171 172 173
- Android系统导航栏 (通常指手机底部按钮或手势提示线区域)
	* 系统导航栏的背景颜色与backgroundColorContent颜色一致,导航栏的前景色会根据backgroundColorContent颜色自动适配 (4.21版本开始支持)
	* tabBar页面的系统导航栏背景颜色取值策略[参考](#tabbar-tips) 
174

D
DCloud_LXH 已提交
175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
**style示例**
```javascript
{
  "pages": [{
      "path": "pages/index/index",
      "style": {
        "navigationBarTitleText": "首页",//设置页面标题文字
        "enablePullDownRefresh":true//开启下拉刷新
      }
    },
    ...
  ]
}
```

190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206
##### navigationBarShadow 配置项列表 @style-navigationbarshadow

<!-- PAGESJSON.style_navigationBarShadow.description -->

<!-- PAGESJSON.style_navigationBarShadow.table -->

<!-- PAGESJSON.style_navigationBarShadow.compatibility -->

#### 页面背景色@background
- 页面容器背景色:可在页面 json 文件中通过 backgroundColorContent 属性配置,支持 #RRGGBB 写法,默认为白色
- 窗口背景色:可在页面 json 文件中通过 backgroundColor 属性配置,支持 #RRGGBB 写法,默认为白色。被页面容器背景色覆盖,仅在页面设置下拉刷新时才可能看到此颜色

##### h5 配置项列表 @style-h5

<!-- PAGESJSON.style_h5.description -->

<!-- PAGESJSON.style_h5.table -->
DCloud-yyl's avatar
DCloud-yyl 已提交
207

208
<!-- PAGESJSON.style_h5.compatibility -->
D
DCloud_LXH 已提交
209 210 211

### tabBar 配置项列表 @pages-tabbar

W
wanganxp 已提交
212 213 214 215 216 217
tabbar节点用于配置应用的tabbar,仅支持配置一个。如需在更多页面配置tabbar,见下面的自定义tabbar。

- 自定义tabbar:[源码参考](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/alpha/pages/template/custom-tab-bar/custom-tab-bar.uvue)
自定义tabbar的逻辑较多,这里写出pages.json的tabbar的逻辑,供自定义tabbar参考:
1. tabbar页面刚开始只载入第一个子tab组件,其他tab组件是在点击相应的选项卡时v-if设为true来创建
2. 一个子tab一旦被v-if加载后,不要再v-if设为false去掉,也不通过v-show控制,而是通过css的visibility来控制显示和隐藏。这样可以保留每个子tab的状态,比如滚动位置、输入框内容。切换tab也会更快速。
D
DCloud_LXH 已提交
218 219 220 221 222 223

<!-- PAGESJSON.pages_tabBar.description -->

<!-- PAGESJSON.pages_tabBar.table -->

<!-- PAGESJSON.pages_tabBar.compatibility -->
DCloud-yyl's avatar
DCloud-yyl 已提交
224 225

<a id="tabbar-tips"></a>
shutao-dc's avatar
shutao-dc 已提交
226

DCloud-yyl's avatar
DCloud-yyl 已提交
227 228
**Tips**  
- backgroundColor  
shutao-dc's avatar
shutao-dc 已提交
229
	- app-android平台:系统导航(System navigation)栏的背景色会与 tabBar 背景色保持一致。如果应用没有配置 tabBar 页面导航栏背景颜色取值策略[参考](#pagesoptionspage-tips) 
DCloud-yyl's avatar
DCloud-yyl 已提交
230 231 232
	- app-ios平台:tabBar 会自动适配安全区域,底部安全区域背景色会与 tabBar 背景色保持一致。如果应用没有配置 tabBar,则不会自动适配底部安全区域,开发者需根据应用实际情况自行处理。  


D
DCloud_LXH 已提交
233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261
#### PagesOptionsTabbarList 配置项列表 @pagesoptionstabbarlist

<!-- PAGESJSON.PagesOptionsTabbarList.description -->

<!-- PAGESJSON.PagesOptionsTabbarList.table -->

<!-- PAGESJSON.PagesOptionsTabbarList.compatibility -->

**tabbar示例**
```json
"tabBar": {
	"color": "#7A7E83",
	"selectedColor": "#3cc51f",
	"borderStyle": "black",
	"backgroundColor": "#ffffff",
	"list": [{
		"pagePath": "pages/component/index",
		"iconPath": "static/image/icon_component.png",
		"selectedIconPath": "static/image/icon_component_HL.png",
		"text": "组件"
	}, {
		"pagePath": "pages/API/index",
		"iconPath": "static/image/icon_API.png",
		"selectedIconPath": "static/image/icon_API_HL.png",
		"text": "接口"
	}]
}
```

262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277
##### iconfont 配置项列表 @pagesoptionstabbarlist-iconfont

<!-- PAGESJSON.PagesOptionsTabbarList_iconfont.description -->

<!-- PAGESJSON.PagesOptionsTabbarList_iconfont.table -->

<!-- PAGESJSON.PagesOptionsTabbarList_iconfont.compatibility -->

#### midButton 配置项列表 @tabbar-midbutton

<!-- PAGESJSON.tabBar_midButton.description -->

<!-- PAGESJSON.tabBar_midButton.table -->

<!-- PAGESJSON.tabBar_midButton.compatibility -->

W
wanganxp 已提交
278 279 280 281 282 283 284 285 286 287 288 289 290 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 321 322 323 324 325
### topWindow 配置项列表 @pages-topwindow

<!-- PAGESJSON.pages_topWindow.description -->

<!-- PAGESJSON.pages_topWindow.table -->

<!-- PAGESJSON.pages_topWindow.compatibility -->

#### matchMedia 配置项列表 @topwindow-matchmedia

<!-- PAGESJSON.topWindow_matchMedia.description -->

<!-- PAGESJSON.topWindow_matchMedia.table -->

<!-- PAGESJSON.topWindow_matchMedia.compatibility -->

### leftWindow 配置项列表 @pages-leftwindow

<!-- PAGESJSON.pages_leftWindow.description -->

<!-- PAGESJSON.pages_leftWindow.table -->

<!-- PAGESJSON.pages_leftWindow.compatibility -->

#### matchMedia 配置项列表 @leftwindow-matchmedia

<!-- PAGESJSON.leftWindow_matchMedia.description -->

<!-- PAGESJSON.leftWindow_matchMedia.table -->

<!-- PAGESJSON.leftWindow_matchMedia.compatibility -->

### rightWindow 配置项列表 @pages-rightwindow

<!-- PAGESJSON.pages_rightWindow.description -->

<!-- PAGESJSON.pages_rightWindow.table -->

<!-- PAGESJSON.pages_rightWindow.compatibility -->

#### matchMedia 配置项列表 @rightwindow-matchmedia

<!-- PAGESJSON.rightWindow_matchMedia.description -->

<!-- PAGESJSON.rightWindow_matchMedia.table -->

<!-- PAGESJSON.rightWindow_matchMedia.compatibility -->

D
DCloud_LXH 已提交
326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358
### condition 配置项列表 @pages-condition

启动模式配置,仅开发期间生效,用于模拟直达页面的场景。教程[详见](https://uniapp.dcloud.net.cn/collocation/pages.html#condition)

<!-- PAGESJSON.pages_condition.description -->

<!-- PAGESJSON.pages_condition.table -->

<!-- PAGESJSON.pages_condition.compatibility -->

#### PagesConditionItem 配置项列表 @pagesconditionitem

<!-- PAGESJSON.PagesConditionItem.description -->

<!-- PAGESJSON.PagesConditionItem.table -->

<!-- PAGESJSON.PagesConditionItem.compatibility -->


### easycom 配置项列表 @pages-easycom

easycom是uni-app提供的一种简化组件使用的方式。一般情况下组件放置在符合规范的位置时即可自动引用。

但有时组件的路径或文件名无法满足easycom默认规范要求,可以在pages.json里进行规则的自定义。

自定义easycom的详细教程[详见](https://uniapp.dcloud.net.cn/collocation/pages.html#easycom)

<!-- PAGESJSON.pages_easycom.description -->

<!-- PAGESJSON.pages_easycom.table -->

<!-- PAGESJSON.pages_easycom.compatibility -->

雪洛's avatar
雪洛 已提交
359 360 361 362 363 364 365 366 367
### uniIdRouter 配置项列表 @pages-uniidrouter

<!-- PAGESJSON.pages_uniIdRouter.description -->

<!-- PAGESJSON.pages_uniIdRouter.table -->

<!-- PAGESJSON.pages_uniIdRouter.compatibility -->

<!-- PAGESJSON.tutorial -->