最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue路由參數(shù)的傳遞與獲取方式詳細(xì)介紹

 更新時(shí)間:2022年09月30日 17:03:26   作者:月光曬了很涼快  
顧名思義,vue路由傳參是指嵌套路由時(shí)父路由向子路由傳遞參數(shù),否則操作無(wú)效。傳參方式可以劃分為params傳參和query傳參,params傳參又可以分為url中顯示參數(shù)和不顯示參數(shù)兩種方式。具體區(qū)分和使用后續(xù)分析

前言

vue 頁(yè)面路由切換時(shí)傳參的方式有如下幾種:

動(dòng)態(tài)路由參數(shù)

  • 它隱藏字段信息,相對(duì)于來(lái)說(shuō)較安全,同時(shí)地址欄中的地址也相對(duì)較短
  • 它必須是先定義后使用,一般用于根據(jù)固定參數(shù),返回對(duì)應(yīng)的數(shù)據(jù)所用

query字符串 ?id=1

通過(guò)search字符串的方式來(lái)在地址欄中傳遞數(shù)據(jù),相對(duì)于來(lái)說(shuō)地址欄會(huì)暴露字段信息安全性較低,一般用于搜索相關(guān),它可以不定義就可以直接用

props 隱式傳遞

隱式傳遞,它一般用于敏感數(shù)據(jù)的傳遞,可以不用

cookie/storage來(lái)完成對(duì)于頁(yè)面?zhèn)鲄?/p>

1. 通過(guò)動(dòng)態(tài)路由參數(shù)傳遞

描述:

當(dāng)我們確定了某一個(gè)頁(yè)面需要根據(jù)唯一標(biāo)識(shí)來(lái)獲取詳情的時(shí)候,我們一般使用動(dòng)態(tài)路由傳遞參數(shù)。

要注意,通過(guò)這種方式傳遞數(shù)據(jù),動(dòng)態(tài)路由必須先定義后使用,并且獲取數(shù)據(jù)時(shí)需要唯一標(biāo)識(shí)。

使用:

news.js(這個(gè)文件是從 index.js 文件中抽取拆分出來(lái)的,最終要被引入到 insex.js 文件中):

import News from '@/views/News'
import Detail from '@/views/Detail'
const routes = [
  {
    path: '/news',
    component: News,
  },
  {
    // 通過(guò)動(dòng)態(tài)路由參數(shù)來(lái)完成頁(yè)面數(shù)據(jù)的傳遞
    path: '/news/:id',
    component: Detail,
  },
]
export default routes

index.js:

import Vue from 'vue'
import VueRouter from 'vue-router'
import news from './routes/news'
// 以插件的方式添加
Vue.use(VueRouter)
// 實(shí)例化路由對(duì)象及配置路由表
const routes = [...news]
const router = new VueRouter({
  // 路由模式
  mode: 'history',
  // 路由規(guī)則表
  routes
})
export default router

new.json(虛擬新聞 mooc 數(shù)據(jù)):

[
  { "id": 1000, "title": "新聞1" },
  { "id": 2000, "title": "新聞2" },
  { "id": 3000, "title": "新聞3" }
]

new.vue(新聞頁(yè)):

<template>
  <div>
    <ul>
      <template v-if="news == null">
        <li>加載中...</li>
      </template>
      <template v-else>
        <li @click="godetail(item.id)" v-for="item in news" :key="item.id">{{ item.title }}</li>
      </template>
    </ul>
  </div>
</template>
<script>
import { get } from '@/utils/http'
export default {
  data() {
    return {
      news: null
    }
  },
  async created() {
    let ret = await get('/mock/news.json')
    this.news = ret
  },
  methods: {
    godetail(id) {
      this.$router.push(`/news/${id}`)
    }
  }
}
</script>
<style lang="scss" scoped></style>

detail.vue(新聞詳情頁(yè)):

<template>
  <div>
  </div>
</template>
<script>
export default {
  mounted() {
    // 獲取動(dòng)態(tài)路由參數(shù)數(shù)據(jù)
    console.log(this.$route.params)
  }
}
</script>
<style lang="scss" scoped></style>

2. 通過(guò)query字符串傳遞

new.vue(新聞頁(yè)):

<template>
  <div>
    <ul>
      <template v-if="news == null">
        <li>加載中...</li>
      </template>
      <template v-else>
        <li @click="godetail(item.id)" v-for="item in news" :key="item.id">{{ item.title }}</li>
      </template>
    </ul>
  </div>
