Vue3項目練習詳細步驟(第三部分:文章分類頁面模塊)

文章分類列表

主體結構?

接口文檔

文章分類列表查詢接口數據綁定

?Pinia狀態管理庫

axios請求攔截器?

Pinia持久化插件-persist?

未登錄統一處理

添加文章分類?

主體結構?

?接口文檔

?綁定請求數據

編輯文章分類

彈框結構?

?數據回顯

?接口文檔

綁定請求數據

刪除分類?

接口文檔

?綁定請求數據

?

文章分類列表

主體結構?

?在ArticleCategory.vue文件中完成文章分類列表組件

<script setup>
import {Edit,Delete
} from '@element-plus/icons-vue'
import { ref } from 'vue'
const categorys = ref([{"id": 3,"categoryName": "美食","categoryAlias": "my","createTime": "2023-09-02 12:06:59","updateTime": "2023-09-02 12:06:59"},{"id": 4,"categoryName": "娛樂","categoryAlias": "yl","createTime": "2023-09-02 12:08:16","updateTime": "2023-09-02 12:08:16"},{"id": 5,"categoryName": "軍事","categoryAlias": "js","createTime": "2023-09-02 12:08:33","updateTime": "2023-09-02 12:08:33"}
])
</script>
<template><el-card class="page-container"><template #header><div class="header"><span>文章分類</span><div class="extra"><el-button type="primary">添加分類</el-button></div></div></template><el-table :data="categorys" style="width: 100%"><el-table-column label="序號" width="100" type="index"> </el-table-column><el-table-column label="分類名稱" prop="categoryName"></el-table-column><el-table-column label="分類別名" prop="categoryAlias"></el-table-column><el-table-column label="操作" width="100"><template #default="{ row }"><el-button :icon="Edit" circle plain type="primary" ></el-button><el-button :icon="Delete" circle plain type="danger"></el-button></template></el-table-column><template #empty><el-empty description="沒有數據" /></template></el-table></el-card>
</template><style lang="scss" scoped>
.page-container {min-height: 100%;box-sizing: border-box;.header {display: flex;align-items: center;justify-content: space-between;}
}
</style>

保存查看

接口文檔

詳細接口文檔鏈接:https://blog.csdn.net/dafsq/article/details/138500082?spm=1001.2014.3001.5502?

文章分類列表查詢接口數據綁定

在api目錄下新建article.js文件

完成分類列表查詢請求方法?

//導入請求工具文件
import request from '@/utils/request.js'//文章分類列表查詢
export const ArticleCategoryListService = () => {return request.get('/category')
}

?在文章分類ArticleCategory.vue文件中聲明文章分類列表查詢異步函數

