javaWeb Router

一、路由簡介

1、什么是路由?

- ? 定義:路由就是根據不同的 URL 地址展示不同的內容或頁面。

- ? 通俗理解:路由就像是一個地圖,我們要去不同的地方,需要通過不同的路線進行導航。

2、路由的作用

- ? 單頁應用程序(SPA)中,路由可以實現不同視圖之間的無刷新切換,提升用戶體驗;

- ? 路由還可以實現頁面的認證和權限控制,保護用戶的隱私和安全;

- ? 路由還可以利用瀏覽器的前進與后退,幫助用戶更好地回到之前訪問過的頁面

二、路由重定向

重定向的作用:將一個路由重定向到另一個路由上

router.js文件:

// 導入路由創建的相關方法

import {createRouter,createWebHashHistory} from 'vue-router'

// 導入vue組件

import Home from '../components/Home.vue'

import List from '../components/List.vue'

import Add from '../components/Add.vue'

import Update from '../components/Update.vue'

// 創建路由對象,聲明路由規則

const router = createRouter({

? ? history: createWebHashHistory(),

? ? routes:[

? ? ? ? {

? ? ? ? ? ? path:'/',

? ? ? ? ? ? components:{

? ? ? ? ? ? ? ? default:Home,

? ? ? ? ? ? ? ? homeView:Home

? ? ? ? ? ? } ? ? ?

? ? ? ? },

? ? ? ? {

? ? ? ? ? ? path:'/list',

? ? ? ? ? ? components:{

? ? ? ? ? ? ? ? listView : List

? ? ? ? ? ? }

? ? ? ? },

? ? ? ? {

? ? ? ? ? ? path:'/showAll',

? ? ? ? ? ? // 重定向

? ? ? ? ? ? redirect :'/list'

? ? ? ? },

? ? ? ? {

? ? ? ? ? ? path:'/add',

? ? ? ? ? ? components:{

? ? ? ? ? ? ? ? addView:Add

? ? ? ? ? ? }

? ? ? ? },

? ? ? ? {

? ? ? ? ? ? path:'/update',

? ? ? ? ? ? components:{

? ? ? ? ? ? ? ? updateView:Update

? ? ? ? ? ? } ?

? ? ? ? },

? ? ]

})

// 對外暴露路由對象

export default router;

?

+ App.vue

```html

<script setup>

</script>

<template>

? ? <div>

? ? ? <h1>App頁面</h1>

? ? ? <hr/>

? ? ? ? <!-- 路由的連接 -->

? ? ? ? <router-link to="/">home</router-link> <br>

? ? ? ? <router-link to="/list">list</router-link> <br>

? ? ? ? <router-link to="/showAll">showAll</router-link> <br>

? ? ? ? <router-link to="/add">add</router-link> <br>

? ? ? ? <router-link to="/update">update</router-link> <br>

? ? ? <hr/>

? ? ? <!-- 路由連接對應視圖的展示位置 -->

? ? ? <hr>

? ? ? 默認展示位置:<router-view></router-view>

? ? ? <hr>

? ? ? Home視圖展示:<router-view name="homeView"></router-view>

? ? ? <hr>

? ? ? List視圖展示:<router-view name="listView"></router-view>

? ? ? <hr>

? ? ? Add視圖展示:<router-view name="addView"></router-view>

? ? ? <hr>

? ? ? Update視圖展示:<router-view name="updateView"></router-view>

? ? </div>

</template>

<style scoped>

</style>

三、編程式路由

普通路由(聲明式路由)

`<router-link to="/list">list頁</router-link> ?`這種路由,to中的內容目前是固定的,點擊后只能切換/list對象組件

> 編程式路由

+ 通過useRouter,動態決定向那個組件切換的路由

+ 這里的 `useRouter` 方法返回的是一個 router 對象,你可以用它來做如導航到新頁面、返回上一頁面等操作。

+ App.vue

``` html

<script setup type="module">

? import {useRouter} from 'vue-router'

? import {ref} from 'vue'

? //創建動態路由對象

? let router = useRouter()

? let ?routePath =ref('')

? let ?showList= ()=>{

? ? ? // 編程式路由

? ? ? // 直接push一個路徑

? ? ? router.push('/list')

? ? ? // 或者push一個帶有path屬性的對象

? ? ? //router.push({path:'/list'})

? }

</script>

<template>

? ? <div>

? ? ? <h1>App頁面</h1>

