国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Vue中監(jiān)聽路由參數(shù)變化的幾種方式

這篇具有很好參考價值的文章主要介紹了Vue中監(jiān)聽路由參數(shù)變化的幾種方式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

一. 路由監(jiān)聽方式: 通過 watch 進行監(jiān)聽

1. 監(jiān)聽路由從哪兒來到哪兒去

2. 監(jiān)聽路由變化獲取新老路由信息

3.??監(jiān)聽路由變化觸發(fā)方法

4. 監(jiān)聽路由的 path 變化

5.?監(jiān)聽路由的 path 變化, 使用handler函數(shù)

6. 監(jiān)聽路由的 path 變化,觸發(fā)methods里的方法?

二. 路由監(jiān)聽方式:key是用來阻止“復(fù)用”的

三. 路由監(jiān)聽方式:通過vue-router的鉤子函數(shù)

1. 組件內(nèi)監(jiān)聽

2. 全局監(jiān)聽路由

?? 參考資料


Vue中監(jiān)聽路由參數(shù)變化的幾種方式,Vue.js學(xué)習(xí)筆記,javascript,vue路由監(jiān)聽,監(jiān)聽路由方法,Vue路由監(jiān)聽方式,vue監(jiān)聽

vue頁面開發(fā)中,我們經(jīng)常需要根據(jù)路由的變化去實現(xiàn)一些操作,那么vue.js中如何監(jiān)聽路由的變化呢?監(jiān)聽路由變化的方法都有哪些?這篇文章主要介紹了vue監(jiān)聽路由變化的幾種方式小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教?

——???vue中路由參數(shù)的變化監(jiān)聽,這里總結(jié)了常用的幾種方式 ??——

一. 路由監(jiān)聽方式: 通過 watch 進行監(jiān)聽

1. 監(jiān)聽路由從哪兒來到哪兒去

返回 “從哪里來” 和 “哪里去”?的路由信息

// 方式1、監(jiān)聽路由 $route 變化
export default{
? ? watch: { // 監(jiān)聽,當路由發(fā)生變化的時候執(zhí)行
? ? ? ? $route(to, from){
? ? ? ? ? ? console.log('路由變化了')
? ? ? ? ? ? console.log('當前頁面路由:' + to);
? ? ? ? ? ? console.log('上一個路由:' + from);
            // console.log(from.path); // 從哪來
            // console.log(to.path); // 到哪去
? ? ? ? },
? ? }
}

2. 監(jiān)聽路由變化獲取新老路由信息

返回 “新” “老” 路由信息

// 方式2、監(jiān)聽路由 $route 變化, 使用handler函數(shù)
export default{
? ? watch: { // 監(jiān)聽,當路由發(fā)生變化的時候執(zhí)行
? ? ? ? '$route': { // $route可以用引號,也可以不用引號
? ? ? ? ? ? handler(to, from){
? ? ? ? ? ? console.log('路由變化了')
? ? ? ? ? ? console.log('當前頁面路由:' + to); //新路由信息
? ? ? ? ? ? console.log('上一個路由:' + from); //老路由信息
? ? ? ? ? ? },
? ? ? ? ? ? deep: true, // 深度觀察監(jiān)聽
? ? ? ? ? ? immediate: true, // 第一次初始化渲染就可以監(jiān)聽到
? ? ? ? }
? ? }
}

如果我們需要在最初綁定值的時侯,也執(zhí)行監(jiān)聽函數(shù),則就需要用到immediate屬性。

?? 當設(shè)置immediate屬性為true時,無論值是否發(fā)生改變,時刻都會監(jiān)聽;

?? 當設(shè)置immediate屬性為false時,常規(guī)用法,只有值發(fā)生改變才會監(jiān)聽。

參考:Vue中watch(監(jiān)聽器)的用法詳解(通俗易懂,簡單明了)

3.??監(jiān)聽路由變化觸發(fā)方法

// 方式3、監(jiān)聽路由 $route 變化,觸發(fā)methods里的方法
export default{
  watch: { // 監(jiān)聽,當路由發(fā)生變化的時候執(zhí)行
    '$route':'getPath'
  },
  methods: {
    getPath(){
    console.log(this.$route.path);
    }
 
  }

}

