--- title: Page 页面 description: type: 0 group: ⚙ 组件 menuName: Page 页面 icon: order: 23 --- Page 组件是 amis 页面 JSON 配置中顶级容器组件,是整个页面配置的入口组件。 ## 基本用法 我们这里在内容区中简单渲染一段文字。 ```schema { "type": "page", "title": "标题", "body": "Hello World!" } ``` ## 渲染组件 内容区同样可以渲染各种组件,这里我们渲染一个表单。 ```schema: scope="body" { "type": "form", "api": "/api/mock2/form/saveForm", "body": [ { "type": "input-text", "name": "name", "label": "姓名:" } ] } ``` ## 在其他区域渲染组件 Page 默认将页面分为几个区域,分别是**内容区(`body`)**、**侧边栏(`aside`)** 和 **工具栏(`toolbar`)部分**,你可以在这些区域配置你想要的组件和内容。 ```schema { "type": "page", "aside": [ { "type": "tpl", "tpl": "这是侧边栏部分" } ], "toolbar": [ { "type": "tpl", "tpl": "这是工具栏部分" } ], "body": [ { "type": "tpl", "tpl": "这是内容区" } ] } ``` > 不同区域都是`Page`的子节点,也就是说都可以使用`Page`下数据作用域。 ## 页面初始化请求 通过配置`initApi`,可以在初始化页面时请求所配置的接口。 ```schema { "type": "page", "initApi": "/api/mock2/page/initData", "body": [ { "type": "tpl", "tpl": "当前时间是:${date}" } ] } ``` 具体 API 规范查看 [API 文档](../../docs/types/api)。 ## 轮询初始化接口 想要在页面渲染后,轮询请求初始化接口,步骤如下: 1. 配置 initApi; 2. 配置 interval:单位为毫秒,最小 1000。 ```schema { "type": "page", "initApi": "/api/mock2/page/initData", "interval": 3000, "body": [ { "type": "tpl", "tpl": "当前时间是:${date}" } ] } ``` 如果希望在满足某个条件的情况下停止轮询,配置`stopAutoRefreshWhen`表达式。 ```schema { "type": "page", "initApi": "/api/mock2/page/initData", "stopAutoRefreshWhen": "this.time % 5", // 当时间戳能被5整除时,停止轮询 "interval": 3000, "body": [ { "type": "tpl", "tpl": "当前时间戳是:${date}" } ] } ``` ## CSS 变量 通过设置 CSS 变量几乎可以修改 amis 中任意组件的展现,具体细节请参考[样式](../../../style)。 ```schema { "type": "page", "cssVars": { "--text-color": "#108cee" }, "body": { "type": "form", "body": [ { "type": "input-text", "label": "文本框", "name": "text" } ] } } ``` ## 自定义 CSS > 1.3.0 及以上版本 虽然 amis 提供了很多内置样式,但想要更精细控制样式,最好的方式依然是编写自定义 CSS,在之前的版本中需要外部页面配合,从 1.3.0 开始 amis 可以直接在配置中支持自定义 CSS ```schema { "type": "page", "css": { ".myClass": { "color": "blue" } }, "body": { "type": "tpl", "tpl": "文本", "className": "myClass" } } ``` ## aside 可调整宽度 通过配置 `asideResizor`,可以让侧边栏支持动态调整宽度,同时可以通过 `asideMinWidth`、`asideMaxWidth` 设置 aside 最大最小宽度。 ```schema { "type": "page", "asideResizor": true, "asideMinWidth": 150, "asideMaxWidth": 400, "aside": [ { "type": "tpl", "tpl": "这是侧边栏部分" } ], "body": [ { "type": "tpl", "tpl": "这是内容区" } ] } ``` 上面的配置会自动创建一个 `