</template>
<script>
import { get } from '@/utils/http'
export default {
  data() {
    return {
      news: null
    }
  },
  async created() {
    let ret = await get('/mock/news.json')
    this.news = ret
  },
  methods: {
    godetail(id) {
      this.$router.push(`/news/${id}?kw=abc`)
    }
  }
}
</script>
<style lang="scss" scoped></style>

detail.vue(新聞詳情頁(yè)):

<template>
  <div>
  </div>
</template>
<script>
export default {
  mounted() {
    // 獲取query字符串
    console.log(this.$route.query)
  }
}
</script>
<style lang="scss" scoped></style>

3. props 隱式傳遞

news.js:

import News from '@/views/News'
import Detail from '@/views/Detail'
const routes = [
  {
    path: '/news',
    component: News,
  },
  {
    // 通過(guò)動(dòng)態(tài)路由參數(shù)來(lái)完成頁(yè)面數(shù)據(jù)的傳遞
    path: '/news/:id',
    component: Detail,
    // 寫(xiě)法1:回調(diào)函數(shù)寫(xiě)法,可以書(shū)寫(xiě)業(yè)務(wù)邏輯
    // router它就是一個(gè)路由對(duì)象
    props: router => {
      let title = router.params.id == '1000' ? '爆炸新聞' : '一般新聞'
      return {
        state: 2000,
        title
      }
    },
    // 寫(xiě)法2:這是一種沒(méi)什么用的寫(xiě)法,沒(méi)有業(yè)務(wù)邏輯
    // props: { title: '1', state: 2 }
  }
]
export default routes

new.vue(新聞頁(yè)):

<template>
  <div>
    <ul>
      <template v-if="news == null">
        <li>加載中...</li>
      </template>
      <template v-else>
        <li @click="godetail(item.id)" v-for="item in news" :key="item.id">{{ item.title }}</li>
      </template>
    </ul>
  </div>
</template>
<script>
import { get } from '@/utils/http'
export default {
  data() {
    return {
      news: null
    }
  },
  async created() {
    let ret = await get('/mock/news.json')
    this.news = ret
  },
  methods: {
    godetail(id) {
      this.$router.push(`/news/${id}?kw=abc`)
    }
  }
}
</script>
<style lang="scss" scoped></style>

detail.vue(新聞詳情頁(yè)):

<template>
  <div>
    <h3>props: {{ state }} -- {{ title }}</h3>
  </div>
</template>
<script>
export default {
  props: ['state','title'],
}
</script>
<style lang="scss" scoped></style>

這種傳遞方式,可以敏感字段從地址欄中隱藏,不會(huì)暴露數(shù)據(jù),而且回調(diào)函數(shù)的寫(xiě)法可以書(shū)寫(xiě)業(yè)務(wù)邏輯。

這種方式可以做數(shù)據(jù)埋點(diǎn)(也叫用戶指紋),即隱蔽地收集用戶數(shù)據(jù)。用戶每次跳轉(zhuǎn)頁(yè)面都會(huì)觸發(fā) props 隱式傳遞,從而做到用戶數(shù)據(jù)的收集。收集到數(shù)據(jù)后,通過(guò)python、大數(shù)據(jù)等技術(shù),為用戶建模,生成人物畫(huà)像,由此可以進(jìn)行大數(shù)據(jù)推薦。

除了上面兩種寫(xiě)法以外,還有第三種寫(xiě)法

news.js:

import News from '@/views/News'
import Detail from '@/views/Detail'
const routes = [
  {
    path: '/news',
    component: News,
  },
  {
    // 通過(guò)動(dòng)態(tài)路由參數(shù)來(lái)完成頁(yè)面數(shù)據(jù)的傳遞
    path: '/news/:id',
    component: Detail,
    // 寫(xiě)法3:布爾類型
    // 布爾類型,一但使用,params動(dòng)態(tài)路由參數(shù)傳的數(shù)據(jù),可以通過(guò)props來(lái)獲取
    // 設(shè)置為布爾類型,可以簡(jiǎn)化,動(dòng)態(tài)路由參數(shù)的數(shù)據(jù)獲取
    props: true,
  }
]
export default routes

detail.vue(新聞詳情頁(yè)):

<template>
  <div>
    <!-- 直接通過(guò) props 獲取動(dòng)態(tài)路由參數(shù) -->
    <h3>props: {{ $route.params }} -- {{ id }}</h3>
  </div>
</template>
<script>
export default {
  props: ["id"],
};
</script>
<style lang="scss" scoped></style>