? ? ? <hr/>

? ? ? ? <!-- 路由的連接 -->

? ? ? ? <router-link to="/">home</router-link> <br>

? ? ? ? <router-link to="/list">list</router-link> <br>

? ? ? ? <router-link to="/showAll">showAll</router-link> <br>

? ? ? ? <router-link to="/add">add</router-link> <br>

? ? ? ? <router-link to="/update">update</router-link> <br>

//以上to后固定了訪問路徑的都是聲明式路由,不能動態修改

? ? ? ? <!-- 動態輸入路徑,點擊按鈕,觸發單擊事件的函數,在函數中通過編程式路由切換頁面 -->

? ? ? ? <button @click="showList()">showList</button> <br>

? ? ? <hr/>

? ? ? <!-- 路由連接對應視圖的展示位置 -->

? ? ? <hr>

? ? ? 默認展示位置:<router-view></router-view>

? ? ? <hr>

? ? ? Home視圖展示:<router-view name="homeView"></router-view>

? ? ? <hr>

? ? ? List視圖展示:<router-view name="listView"></router-view>

? ? ? <hr>

? ? ? Add視圖展示:<router-view name="addView"></router-view>

? ? ? <hr>

? ? ? Update視圖展示:<router-view name="updateView"></router-view>

? ? </div>

</template>

<style scoped>

</style>

四、路由傳參

1、路徑參數

?在路徑中使用一個動態字段來實現,我們稱之為路徑參數

? ? + 例如: 查看數據詳情 ?`/showDetail/1` ?,`1`就是要查看詳情的id,可以動態添值!

2、鍵值對參數

類似于get請求通過url傳參,數據是鍵值對形式的

? ? 例如: ?查看數據詳情`/showDetail?hid=1`,`hid=1`就是要傳遞的鍵值對參數

? ? ?在 Vue 3 和 Vue Router 4 中,可以使用 ?`useRoute` 這個函數從 Vue 的組合式 API 中獲取路由對象。

? ? + ?`useRoute` 方法返回的是當前的 route 對象,你可以用它來獲取關于當前路由的信息,如當前的路徑、查詢參數等。

對比:useRouter方法返回的是一個router對象,可以用于導航新頁面和返回上一個頁面。

> 案例需求 : 切換到ShowDetail.vue組件時,向該組件通過路由傳遞參數

修改App.vue文件

``` html

<script setup type="module">

? import {useRouter} from 'vue-router'

? //創建動態路由對象

? let router = useRouter()

? //動態路由路徑傳參方法

? let showDetail= (id,language)=>{

? ? ? // 嘗試使用拼接字符串方式傳遞路徑參數

? ? ? //router.push(`showDetail/${id}/${languange}`)

? ? ? /*路徑參數,需要使用params ?*/

? ? ? router.push({name:"showDetail",params:{id:id,language:language}})

? }

? let showDetail2= (id,language)=>{

? ? ? /*uri鍵值對參數,需要使用query */

? ? ? router.push({path:"/showDetail2",query:{id:id,language:language}})

? }

</script>

<template>

? ? <div>

? ? ? <h1>App頁面</h1>

? ? ? <hr/>

? ? ? <!-- 路徑參數 ? -->

? ? ? <router-link to="/showDetail/1/JAVA">showDetail路徑傳參顯示JAVA</router-link>

? ? ? <button @click="showDetail(1,'JAVA')">showDetail動態路由路徑傳參顯示JAVA</button>

? ? ? <hr/>

? ? ? <!-- 鍵值對參數 -->

? ? ? <router-link v-bind:to="{path:'/showDetail2',query:{id:1,language:'Java'}}">showDetail2鍵值對傳參顯示JAVA</router-link>

? ? ? <button @click="showDetail2(1,'JAVA')">showDetail2動態路由鍵值對傳參顯示JAVA</button>

? ? ? <hr>

? ? ? showDetail視圖展示:<router-view name="showDetailView"></router-view>

? ? ? <hr>

? ? ? showDetail2視圖展示:<router-view name="showDetailView2"></router-view>

? ? </div>

</template>

<style scoped>

</style>

```

+ 修改router.js增加路徑參數占位符