4. 監(jiān)聽路由的 path 變化

// 方式4、監(jiān)聽路由的 path 變化
export default{
? ? watch: { // 監(jiān)聽,當路由發(fā)生變化的時候執(zhí)行
? ? ? ? '$route.path'(toPath, fromPath){
? ? ? ? ? ? console.log('路由變化了')
? ? ? ? ? ? console.log('當前頁面路由地址:' + toPath)
? ? ? ? ? ? console.log('上一個路由地址:' + fromPath)
? ? ? ? ?},
? ? }
}

5.?監(jiān)聽路由的 path 變化, 使用handler函數(shù)

// 方式5、監(jiān)聽路由的 path 變化, 使用handler函數(shù)
export default{
? ? watch: { // 監(jiān)聽,當路由發(fā)生變化的時候執(zhí)行
? ? ? ? '$route.path': {
? ? ? ? ? ? handler(toPath, fromPath){
? ? ? ? ? ? ? ? console.log('路由變化了')
? ? ? ? ? ? ? ? console.log('當前頁面路由地址:' + toPath)
? ? ? ? ? ? ? ? console.log('上一個路由地址:' + fromPath)
? ? ? ? ? ? },
? ? ? ? ? ? deep: true, // 深度監(jiān)聽
? ? ? ? ? ? immediate: true, // 第一次初始化渲染就可以監(jiān)聽到
? ? ? ? }
? ? }
}

6. 監(jiān)聽路由的 path 變化,觸發(fā)methods里的方法?

// 方式6、監(jiān)聽路由的 path 變化,觸發(fā)methods里的方法
export default{
? ? watch: { // 監(jiān)聽,當路由發(fā)生變化的時候執(zhí)行
? ? ? ? '$route.path': 'getpath'
? ? },
? ? methods: {
? ? ? ? getpath(){
? ? ? ? ? ? console.log('路由變化了')
? ? ? ? }
? ? }
}

二. 路由監(jiān)聽方式:key是用來阻止“復(fù)用”的

Vue 為你提供了一種方式來聲明“這兩個元素是完全獨立的——不要復(fù)用它們”。只需添加一個具有唯一值的 key 屬性即可(Vue文檔原話)

<router-view :key="key"></router-view>
computed: {
  key(){
    return this.$route.name !== undefined? this.$route.name +new Date(): this.$route +new Date()
  }
}

使用computed屬性和Date()可以保證每一次的key都是不同的,這樣就可以如愿刷新數(shù)據(jù)了。

三. 路由監(jiān)聽方式:通過vue-router的鉤子函數(shù)

1. 組件內(nèi)監(jiān)聽

? 如何在組件中監(jiān)聽路由參數(shù)的變化??

當使用路由參數(shù)時,例如從 /user/foo 導(dǎo)航到 /user/bar,原來的組件實例會被復(fù)用。

因為兩個路由都渲染同個組件,比起銷毀再創(chuàng)建,復(fù)用則顯得更加高效。不過,這也意味著組件的生命周期鉤子不會再被調(diào)用。

那如果我們要在組件中監(jiān)聽路由參數(shù)的變化,就只能通過watch (監(jiān)測變化) $route 對象,或使用 beforeRouteUpdate 的組件內(nèi)守衛(wèi)。

方式一: 通過watch 監(jiān)聽 $route
?

const User = {
??template: '...',
??watch: {
??? $route(to, from) {
??? ? // 對路由變化作出響應(yīng)...
??? }
??}
}

方式二:通過組件內(nèi)的導(dǎo)航守衛(wèi)

beforeRouteUpdate ,(和created(){}生命周期函數(shù)同級別)

const User = {
  template: '...',
  beforeRouteUpdate(to, from, next) {
    // react to route changes...
    // don't forget to call next()
  }
}

? 通過vue-router的組件內(nèi)鉤子函數(shù)beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave進行監(jiān)聽

示例1:

