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

Vue獲取路由信息的8種方法詳解

 更新時間:2026年01月14日 08:37:29   作者:北辰alk  
本文詳細介紹了在Vue應用中獲取路由信息的8種方法,包括$route對象、useRouteHook、路由守衛(wèi)等,并提供了不同場景下的推薦方案和實戰(zhàn)案例,需要的朋友可以參考下

在 Vue 應用中,獲取當前路由信息是開發(fā)中的常見需求。本文將全面解析從基礎到高級的各種獲取方法,并幫助你選擇最佳實踐。

一、路由信息全景圖

在深入具體方法前,先了解 Vue Router 提供的完整路由信息結構:

// 路由信息對象結構
{
  path: '/user/123/profile?tab=info',    // 完整路徑
  fullPath: '/user/123/profile?tab=info&token=abc',
  name: 'user-profile',                   // 命名路由名稱
  params: {                               // 動態(tài)路徑參數(shù)
    id: '123'
  },
  query: {                                // 查詢參數(shù)
    tab: 'info',
    token: 'abc'
  },
  hash: '#section-2',                     // 哈希片段
  meta: {                                 // 路由元信息
    requiresAuth: true,
    title: '用戶資料'
  },
  matched: [                              // 匹配的路由記錄數(shù)組
    { path: '/user', component: UserLayout, meta: {...} },
    { path: '/user/:id', component: UserContainer, meta: {...} },
    { path: '/user/:id/profile', component: UserProfile, meta: {...} }
  ]
}

二、8 種獲取路由信息的方法

方法 1:$route對象(最常用)

<template>
  <div>
    <h1>用戶詳情頁</h1>
    <p>用戶ID: {{ $route.params.id }}</p>
    <p>當前標簽: {{ $route.query.tab || 'default' }}</p>
    <p>需要認證: {{ $route.meta.requiresAuth ? '是' : '否' }}</p>
  </div>
</template>

<script>
export default {
  created() {
    // 訪問路由信息
    console.log('路徑:', this.$route.path)
    console.log('參數(shù):', this.$route.params)
    console.log('查詢:', this.$route.query)
    console.log('哈希:', this.$route.hash)
    console.log('元信息:', this.$route.meta)
    
    // 獲取完整的匹配記錄
    const matchedRoutes = this.$route.matched
    matchedRoutes.forEach(route => {
      console.log('匹配的路由:', route.path, route.meta)
    })
  }
}
</script>

特點:

  • ? 簡單直接,無需導入
  • ? 響應式變化(路由變化時自動更新)
  • ? 在模板和腳本中都能使用

方法 2:useRouteHook(Vue 3 Composition API)

<script setup>
import { useRoute } from 'vue-router'
import { watch, computed } from 'vue'

// 獲取路由實例
const route = useRoute()

// 直接使用
console.log('當前路由路徑:', route.path)
console.log('路由參數(shù):', route.params)

// 計算屬性基于路由
const userId = computed(() => route.params.id)
const isEditMode = computed(() => route.query.mode === 'edit')

// 監(jiān)聽路由變化
watch(
  () => route.params.id,
  (newId, oldId) => {
    console.log(`用戶ID從 ${oldId} 變?yōu)?${newId}`)
    loadUserData(newId)
  }
)

// 監(jiān)聽多個路由屬性
watch(
  () => ({
    id: route.params.id,
    tab: route.query.tab
  }),
  ({ id, tab }) => {
    console.log(`ID: ${id}, Tab: ${tab}`)
  },
  { deep: true }
)
</script>

<template>
  <div>
    <h1>用戶 {{ userId }} 的資料</h1>
    <nav>
      <router-link :to="{ query: { tab: 'info' } }" 
                   :class="{ active: route.query.tab === 'info' }">
        基本信息
      </router-link>
      <router-link :to="{ query: { tab: 'posts' } }"
                   :class="{ active: route.query.tab === 'posts' }">
        動態(tài)
      </router-link>
    </nav>
  </div>
</template>

方法 3:路由守衛(wèi)中獲取

// 全局守衛(wèi)
router.beforeEach((to, from, next) => {
  // to: 即將進入的路由
  // from: 當前導航正要離開的路由
  
  console.log('前往:', to.path)
  console.log('來自:', from.path)
  console.log('需要認證:', to.meta.requiresAuth)
  
  // 權限檢查
  if (to.meta.requiresAuth && !isAuthenticated()) {
    next({
      path: '/login',
      query: { redirect: to.fullPath } // 保存目標路徑
    })
  } else {
    next()
  }
})