//聲明文章分類列表查詢異步函數
import {articleCategoryListService} from '@/api/article.js'
const articleCategoryList = async() => {let result = await articleCategoryListService();if(result.code == 0){//成功獲取categorys.value = result.data;}else{//獲取失敗ElMessage.error('獲取失敗')}
}
//調用
articleCategoryList();

?Pinia狀態管理庫

?Pinia是Vue的專屬狀態管理庫,它允許你跨組件或頁面共享狀態

在項目目錄下安裝pinia

npm install pinia

在main.js文件中應用實例中使用pinia

創建src/stores/token.js文件 在其中定義store

在登錄頁面Login.vue文件中定義tokenStore并把登錄時的token存入pinia

axios請求攔截器?

????????當進入主頁后,將來要與后臺交互,都需要攜帶token,如果每次請求都寫這樣的代碼,將會比較繁瑣,此時可以將攜帶token的代碼通過請求攔截器統一處理

在請求工具request.js文件中使用axios請求攔截器將token以請求頭的方式攜帶請求

//導入token狀態
import { useTokenStore } from '@/stores/token.js';
//添加請求攔截器
instance.interceptors.request.use((config)=>{//在發送請求之前做什么let tokenStore = useTokenStore()//如果token中有值,在攜帶if(tokenStore.token){config.headers.Authorization=tokenStore.token}return config},(err)=>{//如果請求錯誤做什么Promise.reject(err)}
)

?保存可以查看到賬號中已有的文章分類信息

Pinia持久化插件-persist?

  • Pinia默認是內存存儲,當刷新瀏覽器的時候會丟失數據。
  • Persist插件可以將pinia中的數據持久化的存儲?

在項目目錄下安裝persist

npm install pinia-persistedstate-plugin

在main.js文件在pinia中使用persist

在token.js文件中定義狀態Store時指定持久化配置參數,在defineStore函數中添加第三個參數

?

這樣登錄刷新后token持久保存 就不會報錯了?

?

未登錄統一處理

????????在后續訪問接口時,如果沒有登錄,則前端不攜帶token,后臺服務器會返回響應狀態碼401,代表未登錄,此時可以在axios的響應攔截器中,統一對未登錄的情況做處理

//導入Element-Plus提示框組件
import { ElMessage } from 'element-plus'//導入路由
import router from '@/router/router.js'
//添加響應攔截器
instance.interceptors.response.use(result=>{return result.data;},err=>{//如果響應狀態碼時401,代表未登錄,給出對應的提示,并跳轉到登錄頁if(err.response.status===401){ElMessage.error('請先登錄!')router.push('/login')}else{ElMessage.error('服務異常');}return Promise.reject(err);//異步的狀態轉化成失敗的狀態}
)

?

添加文章分類?

主體結構?

在ArticleCategory.vue文件中添加分類彈窗組件

                <!-- 添加分類彈窗 --><el-dialog v-model="dialogVisible" title="添加彈層" width="30%"><el-form :model="categoryModel" :rules="rules" label-width="100px" style="padding-right: 30px"><el-form-item label="分類名稱" prop="categoryName"><el-input v-model="categoryModel.categoryName" minlength="1" maxlength="10"></el-input></el-form-item><el-form-item label="分類別名" prop="categoryAlias"><el-input v-model="categoryModel.categoryAlias" minlength="1" maxlength="15"></el-input></el-form-item></el-form><template #footer><span class="dialog-footer"><el-button @click="dialogVisible = false">取消</el-button><el-button type="primary"> 確認 </el-button></span></template></el-dialog>

?添加表單校驗和數據模型

//控制添加分類彈窗
const dialogVisible = ref(false)//添加分類數據模型
const categoryModel = ref({categoryName: '',categoryAlias: ''
})
//添加分類表單校驗
const rules = {categoryName: [{ required: true, message: '請輸入分類名稱', trigger: 'blur' },],categoryAlias: [{ required: true, message: '請輸入分類別名', trigger: 'blur' },]
}

在添加分類按鈕處綁定顯示彈窗的單擊事件

<el-button type="primary" @click="dialogVisible = true">添加分類</el-button>

點擊添加文章按鈕時彈窗正常顯示

?綁定數據模型

綁定校驗規則

已綁定成功

?綁定取消按鈕事件,使彈框不顯示

?接口文檔

?綁定請求數據

在article.js文件中添加請求函數

//文章分類添加
export const articleCategoryAddService = (categoryModel) => {return request.post('/category',categoryModel)
}

在文章分類頁面ArticleCategory.vue文件中添加單擊事件請求函數

//導入Element-Plus提示框組件
import { ElMessage } from 'element-plus'
//導入articleCategoryAddService函數
import {articleCategoryAddService} from '@/api/article.js'
const addCategory = async () => {let result = await articleCategoryAddService(categoryModel.value);if(result.code == 0){//成功添加ElMessage(result.message? result.message:'添加成功')//隱藏彈窗dialogVisible.value = false//再次訪問后臺接口,查詢所有分類articleCategoryList();}else{//添加失敗ElMessage.error('添加失敗')}
}

在確認按鈕中綁定該事件函數?

<el-button type="primary" @click="addCategory"> 確認 </el-button>

?

編輯文章分類

彈框結構?

?在編輯按鈕處添加事件,點擊后顯示彈框

<el-button :icon="Edit" circle plain type="primary" @click="dialogVisible = true"></el-button>

定義變量控制彈窗標題?

//定義變量控制彈窗標題
const title=ref('')

在彈窗標題中綁定變量

<el-dialog v-model="dialogVisible" :title="title" width="30%">

?在添加分類按鈕中賦值給標題變量

<el-button type="primary" @click="dialogVisible = true;title='添加分類'">添加分類</el-button>

在編輯按鈕中賦值標題變量

<el-button :icon="Edit" circle plain type="primary" @click="dialogVisible = true;title='編輯分類'"></el-button>

?保存之后點擊不同的按鈕將會顯示對應的彈框標題

?數據回顯

?定義數據回顯函數

//修改分類回顯
const updateCategoryEcho = (row) => {title.value = '修改分類'dialogVisible.value = true//將row中的數據賦值給categoryModelcategoryModel.value.categoryName=row.categoryNamecategoryModel.value.categoryAlias=row.categoryAlias//修改的時候必須傳遞分類的id,所以擴展一個id屬性categoryModel.value.id=row.id
}

?通過插槽的方式得到被點擊按鈕所在行的數據

    <template #default="{ row }"><el-button :icon="Edit" circle plain type="primary" @click="updateCategoryEcho(row)"></el-button><el-button :icon="Delete" circle plain type="danger"></el-button></template>

保存后點擊編輯 文本框回顯效果

?

?接口文檔

?

綁定請求數據

在article.js文件中添加請求函數

?在文章分類頁面ArticleCategory.vue文件中添加修改文章分類單擊事件請求函數

//導入articleCategoryUpdateService函數
import {articleCategoryUpdateService} from '@/api/article.js'
//修改分類
const updateCategory=async ()=>{let result = await articleCategoryUpdateService(categoryModel.value)if(result.code == 0){ElMessage.success(result.message? result.message:'修改成功')//隱藏彈窗dialogVisible.value=false//再次訪問后臺接口,查詢所有分類articleCategoryList();}else{//添加失敗ElMessage.error('修改失敗')}
}

由于現在修改和新增共用了一個數據模型,所以在點擊添加分類后,有時候會顯示數據,此時可以將categoryModel中的數據清空 ?

//清空模型數據
const clearData = ()=>{categoryModel.value.categoryName='',categoryModel.value.categoryAlias=''
}

?修改確定按鈕的綁定事件

<el-button type="primary" @click="title==='添加分類'? addCategory():updateCategory()"> 確認 </el-button>

?修改添加按鈕的點擊事件

<el-button type="primary" @click="dialogVisible = true;title='添加分類';clearData()">添加分類</el-button>

?保存之后就能完成添加和修改的功能了

刪除分類?

接口文檔

?

?綁定請求數據

?在article.js文件中添加請求函數

//刪除分類
export const articleCategoryDeleteService = (id) => {return request.delete('/category?id='+id)
}

??在文章分類頁面ArticleCategory.vue文件中編寫刪除文章分類單擊事件請求函數并在函數內部添加提示框組件

//導入element的ElMessageBox提示框組件
import { ElMessageBox } from 'element-plus'
//導入articleCategoryDeleteService函數
import {articleCategoryDeleteService} from '@/api/article.js'
//刪除分類
const deleteCategory = (row) => {ElMessageBox.confirm('確認是否刪除該分類信息?','提示',{confirmButtonText: '確認',cancelButtonText: '取消',type: 'warning',}).then(async () => {//用戶點擊了確認let result = await articleCategoryDeleteService(row.id)ElMessage.success(result.message?result.message:'刪除成功')//再次調用getAllCategory,獲取所有文章分類articleCategoryList();}).catch(() => {//用戶點擊了取消ElMessage({type: 'info',message: '取消刪除',})})
}

?在刪除圖標按鈕處綁定該點擊事件函數

<el-button :icon="Delete" circle plain type="danger" @click="deleteCategory(row)"></el-button>

?保存后即可正常刪除文章分類

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/19025.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/19025.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/19025.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前端中var、let 或 const區別

前端中var、let 或 const區別 一、前言1.var2.let3.const4.總結 一、前言 當涉及 JavaScript 中的變量聲明時&#xff0c;開發人員通常會面臨選擇使用 var、let 或 const。雖然它們都可以用來聲明變量&#xff0c;但在實際應用中&#xff0c;它們之間有一些重要的區別。接下來…

在window中使用HTTP服務器獲取kali的文件

文章目錄 一、在window中使用HTTP服務器獲取kali的文件1、疑問2、執行條件3、成功讀取 一、在window中使用HTTP服務器獲取kali的文件 1、疑問 有時候kali上面有的文件想傳入window但是發現不允許這樣操作那怎么辦呢&#xff1f;特別是在一些限制工具的比賽中想把kali的文件傳…

數字化學校渠道的建造內容

數字化學校渠道的建造內容可以用階段來區分&#xff1a; 1.網絡硬件為主的建造 這一階段首要重視的是學校網絡的硬件基礎建造&#xff0c;一起供給部分網絡根本服務&#xff0c;與此一起&#xff0c;也進行部分信息使用內容的建造&#xff0c;如電子閱覽室、歸納管理信息體系等…

Android 圖片加載glide庫 一次通關

前言 Glide是一個由Bumptech開發的開源圖片加載庫&#xff0c;專門用于Android平臺。它被廣泛應用于Android應用中&#xff0c;以簡化圖片加載過程&#xff0c;并提高性能和效率。 Glide能夠快速加載圖片&#xff0c;同時減少頁面加載時間和內存消耗。Glide具有強大的緩存機制…

國產操作系統上apt命令詳解 _ 統信 _ 麒麟 _ 中科方德

原文鏈接&#xff1a;國產操作系統上apt命令詳解 | 統信 | 麒麟 | 中科方德 Hello&#xff0c;大家好啊&#xff01;今天給大家帶來一篇在國產操作系統上使用apt命令的詳解文章。apt&#xff08;Advanced Package Tool&#xff09;是Debian及其衍生發行版&#xff08;如統信UOS…

網絡流量監控:解讀網絡性能的關鍵

目錄 什么是網絡流量監控&#xff1f; 網絡流量監控的原理 網絡流量監控的應用 AnaTraf網絡流量分析儀簡介 結語 在當今數字化時代&#xff0c;網絡已成為人們日常生活和商業運營的核心。隨著企業和個人對網絡的依賴程度不斷增加&#xff0c;確保網絡穩定性和性能已成為至…

如何在JavaScript中檢查字符串是否包含子字符串?

在JavaScript中檢查一個字符串是否包含某個子字符串是一個常見任務。本文將介紹幾種實現該功能的方法&#xff0c;包括傳統方法和高級算法。 使用 indexOf() 方法 最基礎和常見的方法是使用 indexOf() 方法。該方法返回字符串在另一個字符串中的起始位置&#xff0c;如果未找…

TPshop商城的保姆教程(windows)

提前準備 phpStudy下載&#xff1a;https://www.xp.cn/download.html 選擇適合自己的版本下載 TPshop商城源文件下載鏈接&#xff1a; https://pan.baidu.com/s/143fLrxbwe9CTMCbyx7mXJQ?pwd6666 開始安裝 安裝完phpstudy后 以管理員的身份啟動phpstudy.exe 選擇合適自己…

2024年03月 Python(六級)真題解析#中國電子學會#全國青少年軟件編程等級考試

Python等級考試(1~6級)全部真題?點這里 一、單選題(共25題,共50分) 第1題 以下選項中,創建類正確的是?() A: class test1: def prt(self): …… B: class Mg(): def__init__(na,ag): self.na=na C: class A(): def print(self): print(“Yes”) a=A() a.print() D…

【好書推薦,持續更新~~】

書籍推薦&#xff0c;持續更新~~ 1.《只是為了好玩: Linux之父林納斯自傳》-- Linus Torvalds, David Diamond Linux之父Linus Torvalds的自傳&#xff0c;也是Linus唯一一本書。Linus以調侃的語氣講述了自己的成長經歷&#xff0c;在他看來&#xff0c;一切都是為了好玩兒&am…

【Vue】v-bind屬性綁定指令

作用&#xff1a;動態設置html的標簽屬性 比如&#xff1a;src、url、title 默認情況下是單向的 語法&#xff1a; v-bind:屬性名"表達式"v-bind:可以簡寫成 > : 比如&#xff0c;有一個圖片&#xff0c;它的 src 屬性值&#xff0c;是一個圖片地址。這個地址…

Android SDK下載安裝(_指定版本)

安裝完sdk&#xff0c;就可以直接使用adb命令了&#xff0c;如果想做app相關自動化測試&#xff0c;也是需要sdk環境依賴的 一、SDK下載 A&#xff1a;官網下載&#xff1a; 管內鏡像網站(推薦)&#xff1a;https://www.androiddevtools.cn/index.html 官網&#xff1a;htt…

2024-5-9——給植物澆水 II

2024-5-9 題目來源我的題解方法一 雙指針 題目來源 力扣每日一題&#xff1b;題序&#xff1a;2105 我的題解 方法一 雙指針 使用兩個指針t1和t2記錄Alice和Bob當前還未澆水的植物&#xff0c;使用變個變量cap1和cap2表示Alice和Bob當前剩余的水量。 兩端同時澆水&#xff0…

滲透測試一些知識點

1、如果提示缺少參數&#xff0c;如{msg&#xff1a;params error}&#xff0c;可嘗使用字典模糊測試構造參數&#xff0c;進一步攻擊。 2、程序溢出&#xff0c;int最大值為2147483647&#xff0c;可嘗試使用該值進行整數溢出&#xff0c;觀察現象。 3、403&#xff0c;404響…

如何使用MATLAB寫測試(2)Negative Test

如何使用MATLAB寫測試&#xff08;2&#xff09;Negative Test 原文&#xff1a;如何使用MATLAB寫測試&#xff08;2&#xff09;Negative Test - 知乎 (zhihu.com) 上一篇請參見 如何使用MATLAB寫測試&#xff08;1&#xff09; - 知乎專欄 上一篇中&#xff0c;我們的實習…

【YashanDB知識庫】ODBC驅動類問題定位方法

【標題】ODBC驅動類問題定位方法 【需求分類】故障分析 【關鍵字】ODBC 【需求描述】由于我們的ODBC接口目前尚不完善&#xff0c;經常會遇見ODBC接口能力不足導致應用功能無法運行的問題&#xff0c;需要定位手段確定底層是哪個接口報錯 【需求原因分析】方便一線數據庫管…

【python】修改目標檢測的txt標簽(yolo)的類別ID映射

腳本功能&#xff1a; 針對目錄下的所有yolo格式的txt標簽文件&#xff0c;將class類別的id修改為指定id。 實際應用常見不多 代碼 # -*- coding: utf-8 -*- # Time : 2023/9/11 10:58 # Author : CLW # FileName: change_txt_label.py # Software: PyCharmimport os 算法功…

markdown語法保存

這里寫自定義目錄標題 歡迎使用Markdown編輯器新的改變功能快捷鍵合理的創建標題&#xff0c;有助于目錄的生成如何改變文本的樣式插入鏈接與圖片如何插入一段漂亮的代碼片生成一個適合你的列表創建一個表格設定內容居中、居左、居右SmartyPants 創建一個自定義列表如何創建一個…

實驗七 RTP、DSPP協議的配置

一、實驗目的 掌握 RIP 動態路由協議的配置、診斷方法。 二、實驗步驟 1、 運行 Cisco Packet Tracer 軟件&#xff0c;在邏輯工作區放入兩臺路由器、兩臺工作站 PC&#xff0c;分別點擊各路由器&#xff0c;打開其配置窗口&#xff0c;關閉電源&#xff0c;分別加入一個 2 …

PowerPivot-跨表取值

在PowerPivot中&#xff0c;跨表取值通常涉及創建關系和使用DAX&#xff08;數據分析表達式&#xff09;函數。 以下是一些基本步驟和常用的DAX函數&#xff0c;幫助你在PowerPivot中實現跨表取值&#xff1a; 步驟1&#xff1a;創建關系 加載數據&#xff1a;確保你已將需要…