到此這篇關(guān)于Vue路由參數(shù)的傳遞與獲取方式詳細(xì)介紹的文章就介紹到這了,更多相關(guān)Vue路由傳參內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue傳值方式的十二種方法總結(jié)

    vue傳值方式的十二種方法總結(jié)

    這篇文章主要介紹了vue傳值方式的十二種方法總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • vue在install時(shí)node-sass@4.14.1?postinstall:node?scripts/build.js錯(cuò)誤解決

    vue在install時(shí)node-sass@4.14.1?postinstall:node?scripts/buil

    最近在npm install 的時(shí)候遇到了個(gè)問(wèn)題,所以給大家總結(jié)下,下面這篇文章主要給大家介紹了關(guān)于vue在install時(shí)node-sass@4.14.1?postinstall:node?scripts/build.js錯(cuò)誤的解決方法,需要的朋友可以參考下
    2023-05-05
  • vue項(xiàng)目實(shí)現(xiàn)按鈕可隨意移動(dòng)

    vue項(xiàng)目實(shí)現(xiàn)按鈕可隨意移動(dòng)

    這篇文章主要為大家詳細(xì)介紹了vue項(xiàng)目實(shí)現(xiàn)按鈕可隨意移動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Vue3.0 響應(yīng)式系統(tǒng)源碼逐行分析講解

    Vue3.0 響應(yīng)式系統(tǒng)源碼逐行分析講解

    這篇文章主要介紹了Vue3.0 響應(yīng)式系統(tǒng)源碼逐行分析講解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 一文詳解如何在Vue網(wǎng)站中實(shí)現(xiàn)多語(yǔ)言支持

    一文詳解如何在Vue網(wǎng)站中實(shí)現(xiàn)多語(yǔ)言支持

    在當(dāng)今全球化的互聯(lián)網(wǎng)環(huán)境中,為網(wǎng)站提供多語(yǔ)言支持已成為提升用戶體驗(yàn)和擴(kuò)大受眾范圍的關(guān)鍵策略,本文為大家介紹了如何在Vue網(wǎng)站中實(shí)現(xiàn)多語(yǔ)種支持功能,有需要的可以了解下
    2025-03-03
  • 一文搞懂Vue八大生命周期鉤子函數(shù)

    一文搞懂Vue八大生命周期鉤子函數(shù)

    這篇文章主要介紹了Vue八大生命周期鉤子函數(shù),生命周期函數(shù),就是在某個(gè)時(shí)刻會(huì)自動(dòng)執(zhí)行的函數(shù),本文帶你了解八大生命周期鉤子函數(shù),一起來(lái)看看吧
    2023-03-03
  • vue集成openlayers加載geojson并實(shí)現(xiàn)點(diǎn)擊彈窗教程

    vue集成openlayers加載geojson并實(shí)現(xiàn)點(diǎn)擊彈窗教程

    這篇文章主要為大家詳細(xì)介紹了vue集成openlayers加載geojson并實(shí)現(xiàn)點(diǎn)擊彈窗教程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • Vue父組件向子組件傳值以及data和props的區(qū)別詳解

    Vue父組件向子組件傳值以及data和props的區(qū)別詳解

    這篇文章主要介紹了Vue父組件向子組件傳值以及data和props的區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 教你如何開(kāi)發(fā)Vite3插件構(gòu)建Electron開(kāi)發(fā)環(huán)境

    教你如何開(kāi)發(fā)Vite3插件構(gòu)建Electron開(kāi)發(fā)環(huán)境

    這篇文章主要介紹了如何開(kāi)發(fā)Vite3插件構(gòu)建Electron開(kāi)發(fā)環(huán)境,文中給大家提到了如何讓 Vite 加載 Electron 的內(nèi)置模塊和 Node.js 的內(nèi)置模塊,需要的朋友可以參考下
    2022-11-11
  • vue通過(guò)vue-lazyload實(shí)現(xiàn)圖片懶加載的代碼詳解

    vue通過(guò)vue-lazyload實(shí)現(xiàn)圖片懶加載的代碼詳解

    這篇文章主要給大家介紹了vue通過(guò)vue-lazyload實(shí)現(xiàn)圖片懶加載,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-02-02

最新評(píng)論

江西省| 海林市| 丰县| 安丘市| 沙雅县| 乐清市| 文安县| 赫章县| 芜湖县| 平武县| 南投市| 卓资县| 外汇| 义乌市| 嵊泗县| 鹤山市| 峨山| 襄汾县| 克拉玛依市| 宁德市| 田东县| 明光市| 天全县| 云浮市| 滦平县| 额敏县| 江孜县| 洛隆县| 南郑县| 灯塔市| 临汾市| 凌云县| 怀远县| 万州区| 仙游县| 昌黎县| 三穗县| 东阳市| 南阳市| 安泽县| 尤溪县|