// 組件內(nèi)守衛(wèi)
export default {
  beforeRouteEnter(to, from, next) {
    // 不能訪問 this,因為組件實例還沒創(chuàng)建
    console.log('進入前:', to.params.id)
    
    // 可以通過 next 回調(diào)訪問實例
    next(vm => {
      vm.initialize(to.params.id)
    })
  },
  
  beforeRouteUpdate(to, from, next) {
    // 可以訪問 this
    console.log('路由更新:', to.params.id)
    this.loadData(to.params.id)
    next()
  },
  
  beforeRouteLeave(to, from, next) {
    // 離開前的確認
    if (this.hasUnsavedChanges) {
      const answer = window.confirm('有未保存的更改,確定離開嗎?')
      if (!answer) {
        next(false) // 取消導航
        return
      }
    }
    next()
  }
}

方法 4:$router對象獲取當前路由

export default {
  methods: {
    getCurrentRouteInfo() {
      // 獲取當前路由信息(非響應式)
      const currentRoute = this.$router.currentRoute
      
      // Vue Router 4 中的變化
      // const currentRoute = this.$router.currentRoute.value
      
      console.log('當前路由對象:', currentRoute)
      
      // 編程式導航時獲取
      this.$router.push({
        path: '/user/456',
        query: { from: currentRoute.fullPath } // 攜帶來源信息
      })
    },
    
    // 檢查是否在特定路由
    isActiveRoute(routeName) {
      return this.$route.name === routeName
    },
    
    // 檢查路徑匹配
    isPathMatch(pattern) {
      return this.$route.path.startsWith(pattern)
    }
  },
  
  computed: {
    // 基于當前路由的復雜計算
    breadcrumbs() {
      return this.$route.matched.map(route => ({
        name: route.meta?.breadcrumb || route.name,
        path: route.path
      }))
    },
    
    // 獲取嵌套路由參數(shù)
    nestedParams() {
      const params = {}
      this.$route.matched.forEach(route => {
        Object.assign(params, route.params)
      })
      return params
    }
  }
}

方法 5:通過 Props 傳遞路由參數(shù)(推薦)

// 路由配置
const routes = [
  {
    path: '/user/:id',
    component: UserDetail,
    props: true // 將 params 作為 props 傳遞
  },
  {
    path: '/search',
    component: SearchResults,
    props: route => ({ // 自定義 props 函數(shù)
      query: route.query.q,
      page: parseInt(route.query.page) || 1,
      sort: route.query.sort || 'relevance'
    })
  }
]

// 組件中使用
export default {
  props: {
    // 從路由 params 自動注入
    id: {
      type: [String, Number],
      required: true
    },
    // 從自定義 props 函數(shù)注入
    query: String,
    page: Number,
    sort: String
  },
  
  watch: {
    // props 變化時響應
    id(newId) {
      this.loadUser(newId)
    },
    query(newQuery) {
      this.performSearch(newQuery)
    }
  },
  
  created() {
    // 直接使用 props,無需訪問 $route
    console.log('用戶ID:', this.id)
    console.log('搜索詞:', this.query)
  }
}

方法 6:使用 Vuex/Pinia 管理路由狀態(tài)

// store/modules/route.js (Vuex)
const state = {
  currentRoute: null,
  previousRoute: null
}

const mutations = {
  SET_CURRENT_ROUTE(state, route) {
    state.previousRoute = state.currentRoute
    state.currentRoute = {
      path: route.path,
      name: route.name,
      params: { ...route.params },
      query: { ...route.query },
      meta: { ...route.meta }
    }
  }
}

// 在全局守衛(wèi)中同步
router.afterEach((to, from) => {
  store.commit('SET_CURRENT_ROUTE', to)
})

// 組件中使用
export default {
  computed: {
    ...mapState({
      currentRoute: state => state.route.currentRoute,
      previousRoute: state => state.route.previousRoute
    }),
    
    // 基于路由狀態(tài)的衍生數(shù)據(jù)
    pageTitle() {
      const route = this.currentRoute
      return route?.meta?.title || '默認標題'
    }
  }
}
// Pinia 版本(Vue 3)
import { defineStore } from 'pinia'