``` javascript

// 導入路由創建的相關方法

import {createRouter,createWebHashHistory} from 'vue-router'

// 導入vue組件

import ShowDetail from '../components/ShowDetail.vue'

import ShowDetail2 from '../components/ShowDetail2.vue'

// 創建路由對象,聲明路由規則

const router = createRouter({

? ? history: createWebHashHistory(),

? ? routes:[

? ? ? ?

? ? ? ? {

? ? ? ? ? ? /* 此處:id ?:language作為路徑的占位符 */

? ? ? ? ? ? path:'/showDetail/:id/:language',

? ? ? ? ? ? /* 動態路由傳參時,根據該名字找到該路由 */

? ? ? ? ? ? name:'showDetail',

? ? ? ? ? ? components:{

? ? ? ? ? ? ? ? showDetailView:ShowDetail

? ? ? ? ? ? } ?

? ? ? ? },

? ? ? ? {

? ? ? ? ? ? path:'/showDetail2',

? ? ? ? ? ? components:{

? ? ? ? ? ? ? ? showDetailView2:ShowDetail2

? ? ? ? ? ? } ?

? ? ? ? },

? ? ]

})

// 對外暴露路由對象

export default router;

?

?

?

+ ShowDetail.vue 通過useRoute獲取路徑參數

``` html

<script setup type="module">

? ? import{useRoute} from 'vue-router'

? ? import { onUpdated,ref } from 'vue';

? ? // 獲取當前的route對象

? ? let route =useRoute()

? ? let languageId = ref(0)

? ? let languageName = ref('')

? ? // ?借助更新時生命周期,將數據更新進入響應式對象

? ? onUpdated (()=>{

? ? ? ? // 獲取對象中的參數

? ? ? ? languageId.value=route.params.id

? ? ? ? languageName.value=route.params.language

? ? ? ? console.log(languageId.value)

? ? ? ? console.log(languageName.value)

? ? })

? ?

</script>

<template>

? ? <div>

? ? ? ? <h1>ShowDetail頁面</h1>

? ? ? ? <h3>編號{{route.params.id}}:{{route.params.language}}是世界上最好的語言</h3>

? ? ? ? <h3>編號{{languageId}}:{{languageName}}是世界上最好的語言</h3>

? ? </div>

</template>

<style scoped>

</style>

```

- ? ShowDetail2.vue通過useRoute獲取鍵值對參數

```html

<script setup type="module">

? ? import{useRoute} from 'vue-router'

? ? import { onUpdated,ref } from 'vue';

? ? // 獲取當前的route對象

? ? let route =useRoute()

? ? let languageId = ref(0)

? ? let languageName = ref('')

? ? // ?借助更新時生命周期,將數據更新進入響應式對象

? ? onUpdated (()=>{

? ? ? ? // 獲取對象中的參數(通過query獲取參數,此時參數是key-value形式的)

? ? ? ? console.log(route.query)

? ? ? ? console.log(languageId.value)

? ? ? ? console.log(languageName.value)

? ? ? ? languageId.value=route.query.id

? ? ? ? languageName.value=route.query.language

? ? ? ?

? ? })

? ?

</script>

<template>

? ? <div>

? ? ? ? <h1>ShowDetail2頁面</h1>

? ? ? ? <h3>編號{{route.query.id}}:{{route.query.language}}是世界上最好的語言</h3>

? ? ? ? <h3>編號{{languageId}}:{{languageName}}是世界上最好的語言</h3>

? ? </div>

</template>

<style scoped>

</style>

五、路由守衛

在 Vue 3 中,路由守衛是用于在路由切換期間進行一些特定任務的回調函數。路由守衛可以用于許多任務,例如驗證用戶是否已登錄、在路由切換前提供確認提示、請求數據等。Vue 3 為路由守衛提供了全面的支持,并提供了以下幾種類型的路由守衛:

1. ?全局前置守衛:在路由切換前被調用,可以用于驗證用戶是否已登錄、中斷導航、請求數據等。

2. ?全局后置守衛:在路由切換之后被調用,可以用于處理數據、操作 DOM 、記錄日志等。

3. ?守衛代碼的位置: 在router.js中

//全局前置路由守衛

router.beforeEach( (to,from,next) => {

? ? //to 是目標地包裝對象 ?.path屬性可以獲取地址

? ? //from 是來源地包裝對象 .path屬性可以獲取地址

? ? ??next是方法,不調用默認攔截! next() 放行,直接到達目標組件

? ? next('/地址')可以轉發到其他地址,到達目標組件前會再次經過前置路由守衛

? ? console.log(to.path,from.path,next)

? ? //需要判斷,注意避免無限重定向,所以一般需要寫在分支條件下。

? ? if(to.path == '/index'){

? ? ? ? next()

? ? }else{

? ? ? ? next('/index')

? ? }

? ?

} )