export default{
    // 監(jiān)聽,當路由發(fā)生變化的時候執(zhí)行
? ? beforeRouteEnter(to, from, next){
      // 在渲染該組件的對應(yīng)路由被確認前調(diào)用這個鉤子,
      // 不!能!獲取組件實例 `this`
      // 因為當鉤子執(zhí)行前(也就是說,我們使用的是進入路由之前的鉤子),那時組件實例還沒被創(chuàng)建,所以不能獲取this,自然這里就不能使用this
? ? ? ? console.log(this) // 結(jié)果為:undefined
? ? ? ? console.log('beforeRouteEnter')
? ? ? ? next()
? ? },
    // 監(jiān)聽,當路由發(fā)生變化的時候執(zhí)行
? ? beforeRouteUpdate(to, from, next){
      // 在當前路由改變,但是該組件被復(fù)用時調(diào)用
      // 舉例來說,對于一個帶有動態(tài)參數(shù)的路徑 /foo/:id,在 /foo/1 和 /foo/2 之間跳轉(zhuǎn)的時候,
      // 由于會渲染同樣的 Foo 組件,因此組件實例會被復(fù)用。而這個鉤子就會在這個情況下被調(diào)用。
      // 可以訪問組件實例 `this`
? ? ? ? console.log(this) // 可以訪問this
? ? ? ? console.log('beforeRouteUpdate')
? ? ? ? next()
? ? },
    // 監(jiān)聽,當路由發(fā)生變化的時候執(zhí)行
? ? beforeRouteLeave(to, from, next){
? ? ? ? // 導(dǎo)航離開當前路由的時候被調(diào)用,this可以被訪問到
? ? ? ? console.log(this) // 可以訪問組件實例 `this`
? ? ? ? console.log('beforeRouteLeave')
? ? ? ? next()
? ? },
}

示例2:?

<script>
  // 引入 Tabbar組件
  import mTabbar from './components/Tabbar'
  import mTabbarItem from './components/TabbarItem'
  // 引入 vuex 的兩個方法
  import {mapGetters, mapActions} from 'vuex'
  
  export default {
    name: 'app',
    // 計算屬性
    computed:mapGetters([
      // 從 getters 中獲取值
      'tabbarShow'
    ]),

    // 監(jiān)聽,當路由發(fā)生變化的時候執(zhí)行
    watch:{
      $route(to,from){
        if(to.path == '/' || to.path == '/Prisoner' || to.path == '/Goods' ||
         to.path == '/Time' || to.path == '/Mine'){
          /**

           * $store來自Store對象

           * dispatch 向 actions 發(fā)起請求

           */
          this.$store.dispatch('showTabBar');
        }else{
          this.$store.dispatch('hideTabBar');
        }
      }
    },

    beforeRouteEnter (to, from, next) {
      // 在渲染該組件的對應(yīng)路由被 confirm 前調(diào)用
      // 不!能!獲取組件實例 `this`
      // 因為當鉤子執(zhí)行前,組件實例還沒被創(chuàng)建
    },

    beforeRouteUpdate (to, from, next) {
      // 在當前路由改變,但是該組件被復(fù)用時調(diào)用
      // 舉例來說,對于一個帶有動態(tài)參數(shù)的路徑 /foo/:id,在 /foo/1 和 /foo/2 之間跳轉(zhuǎn)的時候,
      // 由于會渲染同樣的 Foo 組件,因此組件實例會被復(fù)用。而這個鉤子就會在這個情況下被調(diào)用。
      // 可以訪問組件實例 `this`
    },

    beforeRouteLeave (to, from, next) {
      // 導(dǎo)航離開該組件的對應(yīng)路由時調(diào)用
      // 可以訪問組件實例 `this`
    },

    components:{
      mTabbar,
      mTabbarItem
    },

    data() {
      return {
        select:"Building"
      }
    }
  }
</script>

2. 全局監(jiān)聽路由

? 通過vue-router的全局鉤子函數(shù)beforeEach——this.$router.beforeEach

// 方式1、在App.vue的create中進行全局路由監(jiān)聽
export default ?{
? ? name: ?'App',
? ? created() {
? ? ? ? this.$router.beforeEach((to, from, next) => {
? ? ? ? ? ? console.log(to);
? ? ? ? ? ? console.log(from);
? ? ? ? ? ? next()
? ? ? ? })
? ? }
}
// 方式2、在路由文件(/router/index.js)中進行全局路由監(jiān)聽
import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)