export const useRouteStore = defineStore('route', {
  state: () => ({
    current: null,
    history: []
  }),
  
  actions: {
    updateRoute(route) {
      this.history.push({
        ...this.current,
        timestamp: new Date().toISOString()
      })
      
      // 只保留最近10條記錄
      if (this.history.length > 10) {
        this.history = this.history.slice(-10)
      }
      
      this.current = {
        path: route.path,
        fullPath: route.fullPath,
        name: route.name,
        params: { ...route.params },
        query: { ...route.query },
        meta: { ...route.meta }
      }
    }
  },
  
  getters: {
    // 獲取路由參數(shù)
    routeParam: (state) => (key) => {
      return state.current?.params?.[key]
    },
    
    // 獲取查詢參數(shù)
    routeQuery: (state) => (key) => {
      return state.current?.query?.[key]
    },
    
    // 檢查是否在特定路由
    isRoute: (state) => (routeName) => {
      return state.current?.name === routeName
    }
  }
})

方法 7:自定義路由混合/組合函數(shù)

// 自定義混合(Vue 2)
export const routeMixin = {
  computed: {
    // 便捷訪問器
    $routeParams() {
      return this.$route.params || {}
    },
    
    $routeQuery() {
      return this.$route.query || {}
    },
    
    $routeMeta() {
      return this.$route.meta || {}
    },
    
    // 常用路由檢查
    $isHomePage() {
      return this.$route.path === '/'
    },
    
    $hasRouteParam(param) {
      return param in this.$route.params
    },
    
    $getRouteParam(param, defaultValue = null) {
      return this.$route.params[param] || defaultValue
    }
  },
  
  methods: {
    // 路由操作輔助方法
    $updateQuery(newQuery) {
      this.$router.push({
        ...this.$route,
        query: {
          ...this.$route.query,
          ...newQuery
        }
      })
    },
    
    $removeQueryParam(key) {
      const query = { ...this.$route.query }
      delete query[key]
      this.$router.push({ query })
    }
  }
}

// 在組件中使用
export default {
  mixins: [routeMixin],
  
  created() {
    console.log('用戶ID:', this.$getRouteParam('id', 'default'))
    console.log('是否首頁:', this.$isHomePage)
    
    // 更新查詢參數(shù)
    this.$updateQuery({ page: 2, sort: 'name' })
  }
}
// Vue 3 Composition API 版本
import { computed } from 'vue'
import { useRoute, useRouter } from 'vue-router'

export function useRouteHelpers() {
  const route = useRoute()
  const router = useRouter()
  
  const routeParams = computed(() => route.params || {})
  const routeQuery = computed(() => route.query || {})
  const routeMeta = computed(() => route.meta || {})
  
  const isHomePage = computed(() => route.path === '/')
  
  function getRouteParam(param, defaultValue = null) {
    return route.params[param] || defaultValue
  }
  
  function updateQuery(newQuery) {
    router.push({
      ...route,
      query: {
        ...route.query,
        ...newQuery
      }
    })
  }
  
  function removeQueryParam(key) {
    const query = { ...route.query }
    delete query[key]
    router.push({ query })
  }
  
  return {
    routeParams,
    routeQuery,
    routeMeta,
    isHomePage,
    getRouteParam,
    updateQuery,
    removeQueryParam
  }
}

// 在組件中使用
<script setup>
const {
  routeParams,
  routeQuery,
  getRouteParam,
  updateQuery
} = useRouteHelpers()

const userId = getRouteParam('id')
const currentTab = computed(() => routeQuery.tab || 'info')

function changeTab(tab) {
  updateQuery({ tab })
}
</script>

方法 8:訪問 Router 實例的匹配器

export default {
  methods: {
    // 獲取所有路由配置
    getAllRoutes() {
      return this.$router.options.routes
    },
    
    // 通過名稱查找路由
    findRouteByName(name) {
      return this.$router.options.routes.find(route => route.name === name)
    },
    
    // 檢查路徑是否匹配路由
    matchRoute(path) {
      // Vue Router 3
      const matched = this.$router.match(path)
      return matched.matched.length > 0
      
      // Vue Router 4
      // const matched = this.$router.resolve(path)
      // return matched.matched.length > 0
    },
    
    // 生成路徑
    generatePath(routeName, params = {}) {
      const route = this.findRouteByName(routeName)
      if (!route) return null
      
      // 簡單的路徑生成(實際項目建議使用 path-to-regexp)
      let path = route.path
      Object.keys(params).forEach(key => {
        path = path.replace(`:${key}`, params[key])
      })
      return path
    }
  }
}