//全局后置路由守衛

router.afterEach((to, from) => {

? ? console.log(`Navigate from ${from.path} to ${to.path}`);

});

> 登錄案例,登錄以后才可以進入home,否則必須進入login

+ 定義Login.vue

```html

<script setup>

? ? import {ref} from 'vue'

? ? import {useRouter} from 'vue-router'

? ? let username =ref('')

? ? let password =ref('')

? ? let router = useRouter();

? ? let login = () =>{

? ? ? ? console.log(username.value,password.value)

? ? ? ? if(username.value == 'root' & password.value == '123456'){

? ? ? ? ? ? router.push({path:'/home',query:{'username':username.value}})

? ? ? ? ? ? //登錄成功利用前端存儲機制,存儲賬號!

? ? ? ? ? ? localStorage.setItem('username',username.value)

? ? ? ? ? ? //sessionStorage.setItem('username',username)

? ? ? ? }else{

? ? ? ? ? ? alert('登錄失敗,賬號或者密碼錯誤!');

? ? ? ? }

? ? }

</script>

<template>

? ?

? ? <div>

? ? ? ? 賬號: <input type="text" v-model="username" placeholder="請輸入賬號!"><br>

? ? ? ? 密碼: <input type="password" v-model="password" placeholder="請輸入密碼!"><br>

? ? ? ? <button @click="login()">登錄</button>

? ? </div>

</template>

<style scoped>

</style>

```

+ 定義Home.vue

```html

<script setup>

?import {ref} from 'vue'

?import {useRoute,useRouter} from 'vue-router'

?let route =useRoute()

?let router = useRouter()

?// ?并不是每次進入home頁時,都有用戶名參數傳入

?//let username = route.query.username

?let username =window.localStorage.getItem('username');

?let logout= ()=>{

? ? // 清除localStorge中的username

? ? //window.sessionStorage.removeItem('username')

? ? window.localStorage.removeItem('username')

? ? // 動態路由到登錄頁

? ? router.push("/login")

?}

</script>

<template>

? ? <div>

? ? ? ? <h1>Home頁面</h1>

? ? ? ? <h3>歡迎{{username}}登錄</h3>

? ? ? ? <button @click="logout">退出登錄</button>

? ? </div>

</template>

<style scoped>

</style>

```

+ App.vue

```html

<script setup type="module">

?

</script>

<template>

? ? <div>

? ? ?

? ? ? <router-view></router-view>

? ? ?

? ? </div>

</template>

<style scoped>

</style>

```

+ 定義routers.js

``` javascript

// 導入路由創建的相關方法

import {createRouter,createWebHashHistory} from 'vue-router'

// 導入vue組件

import Home from '../components/Home.vue'

import Login from '../components/login.vue'

// 創建路由對象,聲明路由規則

const router = createRouter({

? ? history: createWebHashHistory(),

? ? routes:[

? ? ? ? {

? ? ? ? ? ? path:'/home',

? ? ? ? ? ? component:Home

? ? ? ? },

? ? ? ? {

? ? ? ? ? ? path:'/',

? ? ? ? ? ? redirect:"/home"

? ? ? ? },

? ? ? ? {

? ? ? ? ? ? path:'/login',

? ? ? ? ? ? component:Login

? ? ? ? },

? ? ]

})

// 設置路由的全局前置守衛

router.beforeEach((to,from,next)=>{

? ? /*

? ? to 要去那

? ? from 從哪里來

? ? next 放行路由時需要調用的方法,不調用則不放行

? ? */

? ? console.log(`從哪里來:${from.path},到哪里去:${to.path}`)

? ? if(to.path == '/login'){

? ? ? ? //放行路由 ?注意放行不要形成循環 ?

? ? ? ? next()

? ? }else{

? ? ? ? //let username =window.sessionStorage.getItem('username');

? ? ? ? let username =window.localStorage.getItem('username');

? ? ? ? if(null != username){

? ? ? ? ? ? next()

? ? ? ? }else{

? ? ? ? ? ? next('/login')

? ? ? ? }

? ? }

})

// 設置路由的全局后置守衛

router.afterEach((to,from)=>{

? ? console.log(`從哪里來:${from.path},到哪里去:${to.path}`)

})

// 對外暴露路由對象

export default router;

```

