当前位置:   article > 正文

taro之--路由与tabbar_taro中多 tab 应用路由配置

taro中多 tab 应用路由配置

路由与 Tabbar

在 src/components/thread 组件中,我们通过

Taro.navigateTo({ url: '/pages/thread_detail/thread_detail' })

跳转到帖子详情,但这个页面仍未实现,现在我们去入口文件配置一个新的页面:

src/app.config.js

  1. export default {
  2. pages: ['pages/index/index', 'pages/thread_detail/thread_detail'],
  3. }

然后在路径 src/pages/thread_detail/thread_detail 实现帖子详情页面,路由就可以跳转,我们整个流程就跑起来了:

  • React

  • Vue

src/pages/thread_detail/thread_detail.vue

  1. <template>
  2. <view class="detail">
  3. <thread
  4. :node="topic.node"
  5. :title="topic.title"
  6. :last_modified="topic.last_modified"
  7. :replies="topic.replies"
  8. :tid="topic.id"
  9. :member="topic.member"
  10. :not_navi="true"
  11. />
  12. <loading v-if="loading" />
  13. <view v-else>
  14. <view class="main-content">
  15. <rich-text :nodes="content | html" />
  16. </view>
  17. <view class="replies">
  18. <view v-for="(reply, index) in replies" class="reply" :key="reply.id">
  19. <image :src="reply.member.avatar_large" class="avatar" />
  20. <view class="main">
  21. <view class="author"> {{reply.member.username}} </view>
  22. <view class="time"> {{reply.last_modified | time}} </view>
  23. <rich-text :nodes="reply.content_rendered | html" class="content" />
  24. <view class="floor"> {{index + 1}} 楼 </view>
  25. </view>
  26. </view>
  27. </view>
  28. </view>
  29. </view>
  30. </template>
  31. <script>
  32. import Vue from 'vue'
  33. import Taro from '@tarojs/taro'
  34. import api from '../../utils/api'
  35. import { timeagoInst, GlobalState, IThreadProps, prettyHTML } from '../../utils'
  36. import Thread from '../../components/thread.vue'
  37. import Loading from '../../components/loading.vue'
  38. import './index.css'
  39. export default {
  40. components: {
  41. loading: Loading,
  42. thread: Thread,
  43. },
  44. data() {
  45. return {
  46. topic: GlobalState.thread,
  47. loading: true,
  48. replies: [],
  49. content: '',
  50. }
  51. },
  52. async created() {
  53. try {
  54. const id = GlobalState.thread.tid
  55. const [
  56. { data },
  57. {
  58. data: [{ content_rendered }],
  59. },
  60. ] = await Promise.all([
  61. Taro.request({
  62. url: api.getReplies({
  63. topic_id: id,
  64. }),
  65. }),
  66. Taro.request({
  67. url: api.getTopics({
  68. id,
  69. }),
  70. }),
  71. ])
  72. this.loading = false
  73. this.replies = data
  74. this.content = content_rendered
  75. } catch (error) {
  76. Taro.showToast({
  77. title: '载入远程数据错误',
  78. })
  79. }
  80. },
  81. filters: {
  82. time(val) {
  83. return timeagoInst.format(val * 1000)
  84. },
  85. html(val) {
  86. return prettyHTML(val)
  87. },
  88. },
  89. }
  90. </script>

到目前为止,我们已经实现了这个应用的所有逻辑,除去「节点列表」页面(在进阶指南我们会讨论这个页面组件)之外,剩下的页面都可以通过我们已经讲解过的组件或页面快速抽象完成。按照我们的计划,这个应用会有五个页面,分别是:

  1. 首页,展示最新帖子(已完成)

  1. 节点列表

  1. 热门帖子(可通过组件复用)

  1. 节点帖子 (可通过组件复用)

  1. 帖子详情 (已完成)

其中前三个页面我们可以把它们规划在 tabBar 里,tabBar 是 Taro 内置的导航栏,可以在 app.config.js 配置,配置完成之后处于的 tabBar 位置的页面会显示一个导航栏。最终我们的 app.config.js 会是这样:

app.config.js

  1. xport default {
  2. pages: [
  3. 'pages/index/index',
  4. 'pages/nodes/nodes',
  5. 'pages/hot/hot',
  6. 'pages/node_detail/node_detail',
  7. 'pages/thread_detail/thread_detail',
  8. ],
  9. tabBar: {
  10. list: [
  11. {
  12. iconPath: 'resource/latest.png',
  13. selectedIconPath: 'resource/lastest_on.png',
  14. pagePath: 'pages/index/index',
  15. text: '最新',
  16. },
  17. {
  18. iconPath: 'resource/hotest.png',
  19. selectedIconPath: 'resource/hotest_on.png',
  20. pagePath: 'pages/hot/hot',
  21. text: '热门',
  22. },
  23. {
  24. iconPath: 'resource/node.png',
  25. selectedIconPath: 'resource/node_on.png',
  26. pagePath: 'pages/nodes/nodes',
  27. text: '节点',
  28. },
  29. ],
  30. color: '#000',
  31. selectedColor: '#56abe4',
  32. backgroundColor: '#fff',
  33. borderStyle: 'white',
  34. },
  35. window: {
  36. backgroundTextStyle: 'light',
  37. navigationBarBackgroundColor: '#fff',
  38. navigationBarTitleText: 'V2EX',
  39. navigationBarTextStyle: 'black',
  40. },
  41. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/751256
推荐阅读
  

闽ICP备14008679号