三、不同場景的推薦方案

場景決策表

場景推薦方案理由
簡單組件中獲取參數(shù)$route.params.id最簡單直接
Vue 3 Composition APIuseRoute() Hook響應式、類型安全
組件復用/測試友好Props 傳遞解耦路由依賴
復雜應用狀態(tài)管理Vuex/Pinia 存儲全局訪問、歷史記錄
多個組件共享邏輯自定義混合/組合函數(shù)代碼復用
路由守衛(wèi)/攔截器守衛(wèi)參數(shù) (to, from)官方標準方式
需要路由配置信息$router.options.routes訪問完整配置

性能優(yōu)化建議

// ? 避免在模板中頻繁訪問深層屬性
<template>
  <div>
    <!-- 每次渲染都會計算 -->
    {{ $route.params.user.details.profile.name }}
  </div>
</template>

// ? 使用計算屬性緩存
<template>
  <div>{{ userName }}</div>
</template>

<script>
export default {
  computed: {
    userName() {
      return this.$route.params.user?.details?.profile?.name || '未知'
    },
    
    // 批量提取路由信息
    routeInfo() {
      const { params, query, meta } = this.$route
      return {
        userId: params.id,
        tab: query.tab,
        requiresAuth: meta.requiresAuth
      }
    }
  }
}
</script>

響應式監(jiān)聽最佳實踐

export default {
  watch: {
    // 監(jiān)聽特定參數(shù)變化
    '$route.params.id': {
      handler(newId, oldId) {
        if (newId !== oldId) {
          this.loadUserData(newId)
        }
      },
      immediate: true
    },
    
    // 監(jiān)聽查詢參數(shù)變化
    '$route.query': {
      handler(newQuery) {
        this.applyFilters(newQuery)
      },
      deep: true // 深度監(jiān)聽對象變化
    }
  },
  
  // 或者使用 beforeRouteUpdate 守衛(wèi)
  beforeRouteUpdate(to, from, next) {
    // 只處理需要的變化
    if (to.params.id !== from.params.id) {
      this.loadUserData(to.params.id)
    }
    next()
  }
}

四、實戰(zhàn)案例:用戶管理系統(tǒng)

<template>
  <div class="user-management">
    <!-- 面包屑導航 -->
    <nav class="breadcrumbs">
      <router-link v-for="item in breadcrumbs" 
                   :key="item.path"
                   :to="item.path">
        {{ item.title }}
      </router-link>
    </nav>
    
    <!-- 用戶詳情 -->
    <div v-if="$route.name === 'user-detail'">
      <h2>用戶詳情 - {{ userName }}</h2>
      <UserTabs :active-tab="activeTab" @change-tab="changeTab" />
      <router-view />
    </div>
    
    <!-- 用戶列表 -->
    <div v-else-if="$route.name === 'user-list'">
      <UserList :filters="routeFilters" />
    </div>
  </div>
</template>

<script>
import { mapState } from 'vuex'