+ 啟動測試

```shell

npm run dev

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

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

相關文章

【前端】使用 HTML、CSS 和 JavaScript 創建一個數字時鐘和搜索功能的網頁

文章目錄 ?前言?一、項目結構?二、HTML 結構?三、CSS 樣式?四、JavaScript 功能?五、運行效果?總結 標題詳情作者JosieBook頭銜CSDN博客專家資格、阿里云社區專家博主、軟件設計工程師博客內容開源、框架、軟件工程、全棧&#xff08;,NET/Java/Python/C&#xff09;、數…

聚焦應用常用功能,提升用戶體驗與分發效率

隨著HarmonyOS應用的持續發展&#xff0c;應用的功能將越來越豐富&#xff0c;實際上80%的用戶使用時長都會集中在20%的特性上&#xff0c;其余的功能可能也僅僅是面向部分用戶。 用戶在下載應用時&#xff0c;如果應用包含大量的功能和資源&#xff0c;可能會導致下載時間過長…

OCR 識別案例

OCR 識別案例 注意點&#xff1a;輸入圖像尺寸比例盡量和參與模型訓練的數據集比例相似&#xff0c;識別效果會更好。 1、pytesseract Pytesseract是一個Python的光學字符識別&#xff08;OCR&#xff09;工具&#xff0c;它作為Tesseract OCR引擎的封裝&#xff0c;允許你在…

IP大洗牌ipv6強勢來襲!!!【ipv6配置及應用】

前言 隨著時代的發展&#xff0c;IPv4&#xff08;互聯網協議第四版&#xff09;已逐漸無法滿足全球互聯網爆炸式增長的需求。自20世紀80年代誕生以來&#xff0c;IPv4憑借其簡潔的架構和約43億的地址容量&#xff0c;支撐了互聯網的早期擴張。然而&#xff0c;在移動互聯網、物…

OpenAI 推出圖像生成新突破:GPT-4o 實現圖像編輯對話化

關鍵要點 OpenAI 推出了 4o 圖像生成功能&#xff0c;集成于 GPT-4o&#xff0c;提供精準且逼真的圖像生成。 它似乎適用于多種用戶&#xff0c;包括免費用戶&#xff0c;API 訪問預計幾周內推出。 安全措施包括 C2PA 元數據和內容屏蔽&#xff0c;限制生成不適當圖像。 研究…

如何快速對比兩個不同的excel文件中的單元格的數據是否完全相同 并把不同的單元格的背景顏色更改為紅色?

要快速對比兩個不同的Excel文件中的單元格數據是否完全相同&#xff0c;并將不同的單元格背景顏色更改為紅色&#xff0c;可以使用Excel的以下幾種方法&#xff1a; 方法一&#xff1a;使用條件格式 打開兩個Excel文件。將一個文件的內容復制到另一個文件的新工作表中&#x…

口腔種植全流程AI導航系統及輔助診療與耗材智能化編程分析

一、系統架構與編程框架設計 口腔種植全流程人工智能導航系統的開發是一項高度復雜的多學科融合工程,其核心架構需在醫學精準性、工程實時性與臨床實用性之間實現平衡。系統設計以模塊化分層架構為基礎,結合高實時性數據流與多模態協同控制理念,覆蓋從數據采集、智能決策到…

nginx配置頁面緩存,前端每次打包生成新的js文件

前端需要處理的&#xff1a;使用時間戳作為文件名 // nuxt.config.js export default {build: {filenames: {app: ({ isDev }) > isDev ? [name].js : [name].${Date.now()}.js, // 生產環境用時間戳chunk: ({ isDev }) > isDev ? [name].js : [name].${Date.now()}.j…

4.Socket類、InetAddr類、Epoll類實現模塊化

目錄 1. InetAddr類 類定義 代碼說明 類實現 2.Socket類 類定義 類實現 3. Epoll類 類定義 構造與析構函數 方法實現 類實現 4. 使用模塊化設計 示例使用&#xff08;main.cpp) 5. 運行程序 隨著程序復雜度的增加&#xff0c;單一的面向過程的代碼會變得難以理…

視頻生成的測試時Scaling時刻!清華開源Video-T1,無需重新訓練讓性能飆升

來源 | 機器之心 視頻作為包含大量時空信息和語義的媒介&#xff0c;對于 AI 理解、模擬現實世界至關重要。視頻生成作為生成式 AI 的一個重要方向&#xff0c;其性能目前主要通過增大基礎模型的參數量和預訓練數據實現提升&#xff0c;更大的模型是更好表現的基礎&#xff0c…

Go 語言標準庫中time模塊詳細功能介紹與示例

以下是 Go 語言 time 模塊的詳細說明及示例&#xff0c;涵蓋時間操作、定時器、時區處理等核心功能&#xff1a; 一、時間基礎操作 1. 獲取時間 // 當前本地時間 now : time.Now() fmt.Println(now) // 2023-08-04 15:30:45.123456 0800 CST// 構造指定時間 t : time.Date(20…

【強化學習】基于深度強化學習的微能源網能量管理與優化策略研究【Python】

目錄 主要內容 程序要點 2.1 微能源網系統組成 2.2 強化學習及Q學習算法 部分代碼 運行結果 下載鏈接 主要內容 該程序借助深度 Q 網絡&#xff08;DQN&#xff09;&#xff0c;學習預測負荷、風 / 光可再生能源功率輸出及分時電價等環境信息&#xff0c;運用…

dom0-kernel: /thermal-zones/soc_max/cooling-maps/map0: could not find phandle 2

問題描述&#xff1a; 由于soc_max下某個節點找不到&#xff0c;到時dom0-kernel后面有很多有關thermal熱管理之類報錯 問題解決及其原因分析&#xff1a; 這是因為在Xen解析相關節點時&#xff0c;soc_max下的某個節點被跳過了&#xff0c;注釋掉相關的cpu節點處理dom0就可以找…

關于計算機視覺中的插值小記

計算機視覺中的插值&#xff08;Interpolation&#xff09;講解 插值&#xff08;Interpolation&#xff09;在計算機視覺中是一項基礎操作&#xff0c;常用于圖像縮放、旋轉、去噪、圖像重建等任務。其核心思想是在已知數據點之間進行推測&#xff0c;估計未知的像素值或特征…

計算機網絡--傳輸層(1)

第五章 傳輸層 一、傳輸層基本功能 進程到進程的邏輯通信 套接字&#xff08;Socket&#xff09;&#xff1a;IP地址:端口號 IP地址&#xff1a;標識主機&#xff08;網絡層功能&#xff09;端口號&#xff1a;16位整數&#xff08;0-65535&#xff09;&#xff0c;標識進程 熟…

指定 Python 3.12.6-slim 作為基礎鏡像

指定 Python 3.12.6-slim 作為基礎鏡像&#xff0c;意思就是&#xff1a; &#x1f449; 用官方的 Python 3.12.6&#xff08;精簡版&#xff09;作為容器的起點&#xff0c;里面已經有 Python 3.12.6 預裝好了&#xff0c;你不用自己裝。 &#x1f539; 為什么用 -slim&…

【藍橋杯】算法筆記1

1.暴力枚舉 給定一個正整數n,請找出所有滿足a + b = n的整數對(a, b),其中a和b都是正整數,且a ≤ b。 輸入格式:一個正整數n (1 ≤ n ≤ 10?) 輸出格式:所有符合條件的(a, b)對,每行一對,按a的升序排列。如果沒有符合條件的對,輸出"No solution"。 問題分…

專注自習室:番茄工作法實踐

專注自習室&#xff1a;番茄工作法實踐 我需要一個任務管理工具&#xff0c;但在網上找了很多都找不到合適的工具。市面上的大多數產品過于強調任務完成性&#xff0c;給我帶來了很強的心理壓力&#xff0c;這種壓力最終反而降低了我的工作效率。于是我決定自己動手&#xff0…

VUE3項目VITE打包優化

VUE3項目VITE打包優化 代碼加密依賴配置效果對比圖 自動導入依賴配置 代碼壓縮依賴配置效果對比圖 圖片壓縮依賴配置效果對比圖 字體壓縮總結與實踐運用效果 代碼加密 依賴 npm install -D vite-plugin-bundle-obfuscator配置 import vitePluginBundleObfuscator from "…

文章記單詞 | 第14篇(六級)

一&#xff0c;單詞釋義 affection&#xff1a;n. 喜愛&#xff0c;鐘愛&#xff1b;愛慕之情&#xff1b;感情stream&#xff1a;n. 小河&#xff0c;溪流&#xff1b;一連串&#xff0c;源源不斷&#xff1b;水流&#xff0c;氣流&#xff1b;vi. 流&#xff0c;流動&#x…