页面路由

接口声明

无需声明

导入模块

import router from '@system.router'const router = require('@system.router')

接口定义

router.push(OBJECT)

跳转到应用内的某个页面

参数:

参数 类型 必填 说明
uri String 要跳转到的uri,可以是下面的格式:
  1. 包含schema的完整uri;目前支持的schema有tel,sms和mailto,例如tel:10086。
  2. 以‘/’开头的应用内页面的路径;例:/about。
  3. 以非‘/’开头的应用内页面的名称;例:About。
  4. 特殊的,如果uri的值是"/",则跳转到path为"/"的页,没有则跳转到首页
支持包含schema的完整uri。对于带有schema的uri,处理流程如下:
  1. 查找app下所有page的filter设置来选择合适的page处理请求(参见[manifest文件](../../framework/manifest.md))
  2. 如果没有合适的page能够处理请求,会使用默认策略来处理请求。目前默认策略支持对http、https、internal这几种schema的处理
  3. 如果默认策略也不能处理请求,会尝试使用系统中的应用来处理请求
  4. 如果没有系统应用可以处理请求,会抛弃请求
默认策略的处理逻辑:
  1. 如果schema是http/https,会用内置的web页面打开网页
  2. 如果schema是internal(参见[文件组织](../../framework/file-organization.md)),会根据uri的文件扩展名来确定文件类型,再调用系统中的应用打开文件
params Object 跳转时需要传递的数据,参数可以在页面中通过this.param1的方式使用,param1为json中的参数名,param1对应的值会统一转换为String类型

示例:

// launch phone app
router.push({
  uri: 'tel:10086'
})
// open page by path
router.push({
  uri: '/about',
  params: {
    testId: '1'
  }
})
// open page by name
router.push({
  uri: 'About',
  params: {
    testId: '1'
  }
})

新增下面的用法:

// open web page
router.push({
  uri: 'http://www.example.com'
})
// install apk
router.push({
  uri: 'internal://cache/example.apk'
})

router.replace(OBJECT)

跳转到应用内的某个页面,当前页面无法返回

参数:

参数 类型 必填 说明
uri String 要跳转到的uri,可以是下面的格式:
  1. 以"/"开头的应用内页面的路径;例:/about。
  2. 以非"/"开头的应用内页面的名称;例:About。
  3. 特殊的,如果uri的值是"/",则跳转到path为"/"的页,没有则跳转到首页
params Object 跳转时需要传递的数据,参数可以在页面中通过this.param1的方式使用,param1为json中的参数名,param1对应的值会统一转换为String类型

示例:

router.replace({
  uri: '/test',
  params: {
    testId: '1'
  }
})

router.back(OBJECT)

返回指定页面

参数:

参数 类型 必填 说明
path '1020+' String 返回目标页面的路径,可以是以下几种取值:
  1. 不传该参数,返回上一页面
  2. 以"/"开头的应用内已打开页面的路径;例:/about。
  3. 特殊的,如果path的值是"/",则跳转到页面名称为"/"的页,没有则跳转到首页
注意点:
  1. path需要是以"/"开头的当前应用已经打开的页面路径,否则均视为无效参数,返回上一页面
  2. 若根据path未匹配到已经打开的页面,返回上一页面
  3. 若根据path参数匹配到多个页面,返回至最后打开的页面

示例:

// A页面, open page by name
router.push({
  uri: 'B'
})
// B页面, open page by name
router.push({
  uri: 'C'
})
// C页面, open page by name
router.push({
  uri: 'D'
})
// D页面, open page by name
router.push({
  uri: 'E'
})
// E页面不传入页面路径,返回至D页面
router.back()
// D页面不传入页面名称,返回至C页面
router.back()
// C页面传入页面路径,返回至A页面
router.back({
  path: '/A'
})

router.clear()

清空所有历史页面记录,仅保留当前页面

参数:

示例:

router.clear()

router.getLength()

获取当前页面栈的页面数量

返回值:

类型 说明
Number 页面数量

示例:

var length = router.getLength()
console.log(`page's length = ${length}`)

router.getState()

获取当前页面状态

返回参数:

参数名 类型 说明
index Number 当前页面在页面栈中的位置
name String 当前页面的名称
path String 当前页面的路径

示例:

var page = router.getState()
console.log(`page index = ${page.index}`)
console.log(`page name = ${page.name}`)
console.log(`page path = ${page.path}`)

条匹配 "" 的结果

    没有搜索到与 "" 相关的内容