export default {
  computed: {
    ...mapState(['currentUser']),
    
    // 從路由獲取信息
    userId() {
      return this.$route.params.userId
    },
    
    activeTab() {
      return this.$route.query.tab || 'profile'
    },
    
    routeFilters() {
      return {
        department: this.$route.query.dept,
        role: this.$route.query.role,
        status: this.$route.query.status || 'active'
      }
    },
    
    // 面包屑導航
    breadcrumbs() {
      const crumbs = []
      const { matched } = this.$route
      
      matched.forEach((route, index) => {
        const { meta, path } = route
        
        // 生成面包屑項
        if (meta?.breadcrumb) {
          crumbs.push({
            title: meta.breadcrumb,
            path: this.generateBreadcrumbPath(matched.slice(0, index + 1))
          })
        }
      })
      
      return crumbs
    },
    
    // 用戶名(需要根據(jù)ID查找)
    userName() {
      const user = this.$store.getters.getUserById(this.userId)
      return user ? user.name : '加載中...'
    }
  },
  
  watch: {
    // 監(jiān)聽用戶ID變化
    userId(newId) {
      if (newId) {
        this.$store.dispatch('fetchUser', newId)
      }
    },
    
    // 監(jiān)聽標簽頁變化
    activeTab(newTab) {
      this.updateDocumentTitle(newTab)
    }
  },
  
  created() {
    // 初始化加載
    if (this.userId) {
      this.$store.dispatch('fetchUser', this.userId)
    }
    
    // 設置頁面標題
    this.updateDocumentTitle()
    
    // 記錄頁面訪問
    this.logPageView()
  },
  
  methods: {
    changeTab(tab) {
      // 更新查詢參數(shù)
      this.$router.push({
        ...this.$route,
        query: { ...this.$route.query, tab }
      })
    },
    
    generateBreadcrumbPath(routes) {
      // 生成完整路徑
      return routes.map(r => r.path).join('')
    },
    
    updateDocumentTitle(tab = null) {
      const tabName = tab || this.activeTab
      const title = this.$route.meta.title || '用戶管理'
      document.title = `${title} - ${this.getTabDisplayName(tabName)}`
    },
    
    logPageView() {
      // 發(fā)送分析數(shù)據(jù)
      analytics.track('page_view', {
        path: this.$route.path,
        name: this.$route.name,
        params: this.$route.params
      })
    }
  }
}
</script>

五、常見問題與解決方案

問題1:路由信息延遲獲取

// ? 可能在 created 中獲取不到完整的 $route
created() {
  console.log(this.$route.params.id) // 可能為 undefined
}

// ? 使用 nextTick 確保 DOM 和路由都就緒
created() {
  this.$nextTick(() => {
    console.log('路由信息:', this.$route)
    this.loadData(this.$route.params.id)
  })
}

// ? 或者使用 watch + immediate
watch: {
  '$route.params.id': {
    handler(id) {
      if (id) this.loadData(id)
    },
    immediate: true
  }
}

問題2:路由變化時組件不更新

// 對于復用組件,需要監(jiān)聽路由變化
export default {
  // 使用 beforeRouteUpdate 守衛(wèi)
  beforeRouteUpdate(to, from, next) {
    this.userId = to.params.id
    this.loadUserData()
    next()
  },
  
  // 或者使用 watch
  watch: {
    '$route.params.id'(newId) {
      this.userId = newId
      this.loadUserData()
    }
  }
}

問題3:TypeScript 類型支持

// Vue 3 + TypeScript
import { RouteLocationNormalized } from 'vue-router'

// 定義路由參數(shù)類型
interface UserRouteParams {
  id: string
}

interface UserRouteQuery {
  tab?: 'info' | 'posts' | 'settings'
  edit?: string
}

export default defineComponent({
  setup() {
    const route = useRoute()
    
    // 類型安全的參數(shù)訪問
    const userId = computed(() => {
      const params = route.params as UserRouteParams
      return params.id
    })
    
    const currentTab = computed(() => {
      const query = route.query as UserRouteQuery
      return query.tab || 'info'
    })
    
    // 類型安全的路由跳轉(zhuǎn)
    const router = useRouter()
    function goToEdit() {
      router.push({
        name: 'user-edit',
        params: { id: userId.value },
        query: { from: route.fullPath }
      })
    }
    
    return { userId, currentTab, goToEdit }
  }
})

六、總結:最佳實踐指南

  1. 優(yōu)先使用 Props 傳遞 - 提高組件可測試性和復用性
  2. 復雜邏輯使用組合函數(shù) - Vue 3 推薦方式,邏輯更清晰
  3. 適當使用狀態(tài)管理 - 需要跨組件共享路由狀態(tài)時
  4. 性能優(yōu)化 - 避免頻繁訪問深層屬性,使用計算屬性緩存
  5. 類型安全 - TypeScript 項目一定要定義路由類型

快速選擇流程圖:

graph TD
    A[需要獲取路由信息] --> B{使用場景}
    
    B -->|簡單訪問參數(shù)| C[使用 $route.params]
    B -->|Vue 3 項目| D[使用 useRoute Hook]
    B -->|組件需要復用/測試| E[使用 Props 傳遞]
    B -->|多個組件共享狀態(tài)| F[使用 Pinia/Vuex 存儲]
    B -->|通用工具函數(shù)| G[自定義組合函數(shù)]
    
    C --> H[完成]
    D --> H
    E --> H
    F --> H
    G --> H

