• VUE3-博客全栈 08-前端


    本节:博客首页的编写,模糊查询博客内容和博客标题,分类的切换。

     div:

     script:  1.引入路由,定义变量的模块,inject等  2.实例化路由和要用的模块

     3.获取分类,挂载分类

     

     4.获取分页的方法

    5.点击进入详情博客的方法

    5.1  通过route获取当前的路由信息,把点击的博客id传给后端,获取文章的内容

    (1)引入route (2)实例化route  (3)可以输出route ,然后找打自己要的数据,进行赋值

     6.分类的的下拉框赋值,切换不同的分类,会显示不同分类的数据 

     7.路由的配置

     { path: '/', component: () => import('../views/HomePage.vue') },

    学习两个js的函数:

    (1)map() 方法可以把对象转换成 [key ,value] 的形式,改变新的key的值。

    map() 方法按顺序为数组中的每个元素调用一次定义的函数:numbers.map(Math.sqrt);求个数值的平方函数。

    (2)find( ) 可以进行一次回调函数,返回符合条件的值。

    最后,简陋的博客就写好啦,完结撒花*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。

    整个首页的代码:

    1. <template>
    2. <div class="conrainer">
    3. <div class="nav">
    4. <div @click="homePage">首页</div>
    5. <div>
    6. <n-popselect @update:value="selectCategory" v-model:value="selectedCategory" :options="categoryOptions"
    7. trigger="click">
    8. <div>分类<span>{{categoryName}}</span></div>
    9. </n-popselect>
    10. </div>
    11. <div @click="dashboard">后台</div>
    12. </div>
    13. <n-divider />
    14. <n-space class="search">
    15. <n-input v-model:value="pageInfo.keyword" :style="{ width: '500px' }" placeholder="请输入关键字" />
    16. <n-button type="primary" ghost @click="loadBlogs(0)"> 搜索 </n-button>
    17. </n-space>
    18. <!-- v-for这里的括号写错了 -->
    19. <div v-for="(ii,index) in blogList" style="margin-bottom:15px;cursor:pointer;">
    20. <n-card @click="toDetail(ii)" :title="ii.title">
    21. {{ii.content}}
    22. <template #footer>
    23. <n-space align="center">
    24. <div>
    25. 发布时间:{{ii.create_time}}
    26. </div>
    27. </n-space>
    28. </template>
    29. </n-card>
    30. </div>
    31. <n-space>
    32. <n-pagination @update:page="loadBlogs" v-model:page="pageInfo.page" :page-count="pageInfo.pageCount" />
    33. </n-space>
    34. <n-divider />
    35. <!-- 分割线 -->
    36. <div class="footer">
    37. <div>Power by xxxxxxx</div>
    38. div>
    39. </div>
    40. </div>
    41. </template>
    42. <script setup>
    43. import { ref, reactive, inject, onMounted, computed } from 'vue'
    44. import { useRouter, useRoute } from 'vue-router'; //路由
    45. const router = useRouter()
    46. const axios = inject("axiosTool") //axiosTool 是我provide定义的名字
    47. const selectedCategory = ref(0)
    48. const categoryName = computed(() => {
    49. let selectedOption = categoryOptions.value.find((option) => {
    50. return option.value == selectedCategory.value
    51. })
    52. return selectedOption ? selectedOption.label : ""
    53. })
    54. const selectCategory = (id) => {
    55. pageInfo.categoryId = id;
    56. loadBlogs()
    57. }
    58. // const toPage = async (Number) => {
    59. // pageInfo.page = Number
    60. // loadBlogs();
    61. // }
    62. onMounted(() => {
    63. loadCategorys()
    64. loadBlogs()
    65. })
    66. const categoryOptions = ref([])
    67. // 获取分类
    68. const loadCategorys = async () => {
    69. let res = await axios.get("/categorty/list")
    70. // map()可以把对象,转换成[key,vaule]的数组形式
    71. categoryOptions.value = res.data.rows.map((i) => {
    72. return {
    73. label: i.name,
    74. value: i.id
    75. }
    76. })
    77. }
    78. const pageInfo = reactive({//分页信息
    79. page: 1,
    80. pageSize: 3,
    81. pageCount: 0,
    82. count: 0,
    83. keyword: "",
    84. categoryId: 0
    85. })
    86. const blogList = ref([]) //博客列表
    87. // 获取博客 ,这里组件有个功能就是可以根据id找到value
    88. const loadBlogs = async (page = 0) => {
    89. if (page != 0) {
    90. pageInfo.page = page;
    91. }
    92. let res = await axios.get(`/blog/search?categoryId=${pageInfo.categoryId}&keyword=${pageInfo.keyword}&page=${pageInfo.page}&pageSize=${pageInfo.pageSize}`)
    93. let temp_rows = res.data.data.rows;
    94. for (let jj of temp_rows) {
    95. jj.content += "..."
    96. let d = new Date(jj.create_time)
    97. jj.create_time = `${d.getFullYear()}年${d.getMonth() + 1}月${d.getDate()}日`
    98. }
    99. blogList.value = temp_rows;
    100. pageInfo.count = res.data.data.count
    101. // parseInt向下取整,就是不算小数点, ,%是取余数
    102. pageInfo.pageCount = parseInt(pageInfo.count / pageInfo.pageSize) + (pageInfo.count % pageInfo.pageSize > 0 ? 1 : 0)
    103. }
    104. const homePage = () => {
    105. router.push("/")
    106. }
    107. const dashboard = () => {
    108. router.push("login")
    109. }
    110. const toDetail = (ii) => {
    111. router.push({
    112. path: "detail", query: {
    113. id: ii.id
    114. }
    115. })
    116. }
    117. </script>
    118. <style lang="scss" scoped>
    119. .conrainer {
    120. width: 1200px;
    121. margin: 0 auto
    122. }
    123. .nav {
    124. display: flex;
    125. font-size: 20px;
    126. font-weight: 800px;
    127. padding-top: 20px;
    128. color: #64676a;
    129. div {
    130. cursor: pointer;
    131. margin-left: 15px;
    132. &:hover {
    133. // 鼠标划过去会变色
    134. color: coral;
    135. }
    136. span {
    137. font-size: 12px;
    138. }
    139. }
    140. }
    141. .search {
    142. margin-bottom: 15px;
    143. }
    144. .footer {
    145. width: 500px;
    146. margin: 0px auto;
    147. color: #64676a;
    148. margin-bottom: 0px;
    149. text-align: center;
    150. }
    151. </style>

  • 相关阅读:
    KubernetesNode节点配置
    `Algorithm-Solution` `AcWing` 4727. 摆放棋子
    vulnhub靶机Momentum2
    Python 线性查找
    华硕U盘盘重装Win10系统步骤图解
    智能低压配电房解决方案
    悟空crm安装搭建 报错[0] RedisException in Redis.php line 56问题处理办法
    【echarts】07、echarts+vue2 - 环形图
    /system/bin/sh: disable-verity: not found
    痞子衡嵌入式:瑞萨RA8系列高性能MCU开发初体验
  • 原文地址:https://blog.csdn.net/m0_59214979/article/details/126782251