navigator.uvue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423
  1. <template>
  2. <!-- #ifdef APP -->
  3. <scroll-view style="flex: 1">
  4. <!-- #endif -->
  5. <view>
  6. <page-head title="navigate"></page-head>
  7. <view style="flex-direction: row;">
  8. <switch @change="onChange"></switch>
  9. <view class="uni-title">是否启用共享元素动画</view>
  10. </view>
  11. <share-element :share-key="shareElementKey">
  12. <image style="width: 250px; height: 176px;" src="/static/shuijiao.jpg" mode="scaleToFill"></image>
  13. </share-element>
  14. <text style="font-size: 13px;" >注意:开启共享元素动画后仅支持slide-in-right和fade-in动画效果</text>
  15. <view class="uni-padding-wrap uni-common-mt uni-common-mb">
  16. <view class="direction-row">
  17. <text class="label">onLoad触发时间戳:</text>
  18. <text>{{ onLoadTime }}</text>
  19. </view>
  20. <view class="direction-row">
  21. <text class="label">onShow触发时间戳:</text>
  22. <text>{{ onShowTime }}</text>
  23. </view>
  24. <view class="direction-row">
  25. <text class="label">onReady触发时间戳:</text>
  26. <text>{{ onReadyTime }}</text>
  27. </view>
  28. <view class="direction-row">
  29. <text class="label">onHide触发时间戳:</text>
  30. <text>{{ onHideTime }}</text>
  31. </view>
  32. <view class="direction-row">
  33. <text class="label">onBackPress触发时间戳:</text>
  34. <text>见控制台</text>
  35. </view>
  36. <view class="direction-row">
  37. <text class="label">onUnload触发时间戳:</text>
  38. <text>见控制台</text>
  39. </view>
  40. <view class="uni-btn-v">
  41. <button @tap="navigateTo" class="uni-btn">
  42. 跳转新页面,并传递数据
  43. </button>
  44. <button @tap="navigateBack" class="uni-btn">返回上一页</button>
  45. <button @tap="redirectTo" class="uni-btn">在当前页面打开</button>
  46. <button @tap="switchTab" class="uni-btn">切换到模板选项卡</button>
  47. <button @tap="reLaunch" class="uni-btn">
  48. 关闭所有页面,打开首页
  49. </button>
  50. <button @tap="navigateToErrorPage" class="uni-btn">
  51. 打开不存在的页面
  52. </button>
  53. <button v-for="(item, _) in animationTypeList" @tap="navigateToAnimationType(item)"
  54. class="uni-btn">navigateTo动画({{item}})</button>
  55. <button class="uni-btn" @click="goOnLoadCallAPI">测试 onLoad 调用 API</button>
  56. </view>
  57. </view>
  58. </view>
  59. <!-- #ifdef APP -->
  60. </scroll-view>
  61. <!-- #endif -->
  62. </template>
  63. <script lang="uts">
  64. import { state, setLifeCycleNum } from '@/store/index.uts'
  65. type AnimationType = "slide-in-right" | "slide-in-left" | "slide-in-top" | "slide-in-bottom" | "pop-in" | "fade-in" | "zoom-out" | "zoom-fade-out" | "none" | "auto"
  66. export default {
  67. data() {
  68. return {
  69. onLoadTime: 0,
  70. onShowTime: 0,
  71. onReadyTime: 0,
  72. onHideTime: 0,
  73. shareElementKey: "",
  74. animationTypeList: [
  75. 'slide-in-right',
  76. 'slide-in-left',
  77. 'slide-in-top',
  78. 'slide-in-bottom',
  79. 'pop-in',
  80. 'fade-in',
  81. 'zoom-out',
  82. 'zoom-fade-out',
  83. 'none'
  84. ]
  85. }
  86. },
  87. onLoad() {
  88. this.onLoadTime = Date.now()
  89. console.log('onLoad', this.onLoadTime)
  90. },
  91. onShow() {
  92. this.onShowTime = Date.now()
  93. console.log('onShow', this.onShowTime)
  94. },
  95. onReady() {
  96. this.onReadyTime = Date.now()
  97. console.log('onReady', this.onReadyTime)
  98. },
  99. onHide() {
  100. this.onHideTime = Date.now()
  101. console.log('onHide', this.onHideTime)
  102. },
  103. onBackPress(options : OnBackPressOptions) : boolean | null {
  104. console.log('onBackPress', Date.now())
  105. console.log('onBackPress from', options.from)
  106. return null
  107. },
  108. onUnload() {
  109. console.log('onUnload', Date.now())
  110. },
  111. methods: {
  112. reLaunch() {
  113. uni.reLaunch({
  114. url: '/pages/tabBar/component',
  115. success(result) {
  116. console.log('reLaunch success', result.errMsg)
  117. // 自动化测试
  118. setLifeCycleNum(state.lifeCycleNum + 1)
  119. },
  120. fail(error) {
  121. console.log('reLaunch fail', error.errMsg)
  122. // 自动化测试
  123. setLifeCycleNum(state.lifeCycleNum - 1)
  124. },
  125. complete(result) {
  126. console.log('reLaunch complete', result.errMsg)
  127. // 自动化测试
  128. setLifeCycleNum(state.lifeCycleNum + 1)
  129. },
  130. })
  131. },
  132. navigateTo() {
  133. uni.navigateTo({
  134. url: '/pages/API/navigator/new-page/new-page-1?data=Hello',
  135. success(result) {
  136. console.log('navigateTo success', result.errMsg)
  137. // 自动化测试
  138. setLifeCycleNum(state.lifeCycleNum + 1)
  139. },
  140. fail(error) {
  141. console.log('navigateTo fail', error.errMsg)
  142. // 自动化测试
  143. setLifeCycleNum(state.lifeCycleNum - 1)
  144. },
  145. complete(result) {
  146. console.log('navigateTo complete', result.errMsg)
  147. // 自动化测试
  148. setLifeCycleNum(state.lifeCycleNum + 1)
  149. },
  150. })
  151. },
  152. navigateToAnimationType(animationType : AnimationType) {
  153. uni.navigateTo({
  154. url: '/pages/API/navigator/new-page/new-page-1?data=Hello',
  155. animationType: animationType,
  156. success(result) {
  157. console.log('navigateTo success', result.errMsg)
  158. // 自动化测试
  159. setLifeCycleNum(state.lifeCycleNum + 1)
  160. },
  161. fail(error) {
  162. console.log('navigateTo fail', error.errMsg)
  163. // 自动化测试
  164. setLifeCycleNum(state.lifeCycleNum - 1)
  165. },
  166. complete(result) {
  167. console.log('navigateTo complete', result.errMsg)
  168. // 自动化测试
  169. setLifeCycleNum(state.lifeCycleNum + 1)
  170. },
  171. })
  172. },
  173. navigateToErrorPage() {
  174. uni.navigateTo({
  175. url: '/pages/error-page/error-page',
  176. success(result) {
  177. console.log('navigateTo success', result.errMsg)
  178. // 自动化测试
  179. setLifeCycleNum(state.lifeCycleNum - 1)
  180. },
  181. fail(error) {
  182. console.log('navigateTo fail', error.errMsg)
  183. uni.showToast({
  184. title: error.errMsg,
  185. icon: 'none',
  186. })
  187. // 自动化测试
  188. setLifeCycleNum(state.lifeCycleNum + 1)
  189. },
  190. complete(result) {
  191. console.log('navigateTo complete', result.errMsg)
  192. // 自动化测试
  193. setLifeCycleNum(state.lifeCycleNum + 1)
  194. },
  195. })
  196. },
  197. navigateToDebounce() {
  198. uni.navigateTo({
  199. url: '/pages/API/navigator/new-page/new-page-1?data=debounce',
  200. success(result) {
  201. console.log('navigateTo success', result.errMsg)
  202. // 自动化测试
  203. setLifeCycleNum(state.lifeCycleNum + 1)
  204. },
  205. fail(error) {
  206. console.log('navigateTo fail', error.errMsg)
  207. // 自动化测试
  208. setLifeCycleNum(state.lifeCycleNum - 1)
  209. },
  210. complete(result) {
  211. console.log('navigateTo complete', result.errMsg)
  212. // 自动化测试
  213. setLifeCycleNum(state.lifeCycleNum + 1)
  214. },
  215. })
  216. uni.navigateTo({
  217. url: '/pages/API/navigator/new-page/new-page-1?data=debounce',
  218. success(result) {
  219. console.log('navigateTo success', result.errMsg)
  220. // 自动化测试
  221. setLifeCycleNum(state.lifeCycleNum - 1)
  222. },
  223. fail(error) {
  224. console.log('navigateTo fail', error.errMsg)
  225. // 自动化测试
  226. setLifeCycleNum(state.lifeCycleNum + 1)
  227. },
  228. complete(result) {
  229. console.log('navigateTo complete', result.errMsg)
  230. // 自动化测试
  231. setLifeCycleNum(state.lifeCycleNum + 1)
  232. },
  233. })
  234. },
  235. // 自动化测试
  236. navigateToRelativePath1() {
  237. uni.navigateTo({
  238. url: 'new-page/new-page-1?data=new-page/new-page-1',
  239. success() {
  240. setLifeCycleNum(state.lifeCycleNum + 1)
  241. },
  242. fail() {
  243. setLifeCycleNum(state.lifeCycleNum - 1)
  244. },
  245. complete() {
  246. setLifeCycleNum(state.lifeCycleNum + 1)
  247. },
  248. })
  249. },
  250. // 自动化测试
  251. navigateToRelativePath2() {
  252. uni.navigateTo({
  253. url: './new-page/new-page-1?data=./new-page/new-page-1',
  254. success() {
  255. setLifeCycleNum(state.lifeCycleNum + 1)
  256. },
  257. fail() {
  258. setLifeCycleNum(state.lifeCycleNum - 1)
  259. },
  260. complete() {
  261. setLifeCycleNum(state.lifeCycleNum + 1)
  262. },
  263. })
  264. },
  265. // 自动化测试
  266. navigateToRelativePath3() {
  267. uni.navigateTo({
  268. url: '../navigator/new-page/new-page-1?data=../navigator/new-page/new-page-1',
  269. success() {
  270. setLifeCycleNum(state.lifeCycleNum + 1)
  271. },
  272. fail() {
  273. setLifeCycleNum(state.lifeCycleNum - 1)
  274. },
  275. complete() {
  276. setLifeCycleNum(state.lifeCycleNum + 1)
  277. },
  278. })
  279. },
  280. navigateBack() {
  281. uni.navigateBack({
  282. success(result) {
  283. console.log('navigateBack success', result.errMsg)
  284. // 自动化测试
  285. setLifeCycleNum(state.lifeCycleNum + 1)
  286. },
  287. fail(error) {
  288. console.log('navigateBack fail', error.errMsg)
  289. // 自动化测试
  290. setLifeCycleNum(state.lifeCycleNum - 1)
  291. },
  292. complete(result) {
  293. console.log('navigateBack complete', result.errMsg)
  294. // 自动化测试
  295. setLifeCycleNum(state.lifeCycleNum + 1)
  296. },
  297. })
  298. },
  299. navigateBackWithDelta1() {
  300. uni.navigateTo({
  301. url: '/pages/API/navigator/new-page/new-page-1',
  302. success() {
  303. uni.navigateBack({
  304. delta: 1,
  305. success(result) {
  306. console.log('navigateBack success', result.errMsg)
  307. // 自动化测试
  308. setLifeCycleNum(state.lifeCycleNum + 1)
  309. },
  310. fail(error) {
  311. console.log('navigateBack fail', error.errMsg)
  312. // 自动化测试
  313. setLifeCycleNum(state.lifeCycleNum - 1)
  314. },
  315. complete(result) {
  316. console.log('navigateBack complete', result.errMsg)
  317. // 自动化测试
  318. setLifeCycleNum(state.lifeCycleNum + 1)
  319. },
  320. })
  321. },
  322. })
  323. },
  324. navigateBackWithDelta100() {
  325. uni.navigateTo({
  326. url: '/pages/API/navigator/new-page/new-page-1',
  327. success() {
  328. uni.navigateBack({
  329. delta: 100,
  330. success(result) {
  331. console.log('navigateBack success', result.errMsg)
  332. // 自动化测试
  333. setLifeCycleNum(state.lifeCycleNum + 1)
  334. },
  335. fail(error) {
  336. console.log('navigateBack fail', error.errMsg)
  337. // 自动化测试
  338. setLifeCycleNum(state.lifeCycleNum - 1)
  339. },
  340. complete(result) {
  341. console.log('navigateBack complete', result.errMsg)
  342. // 自动化测试
  343. setLifeCycleNum(state.lifeCycleNum + 1)
  344. },
  345. })
  346. },
  347. })
  348. },
  349. redirectTo() {
  350. uni.redirectTo({
  351. url: '/pages/API/navigator/new-page/new-page-1?data=Hello',
  352. success(result) {
  353. console.log('redirectTo success', result.errMsg)
  354. // 自动化测试
  355. setLifeCycleNum(state.lifeCycleNum + 1)
  356. },
  357. fail(error) {
  358. console.log('redirectTo fail', error.errMsg)
  359. // 自动化测试
  360. setLifeCycleNum(state.lifeCycleNum - 1)
  361. },
  362. complete(result) {
  363. console.log('redirectTo complete', result.errMsg)
  364. // 自动化测试
  365. setLifeCycleNum(state.lifeCycleNum + 1)
  366. },
  367. })
  368. },
  369. switchTab() {
  370. uni.switchTab({
  371. url: '/pages/tabBar/template',
  372. success(result) {
  373. console.log('switchTab success', result.errMsg)
  374. // 自动化测试
  375. setLifeCycleNum(state.lifeCycleNum + 1)
  376. },
  377. fail(error) {
  378. console.log('switchTab fail', error.errMsg)
  379. // 自动化测试
  380. setLifeCycleNum(state.lifeCycleNum - 1)
  381. },
  382. complete(result) {
  383. console.log('switchTab complete', result.errMsg)
  384. // 自动化测试
  385. setLifeCycleNum(state.lifeCycleNum + 1)
  386. },
  387. })
  388. },
  389. // 自动化测试
  390. getLifeCycleNum() : number {
  391. return state.lifeCycleNum
  392. },
  393. // 自动化测试
  394. setLifeCycleNum(num : number) {
  395. setLifeCycleNum(num)
  396. },
  397. onChange(event: UniSwitchChangeEvent) {
  398. if(event.detail.value) {
  399. this.shareElementKey = "test-share-element-key"
  400. } else {
  401. this.shareElementKey = ""
  402. }
  403. },
  404. goOnLoadCallAPI(){
  405. uni.navigateTo({
  406. url: '/pages/API/navigator/new-page/onLoad-call-api'
  407. })
  408. }
  409. },
  410. }
  411. </script>
  412. <style>
  413. .direction-row {
  414. flex-direction: row;
  415. }
  416. .label {
  417. width: 190px;
  418. }
  419. </style>