let routes = [
? ? ?{
? ? ? ?path: '/login',
? ? ? ?component: resolve => require(['@/views/login'], resolve),
? ? ?},
]

let router = new Router({
? ? mode: 'history', // 去掉 url 中的 #
? ? scrollBehavior: () => ({ y: 0 }),
? ? base: process.env.VUE_APP_BASE_DOMAIN,
? ? routes,
})

router.beforeEach((to, from, next) => {
? ? console.log(to);
? ? console.log(from);
? ? next()
})

export {
? ? routes
? ? router
}

?? 參考資料

  • Vue監(jiān)聽路由變化的幾種方式小結(jié)
  • Vue.js怎么監(jiān)聽路由變化
  • Vue路由監(jiān)聽的方式
  • Vue幾種監(jiān)聽路由變化的方式

Vue中監(jiān)聽路由參數(shù)變化的幾種方式,Vue.js學(xué)習(xí)筆記,javascript,vue路由監(jiān)聽,監(jiān)聽路由方法,Vue路由監(jiān)聽方式,vue監(jiān)聽文章來源地址http://www.zghlxwxcb.cn/news/detail-632408.html

到了這里,關(guān)于Vue中監(jiān)聽路由參數(shù)變化的幾種方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【Vue3】路由傳參的幾種方式

    【Vue3】路由傳參的幾種方式

    路由導(dǎo)航有兩種方式,分別是:聲明式導(dǎo)航 和 編程式導(dǎo)航 參數(shù)分為query參數(shù)和params參數(shù)兩種 1.傳參 在路由路徑后直接拼接 ?參數(shù)名:參數(shù)值 ,多組參數(shù)間使用 分隔。 如果參數(shù)值為變量,需要使用模版字符串。 2.接收與使用 1.傳參 to不再傳遞字符,而是傳一個對象,由于參數(shù)

    2024年02月21日
    瀏覽(26)
  • 微信小程序 - 實時監(jiān)聽路由發(fā)生變化,當頁面跳轉(zhuǎn)發(fā)生變化時執(zhí)行一段代碼或函數(shù),可獲取目標頁面的路徑 URL 、路由參數(shù)、跳轉(zhuǎn)方式、該頁面的配置等(支持 “全局“ 和 “局部“ 兩種寫法)

    微信小程序 - 實時監(jiān)聽路由發(fā)生變化,當頁面跳轉(zhuǎn)發(fā)生變化時執(zhí)行一段代碼或函數(shù),可獲取目標頁面的路徑 URL 、路由參數(shù)、跳轉(zhuǎn)方式、該頁面的配置等(支持 “全局“ 和 “局部“ 兩種寫法)

    有時候,我們需要實時監(jiān)聽頁面的跳轉(zhuǎn),并且拿到路由地址及參數(shù)。 實現(xiàn)了 在微信小程序開發(fā)中,每次切換頁面時都觸發(fā)一個函數(shù),當路由發(fā)生變化后執(zhí)行一段代碼, 簡單來說,相當于一個 “路由監(jiān)聽器”,當頁面跳轉(zhuǎn)時立即觸發(fā),然后拿到路由的 URL 和攜帶的參數(shù),進行

    2024年02月12日
    瀏覽(57)
  • vue3監(jiān)聽路由的變化

    vue3監(jiān)聽路由的變化

    可以使用監(jiān)聽 router.currentRoute.value 的值,,來監(jiān)聽路由的變化。 引入: setup使用 : 控制臺輸出的值 newValue : 如果我們只需要監(jiān)聽當前路由 name 的變化,就可以這么監(jiān)聽 router.currentRoute.value.name immediate:true //true 就表示會立即執(zhí)行。(watch默認綁定,頁面首次加載時,是不會執(zhí)行

    2024年02月12日
    瀏覽(21)
  • Vue,js 監(jiān)聽window窗口尺寸變化

    1.監(jiān)聽window窗口變化 VueJs 監(jiān)聽 window.resize 方法,同時窗口拉伸時會頻繁觸發(fā)resize函數(shù),導(dǎo)致頁面性能 卡頓 ,可以搭配setTimeout來提升性能 在mounted中掛載resize方法 watch?監(jiān)聽 data中或props傳遞的數(shù)據(jù)

    2024年02月11日
    瀏覽(45)
  • springboot接收參數(shù)的幾種方式

    springboot接收參數(shù)的幾種方式

    傳參格式:?號傳參,在地址欄上加參數(shù) 傳參格式:請求體傳參 form-data的請求是在body中,為key=value格式,同時可以傳文件,Content-Type為multipart/form-data,后端可以用@RequestParam接收。 json傳參也是在body當中,只不過json是一種數(shù)據(jù)格式,后端可以用@RequestBody接收。 地址欄傳參,

    2024年02月10日
    瀏覽(23)
  • springboot接收前端參數(shù)的幾種方式

    springboot接收前端參數(shù)的幾種方式

    目錄 第一種:直接在方法中指定參數(shù) 第二種:使用@requesrParam注解 第三種方法:基于@pathVariable? 第四種方法:基于@ResquestBody 在開始之前,我們需要一下準備工作,創(chuàng)建數(shù)據(jù)庫,springboot工程,添加依賴,配置文件,使用的技術(shù)有mybatisplus,springboot,maven,mysql。 首先,數(shù)據(jù)庫

    2024年02月07日
    瀏覽(23)
  • 常見路由跳轉(zhuǎn)的幾種方式

    常見路由跳轉(zhuǎn)的幾種方式

    常見的路由跳轉(zhuǎn)有以下四種: 1. router-link to=\\\"跳轉(zhuǎn)路徑\\\"? 也可,如 2. this.$router.push() 跳轉(zhuǎn)到指定的url,并在history中添加記錄(即,點擊回退,會退回上一個頁面) 。 html中,如: 3. this.$router.replace() 跳轉(zhuǎn)到指定的url, 但不會在history記錄(即,點擊回退 退回到上上個頁) 4

    2024年02月10日
    瀏覽(29)
  • opencv實現(xiàn)圖像去畸變——幾種實現(xiàn)方式(含完整代碼)&&效果對比圖&&詳細參數(shù)說明&&核心參數(shù)變化對應(yīng)變化效果圖&&常見問題

    opencv實現(xiàn)圖像去畸變——幾種實現(xiàn)方式(含完整代碼)&&效果對比圖&&詳細參數(shù)說明&&核心參數(shù)變化對應(yīng)變化效果圖&&常見問題

    以下介紹下opencv實現(xiàn)圖像去畸變的幾種方式以及詳細參數(shù)說明,含項目案例,含擴展的相關(guān)知識 ① cv::fisheye::initUndistortRectifyMap?和 ② cv::initUndistortRectifyMap?都是?OpenCV?庫中的函數(shù),用于攝像機的畸變校正和圖像的矯正。二者的區(qū)別在于,cv::fisheye::initUndistortRectifyMap?適用于

    2024年02月10日
    瀏覽(301)
  • 小程序跨頁面?zhèn)鬟f參數(shù)的幾種方式

    當我們在開發(fā)小程序時,經(jīng)常會遇到需要在不同頁面之間傳遞數(shù)據(jù)的情況。為了實現(xiàn)頁面間的數(shù)據(jù)傳遞,小程序提供了多種方法。下面將介紹幾種常用的傳遞數(shù)據(jù)的方法。 URL參數(shù)傳遞:這是一種簡單直接的傳遞數(shù)據(jù)的方式。在跳轉(zhuǎn)頁面時,可以在URL中添加參數(shù)來傳遞數(shù)據(jù)。在

    2024年02月08日
    瀏覽(33)
  • 【SpringBoot系列】接收前端參數(shù)的幾種方式

    【SpringBoot系列】接收前端參數(shù)的幾種方式

    前言 在現(xiàn)代Web開發(fā)中,前后端分離的架構(gòu)已經(jīng)成為主流。前端負責(zé)展示頁面和用戶交互,而后端則負責(zé)處理業(yè)務(wù)邏輯和數(shù)據(jù)存儲。在這種架構(gòu)下,前端需要將用戶輸入的數(shù)據(jù)發(fā)送給后端進行處理。而Spring Boot作為一種快速開發(fā)框架,提供了多種方式來接收前端數(shù)據(jù)。 本文將介

    2024年02月05日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包