記住黃金法則:優(yōu)先考慮組件獨立性,只在必要時直接訪問路由對象。

思考題:在你的 Vue 項目中,最常使用哪種方式獲取路由信息?遇到過哪些有趣的問題?歡迎分享你的實戰(zhàn)經(jīng)驗!

以上就是Vue獲取路由信息的8種方法詳解的詳細內(nèi)容,更多關于Vue獲取路由信息的資料請關注腳本之家其它相關文章!

相關文章

  • Vue3渲染器與渲染函數(shù)的用法詳解

    Vue3渲染器與渲染函數(shù)的用法詳解

    Vue3渲染器將虛擬DOM轉(zhuǎn)為真實DOM,支持高效更新與跨平臺;渲染函數(shù)(h())替代JSX,更靈活,與CompositionAPI結合可優(yōu)化性能,提升復雜場景下的開發(fā)效率與應用性能
    2025-08-08
  • vue3-reactive定義的對象數(shù)組如何賦值

    vue3-reactive定義的對象數(shù)組如何賦值

    這篇文章主要介紹了vue3-reactive定義的對象數(shù)組如何賦值問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • vue3使用iframe嵌入ureport2設計器,解決預覽時NullPointerException異常問題

    vue3使用iframe嵌入ureport2設計器,解決預覽時NullPointerException異常問題

    這篇文章主要介紹了vue3使用iframe嵌入ureport2設計器,解決預覽時NullPointerException異常問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Vue3?響應式高階用法之customRef()的使用

    Vue3?響應式高階用法之customRef()的使用

    customRef()是Vue3的高級工具,允許開發(fā)者創(chuàng)建具有復雜依賴跟蹤和自定義更新邏輯的ref對象,本文詳細介紹了customRef()的使用場景、基本用法、功能詳解以及最佳實踐,包括防抖、異步更新等用例,旨在幫助開發(fā)者更好地理解和使用這一強大功能
    2024-09-09
  • vue實現(xiàn)翻牌動畫

    vue實現(xiàn)翻牌動畫

    這篇文章主要為大家詳細介紹了vue實現(xiàn)翻牌動畫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Vue使用screenfull實現(xiàn)全屏效果

    Vue使用screenfull實現(xiàn)全屏效果

    這篇文章主要為大家詳細介紹了Vue使用screenfull實現(xiàn)全屏,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • Vue中使用vux的配置詳解

    Vue中使用vux的配置詳解

    這篇文章主要為大家詳細介紹了Vue中使用vux配置的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • vue如何實現(xiàn)跨頁面?zhèn)鬟f與接收數(shù)組并賦值

    vue如何實現(xiàn)跨頁面?zhèn)鬟f與接收數(shù)組并賦值

    這篇文章主要介紹了vue如何實現(xiàn)跨頁面?zhèn)鬟f與接收數(shù)組并賦值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • React/vue開發(fā)報錯TypeError:this.getOptions?is?not?a?function的解決

    React/vue開發(fā)報錯TypeError:this.getOptions?is?not?a?function

    這篇文章主要給大家介紹了關于React/vue開發(fā)報錯TypeError:this.getOptions?is?not?a?function的解決方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • 使用vue-video-player實現(xiàn)直播的方式

    使用vue-video-player實現(xiàn)直播的方式

    在開發(fā)期間使用過video.js、mui-player等插件,發(fā)現(xiàn)這些video插件對移動端的兼容性都不友好,最后發(fā)現(xiàn)一個在移動端兼容不錯的插件vue-video-player,下面通過場景分析給大家介紹使用vue-video-player實現(xiàn)直播的方法,感興趣的朋友一起看看吧
    2022-01-01

最新評論

离岛区| 汾西县| 扬州市| 砚山县| 买车| 锡林郭勒盟| 高州市| 宽城| 庆安县| 固安县| 义马市| 凌云县| 万山特区| 张北县| 龙江县| 吉木萨尔县| 三河市| 青川县| 乐安县| 玉龙| 寿阳县| 洛南县| 湄潭县| 洪泽县| 金阳县| 长海县| 监利县| 六枝特区| 固原市| 广安市| 晋州市| 瑞昌市| 滦平县| 上杭县| 镇坪县| 吴旗县| 峡江县| 东方市| 营口市| 长丰县| 巩义市|