精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

從 Vue2 到 Vue3 ,你必須要掌握的路由差異和使用場景!

開發 前端
今天把 Vue-Router4 的主要功能跟大家過了一遍,大部分來自官網,也有一些來自自己的實踐心得。希望對你的開發工作有所幫助。

很多兄弟在使用 Vue3 了,但對 Vue3 的路由卻了解的非常少。甚至只知道基本的跳轉和參數獲取,這樣做一些稍微復雜的功能肯定不夠用的。最近就把 Vue3 的路由(Vue-Router4)的版本差異和使用場景整理了一下分享給大家。會的兄弟可以復習一下,不會的兄弟抓緊學起來哦!

路由模式

Vue3 中不再使用 new Router() 創建 router ,而是調用 createRouter 方法:

import { createRouter } from 'vue-router'

const router = createRouter({
// ...
})

路由模式 mode 配置改為 history ,屬性值調整為:

  • "history" => createWebHistory()
  • "hash" => createWebHashHistory()
  • "abstract" => createMemoryHistory()
import { createRouter, createWebHistory } from 'vue-router'
// createWebHashHistory 和 createMemoryHistory (SSR相關) 同理

createRouter({
history: createWebHistory(),
routes: []
})

基礎路徑 base 被作為 createWebHistory 的第一個參數進行傳遞(其他路由模式也是一樣):

import { createRouter, createWebHistory } from 'vue-router'
createRouter({
history: createWebHistory('/base-url/'),
routes: []
})

路由跳轉

使用組件跳轉,方式還是和 Vue2 一樣:

<RouterLink to="/user">User</RouterLink>
<RouterLink :to="{ path: '/user', query: { username: 'Jack' } }">User</RouterLink>
<RouterLink :to="{ name: 'user', params: { username: 'Tom' } }">User</RouterLink>

當然,最常見的還是編程式導航,這時候需要引入 useRouter 方法:

import { useRouter } from 'vue-router'

const router = useRouter()

// 字符串路徑
router.push('/user')

// 帶有路徑的對象
router.push({ path: '/user', query: { username: 'Jack' } })
router.push({ path: '/user', hash: '#team' })

// 帶有命名的對象
router.push({ name: 'user', query: { username: 'Jack' } })
router.push({ name: 'user', params: { username: 'Tom' } })
router.push({ name: 'user', hash: '#team' })

注意:參數 params 不能和 path 一起使用。RouterLink 組件 to 屬性與 router.push() 接受的參數相同,兩者的規則也完全相同。

導航守衛

全局前置守衛

全局前置守衛通常用來做權限控制,使用 router.beforeEach 即可添加:

const router = createRouter({ ... })

router.beforeEach((to, from) => {
// ...
// 返回 false 以取消導航
return false
})

每個守衛方法接收兩個參數:

  • to:即將進入的目標路由
  • from:當前正要離開的路由

可以返回的值如下:

  • false:取消當前的導航。
  • true 或 undefined,調用下一個守衛。
  • 一個路由地址:字符串或對象。表示中斷當前導航,進行一個新的導航。
router.beforeEach(async (to, from) => {
// 檢查用戶是否已登錄,并且避免無限重定向
if (!isAuthenticated && to.name !== 'Login') {
return { name: 'Login' } // 將用戶重定向到登錄頁面
}
})

在之前的 Vue Router 版本中,也是可以使用第三個參數 next 的。目前,它仍然是被支持的,這意味著你可以向任何導航守衛傳遞第三個參數。在這種情況下,要確保 next 在導航守衛中只被調用一次。

全局解析守衛

router.beforeResolve 用法和 router.beforeEach 類似。它是在導航被確認之前,所有組件內守衛和異步路由組件被解析之后被調用。下面這個例子,確保用戶可以訪問自定義 meta 屬性:

router.beforeResolve(async to => {
if (to.meta.requiresCamera) {
try {
await askForCameraPermission()
} catch (error) {
if (error instanceof NotAllowedError) {
// ... 處理錯誤,然后取消導航
return false
} else {
// 意料之外的錯誤,取消導航并把錯誤傳給全局處理器
throw error
}
}
}
})

router.beforeResolve 是獲取數據或執行任何其他操作(進入所有頁面后都執行的操作)的理想位置。

全局后置鉤子

和守衛不同的是,全局后置鉤子不接受 next 函數,也不能跳轉到其他的路由地址:

router.afterEach((to, from) => {
sendToAnalytics(to.fullPath)
})

但它可以接收 failure 作為第三個參數:

router.afterEach((to, from, failure) => {
if (!failure) sendToAnalytics(to.fullPath)
})

router.afterEach 對于訪問分析、更改頁面標題、聲明頁面等輔助功能都很有幫助。

路由獨享的守衛

我們可以直接在路由配置上定義 beforeEnter 守衛:

const routes = [
{
path: '/users/:id',
component: UserDetails,
beforeEnter: (to, from) => {
// 取消導航
return false
},
},
]

beforeEnter 守衛只在進入路由時觸發,不會在 params、query 或 hash 改變時觸發。例如,從 /users/2 進入到 /users/3 或者從 /users/2#info 進入到 /users/2#projects 不會觸發。

我們也可以將一個函數數組傳遞給 beforeEnter,這在為不同的路由重用守衛時很有用:

// 清除 query 參數
function removeQueryParams(to) {
if (Object.keys(to.query).length)
return { path: to.path, query: {}, hash: to.hash }
}
// 清除 hash 值
function removeHash(to) {
if (to.hash) return { path: to.path, query: to.query, hash: '' }
}

const routes = [
{
path: '/users/:id',
component: UserDetails,
beforeEnter: [removeQueryParams, removeHash]
},
{
path: '/about',
component: UserDetails,
beforeEnter: [removeQueryParams]
}
]

當然,你也可以通過使用路由的 meta 屬性和 全局導航守衛 來實現以上功能。

組件內的守衛

使用聲明式 API ,你可以為組件添加以下守衛:

  • beforeRouteEnter
  • beforeRouteUpdate
  • beforeRouteLeave

beforeRouteEnter 守衛不能訪問 this,因為此時組件還沒有被創建。你可以通過傳一個回調給 next 來訪問組件實例。在導航被確認的時候執行回調,并且把組件實例作為回調方法的參數:

beforeRouteEnter (to, from, next) {
next(vm => {
// 通過 `vm` 訪問組件實例
})
}

注意:beforeRouteEnter 是支持 next 傳遞回調函數的唯一守衛。

beforeRouteUpdate 在當前路由改變,但是該組件被復用時調用。比如,對于一個帶有動態參數的路徑 /users/:id,在 /users/1 和 /users/2 之間跳轉的時候被調用。因為這種情況發生的時候,組件已經掛載好了,導航守衛可以訪問組件實例 this。

beforeRouteUpdate (to, from) {
// 可以使用 this
this.name = to.params.name
}

beforeRouteLeave 通常用來預防用戶在還未保存修改前突然離開。該守衛可以通過返回 false 來取消導航。

beforeRouteLeave (to, from) {
const answer = window.confirm('Do you really want to leave? you have unsaved changes!')
// 取消導航并停留在當前頁面
if (!answer) return false
}

使用組合式 API,你可以為組件添加 onBeforeRouteUpdate 、onBeforeRouteLeave 導航守衛:

<script setup lang="ts">
import { ref } from 'vue'
import { onBeforeRouteLeave, onBeforeRouteUpdate } from 'vue-router'

const userData = ref()

onBeforeRouteUpdate(async (to, from) => {
//僅當 id 更改時才獲取用戶信息
if (to.params.id !== from.params.id) {
userData.value = await fetchUser(to.params.id)
}
})

onBeforeRouteLeave((to, from) => {
const answer = window.confirm('Do you really want to leave? you have unsaved changes!')
// 取消導航并停留在當前頁面
if (!answer) return false
})
</script>

注意:由于 setup 函數調用時機的問題,使用組合式 API 不存在 onBeforeRouteEnter

路由組件傳參

當我們獲取路由參數時,通常在模板中使用 $route ,在邏輯中調用 useRoute() 方法,如:

<template>
<div>User {{ $route.params.id }}</div>
</template>

<script setup lang="ts">
import { useRoute } from 'vue-router'
const route = useRoute()
console.log(route.params.id)
</script>

以上方法比較麻煩,而且與路由緊密耦合,不利于組件封裝。我們可以在創建路由時通過 props 配置來解除這種行為:

const routes = [
{
path: '/user/:id',
name: 'user',
component: User,
props: true
}
]

此時 route.params 將直接被設置為組件的 props,這樣組件就和路由參數解耦了:

<template>
<div>User {{ id }}</div>
</template>

<script setup lang="ts">
const props = defineProps<{
id: string
}>()
console.log(props.id)
</script>

布爾模式

當 props 設置為 true 時,route.params 將被設置為組件的 props。

命名視圖

對于有命名視圖的路由,你必須為每個命名視圖定義 props 配置:

const routes = [
{
path: '/user/:id',
components: { default: User, sidebar: Sidebar },
props: { default: true, sidebar: false }
}
]

對象模式

當 props 是一個對象時,它會將此對象設置為組件 props 。當 props 是靜態的時候很有用。

const routes = [
{
path: '/user',
component: User,
props: { newsletterPopup: false }
}
]

函數模式

我們也可以創建一個返回 props 的函數。這允許你將參數轉換為其他類型:

const routes = [
{
path: '/user',
component: User,
props: route => ({ id: route.query.userId })
}
]

如 /user?userId=123 參數會被轉為 { id: '123' } 作為 props 傳給 User 組件。

滾動行為

我們可以通過 vue-router 自定義路由切換時頁面如何滾動。比如,當跳轉到新路由時,頁面滾動到某個位置;切換路由時頁面回到之前的滾動位置。

當創建路由實例時,我們只需要提供一個 scrollBehavior 方法:

const router = createRouter({
history: createWebHashHistory(),
routes: [...],
scrollBehavior (to, from, savedPosition) {
// return 期望滾動到哪個的位置
}
})

scrollBehavior 函數接收 to from 路由對象。第三個參數 savedPosition,只有當這是一個 popstate 導航時才可用(點擊瀏覽器的后退/前進按鈕,或者調用 router.go() 方法)。

滾動到固定距離

該函數可以返回一個 ScrollToOptions 位置對象:

const router = createRouter({
scrollBehavior(to, from, savedPosition) {
// 始終滾動到頂部
return { top: 0 }
},
})

滾動到元素位置

也可以通過 el 傳遞一個 CSS 選擇器或一個 DOM 元素。在這種情況下,top 和 left 將被視為該元素的相對偏移量。

const router = createRouter({
scrollBehavior(to, from, savedPosition) {
// 始終在元素 #main 上方滾動 10px
return {
// 也可以這么寫
// el: document.getElementById('main'),
el: '#main',
top: -10,
}
},
})

滾動到錨點位置

還可以模擬 “滾動到錨點” :

const router = createRouter({
scrollBehavior(to, from, savedPosition) {
if (to.hash) {
return {
el: to.hash,
}
}
},
})

滾動到之前的位置

返回 savedPosition,在按下瀏覽器 后退/前進 按鈕,或者調用 router.go() 方法時,頁面會回到之前的滾動位置:

const router = createRouter({
scrollBehavior(to, from, savedPosition) {
if (savedPosition) {
return savedPosition
} else {
return { top: 0 }
}
},
})

提示:如果返回一個 falsy 的值,或者是一個空對象,則不會發生滾動。我們還可以在返回的對象中添加 behavior: 'smooth' ,讓滾動更加絲滑。

延遲滾動

有時候,我們不希望立即執行滾動行為。例如,當頁面做了過渡動效,我們希望過渡結束后再執行滾動。要做到這一點,我們可以返回一個 Promise :

const router = createRouter({
scrollBehavior(to, from, savedPosition) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve({ left: 0, top: 0 })
}, 500)
})
}
})

過渡動效

基本用法

如果想要在路由組件上使用轉場,對導航進行動畫處理,我可以使用 v-slot 結合 Animete.css 來實現:

<RouterView v-slot="{ Component }">
<transition enter-active-class="animate__animated animate__fadeIn">
<component :is="Component" />
</transition>
</RouterView>

單個路由的過渡

上面的用法會對所有的路由使用相同的過渡。如果你想讓每個路由的組件有不同的過渡,可以將 元信息 和動態的 enter-active-class 結合在一起,放在<transition> 上:

const routes = [
{
path: '/home',
component: Home,
meta: { transition: 'animate__fadeIn' },
},
{
path: '/user',
component: User,
meta: { transition: 'animate__bounceIn' },
},
]
<RouterView v-slot="{ Component }">
<transition :enter-active-class="`animate__animated ${$route.meta.transition}`">
<component :is="Component" />
</transition>
</RouterView>

復用的組件之前進行過渡

const routes = [
{
path: '/user/:id',
component: User,
meta: { transition: 'animate__bounceIn' },
},
]

定義以上路由,當從 /user/123 切換到 /user/456 時是沒有任何過渡效果的。這時候我們可以添加一個 key 屬性來強制進行過渡,key 值只要不同就行了。說白了就是讓 Dom 不要被復用,和 v-for 的 key 屬性原理剛好相反。

<router-view v-slot="{ Component, route }">
<transition :enter-active-class="`animate__animated ${$route.meta.transition}`">
<component :is="Component" :key="route.path" />
</transition>
</router-view>

動態路由

添加路由

當我們做用戶權限的時候,添加路由非常有用??梢允褂?nbsp;router.addRoute() 來添加一個路由:

router.addRoute({ path: '/about', name: 'about', component: About })

注意:跟之前版本不同的是,路由只能一個一個添加,不能批量添加。

刪除路由

以下幾個方法都可以刪除路由:

1、通過使用 router.removeRoute() 按名稱刪除路由:

router.addRoute({ path: '/about', name: 'about', component: About })
// 刪除路由
router.removeRoute('about')

2、通過添加一個名稱相同的路由,替換掉之前的路由:

router.addRoute({ path: '/about', name: 'about', component: About })
// 這將會刪除之前已經添加的路由,因為他們具有相同的名字且名字必須是唯一的
router.addRoute({ path: '/other', name: 'about', component: Other })

3、通過調用 router.addRoute() 返回的回調函數:

const removeRoute = router.addRoute(routeRecord)
removeRoute() // 刪除路由如果存在的話

當路由沒有名稱時,這種方法非常有用。

添加嵌套路由

要將嵌套路由添加到現有的路由中,可以將路由的 name 作為第一個參數傳遞給 router.addRoute() ,這和通過 children 添加的效果一樣:

router.addRoute({ name: 'admin', path: '/admin', component: Admin })
// 添加嵌套路由
router.addRoute('admin', { path: 'settings', component: AdminSettings })

這相當于:

router.addRoute({
name: 'admin',
path: '/admin',
component: Admin,
children: [{ path: 'settings', component: AdminSettings }]
})

小結

今天把 Vue-Router4 的主要功能跟大家過了一遍,大部分來自官網,也有一些來自自己的實踐心得。希望對你的開發工作有所幫助。當然這并不是 Vue-Router4 的所有內容,比如還有路由匹配、重定向和別名等等,大家可以自行在官網查看。后面我會分享更多 Vue3 相關的干貨,歡迎大家關注我,關注我的專欄。

責任編輯:姜華 來源: 今日頭條
相關推薦

2022-07-18 10:43:12

項目TienChinJava

2022-12-09 09:39:20

Vue3Vue2

2023-04-28 08:35:22

Vue 3Vue 2

2020-03-25 18:23:07

Vue2Vue3組件

2022-06-21 12:09:18

Vue差異

2022-06-29 16:59:21

Vue3Vue2面試

2021-03-22 10:05:25

開源技術 項目

2021-06-26 06:29:14

Vue 2Vue 3開發

2021-05-06 07:40:56

Vue3 Vue2 組件

2021-12-08 09:09:33

Vue 3 Computed Vue2

2019-06-20 17:39:12

Android啟動優化

2025-08-18 02:22:00

2024-10-14 09:34:39

vue3通信emit

2022-07-26 01:06:18

Vue3自定義指令

2021-09-26 00:24:58

開發項目TypeScript

2023-11-28 09:03:59

Vue.jsJavaScript

2021-12-01 08:11:44

Vue3 插件Vue應用

2021-11-26 05:59:31

Vue3 插件Vue應用

2024-11-06 10:16:22

2021-10-21 08:13:11

Springboot
點贊
收藏

51CTO技術棧公眾號

日本美女在线中文版| 国产又粗又硬又长又爽| 忘忧草在线日韩www影院| caoporn国产精品| 欧美精品成人91久久久久久久| 91九色蝌蚪porny| 激情开心成人网| 亚洲欧洲性图库| 草莓视频一区| 无码无套少妇毛多18pxxxx| 久久裸体网站| 亚洲成人网久久久| 国产精品入口免费软件| 影音先锋在线视频| 久久久久国产精品麻豆| 成人在线国产精品| 99超碰在线观看| 中文字幕日韩一区二区不卡 | 久久色在线观看| 成人黄色片在线| 成人在线免费看视频| 天天综合网网欲色| 国产小视频国产精品| 久久国产免费视频| 国产精品美女午夜爽爽| 精品国产福利在线| 无码人妻精品一区二区蜜桃百度| 国产在线观看网站| 99精品国产99久久久久久白柏| 91九色视频导航| 超碰在线免费97| 国产精品日韩久久久| 欧美夫妻性生活xx| 97在线观看视频免费| 国产精品一在线观看| 精品国一区二区三区| 蜜桃福利午夜精品一区| 看片一区二区| 欧美午夜精品一区二区三区| 夫妻免费无码v看片| 91黄页在线观看| 综合久久久久久久| 日韩偷拍一区二区| 男人的天堂在线视频| 不卡在线视频中文字幕| 国产精品夜夜夜一区二区三区尤| 99热这里只有精品3| 精品一区二区免费视频| 国产啪精品视频网站| 日本黄色中文字幕| 老**午夜毛片一区二区三区| 4p变态网欧美系列| 国内自拍视频在线播放| 亚洲一区网站| 国产ts一区二区| 国产嫩bbwbbw高潮| 丝袜诱惑制服诱惑色一区在线观看| 4388成人网| 四虎影院在线免费播放| 久久人人超碰| 国产精品久久久久77777| 久久这里只有精品9| 日本aⅴ免费视频一区二区三区| 国产99久久精品一区二区| 波多野结衣视频免费观看| 日韩av不卡在线观看| 国产精品视频免费在线观看| 一女二男一黄一片| 国产很黄免费观看久久| 成人一区二区三区四区| 污污网站在线免费观看| 久久久精品欧美丰满| 色吧亚洲视频| 黄色免费在线观看| 亚洲国产视频在线| 国产 福利 在线| 欧美aaa大片视频一二区| 欧美区视频在线观看| 爱情岛论坛亚洲自拍| 国产精品丝袜在线播放| 亚洲跨种族黑人xxx| 少妇视频在线播放| 欧美高清日韩| 欧美影院久久久| www.欧美精品| 一级性生活毛片| 青青草成人影院| 欧美不卡视频一区发布| 国产成人啪精品午夜在线观看| 亚洲人体大胆视频| 国产精品精品视频| 精品人妻一区二区三区麻豆91| 国产激情一区二区三区桃花岛亚洲| 国产精品播放| 国产精品久久久久一区二区国产| 亚洲欧美在线视频| www.99热这里只有精品| 国产成人a视频高清在线观看| 日韩欧美色综合| 91精品国产综合久久香蕉| 国产精品自拍第一页| 国产精一区二区三区| 精品一区二区视频| 国产精品美女无圣光视频| 五月婷六月丁香| 午夜欧美理论片| 欧洲中文字幕国产精品| 国产黄色一级大片| 国产日韩欧美不卡在线| 日韩精品在线观看av| jizz久久久久久| 亚洲精品国精品久久99热一| 999精品视频在线观看播放| 亚洲欧洲日本mm| 成人免费网视频| 黄色av网站在线免费观看| 一区二区三区欧美| 粉色视频免费看| 国产欧美日韩精品一区二区免费| 欧美激情视频网站| 一区二区久久精品66国产精品| 91啪亚洲精品| 国产一二三在线视频| 四虎精品永久免费| 亚洲少妇中文在线| 国产女同在线观看| 国产不卡视频在线播放| 在线看视频不卡| 国产极品久久久久久久久波多结野| 亚洲精品国产精品自产a区红杏吧| 欧美亚洲日本在线| 免费不卡在线观看| 欧美日韩在线不卡一区| heyzo中文字幕在线| 欧美一级在线免费| 女人18毛片毛片毛片毛片区二 | 九九热精品在线| 97在线公开视频| 国产精品乱子久久久久| 亚洲 中文字幕 日韩 无码| 婷婷综合电影| 欧美在线影院在线视频| 午夜视频在线免费播放| 五月婷婷综合激情| 日韩www视频| 一区二区激情| 麻豆成人免费电影| 日韩av网站大全| 久草资源在线视频| 国产一区999| 中文字幕第50页| 亚洲狼人综合| 久久精品99久久香蕉国产色戒| 艳妇乳肉豪妇荡乳av无码福利| 久久综合狠狠综合久久综合88 | 国产 中文 字幕 日韩 在线| 欧美激情日韩| 国产精品久久久久久久久久久久冷| av在线网址观看| 日韩一级免费观看| 日本免费黄色小视频| 911亚洲精选| 成人区精品一区二区婷婷| 国产精品xxx视频| 99精品老司机免费视频| 欧美人动与zoxxxx乱| 青青青在线免费观看| 国产.精品.日韩.另类.中文.在线.播放| 久久久久亚洲蜜桃| 久久人妻精品白浆国产 | 日韩av中文在线| 日本黄色一级视频| 国产精品久久久久毛片软件| 久久久久久久久久毛片| 欧美日韩一区二区三区四区在线观看| 国产精品亚洲不卡a| 欧美动物xxx| www.xxxx欧美| 成人午夜免费在线观看| 亚洲aⅴ怡春院| www.av天天| 国产一区二区三区黄视频| 国产主播自拍av| 成人午夜国产| 国产成人精品一区二区三区福利 | 国内成人在线| 久久久久久99| 精品国产伦一区二区三区观看说明 | 人妻一区二区视频| 激情欧美一区二区| 国产精品久久久久一区二区三区共| 久久亚洲精品无码va白人极品| 欧美日韩xxxx| 成人18视频| 日韩av超清在线观看| 欧美成人一区二区三区电影| 三级毛片在线免费看| 777久久久精品| 国产九色在线播放九色| 亚洲图片你懂的| 中文字幕一区二区三区人妻不卡| 激情综合色播五月| 无码aⅴ精品一区二区三区浪潮| 久久精品久久久| 欧美精品一区三区在线观看| 国产午夜久久av| 国产精品扒开腿爽爽爽视频 | 亚洲黄色av一区| 日本少妇xxxxx| av在线不卡网| 免费不卡av网站| 日韩高清欧美激情| 欧美啪啪免费视频| 中文乱码免费一区二区三区下载| 日韩电影天堂视频一区二区| 成人在线tv视频| 91精品久久久久久久久| 欧美成人黑人| 欧美一区二区.| 丰乳肥臀在线| 久久伊人色综合| 中文字幕在线免费| 亚洲免费电影一区| 天堂中文在线资源| 欧美成人三级在线| 国产精品一级视频| 精品视频999| 久久永久免费视频| 疯狂蹂躏欧美一区二区精品| 国产一级特黄视频| 伊人夜夜躁av伊人久久| 国精产品一区一区二区三区mba | 免费中文字幕日韩欧美| avav在线播放| 欧美极品一区二区三区| 韩国成人精品a∨在线观看| 亚洲日本无吗高清不卡| 精品国产91久久久久久浪潮蜜月| 久久视频在线观看中文字幕| 97久久精品| 国产精品 日韩| 榴莲视频成人app| 亚洲va电影大全| aa亚洲一区一区三区| 国产欧美在线观看| 一区二区三区无毛| 成人网址在线观看| 久久久久久爱| 高清av免费一区中文字幕| 亚洲成人偷拍| 成人免费看片网址| 果冻天美麻豆一区二区国产| 国产伦精品一区二区三区视频免费| 99久久免费精品国产72精品九九| 国产高清精品一区二区三区| 成人在线视频中文字幕| 久久精品国产精品国产精品污| 婷婷五月色综合香五月| 日韩区国产区| 66视频精品| 欧美激情免费视频| 中文字幕第24页| 99re热视频精品| 欧美熟妇一区二区| 国产精品沙发午睡系列990531| 999精品久久久| 一区二区三区四区五区视频在线观看 | 日韩精品专区在线影院重磅| eeuss影院www在线播放| 亚洲国产三级网| 日韩午夜影院| 国产一区二区三区丝袜| 91在线网址| 男操女视频网站| 综合色天天鬼久久鬼色| 青青草偷拍视频| 亚洲大型综合色站| 天堂中文在线网| 欧美在线高清视频| 日韩av免费播放| 久久婷婷国产综合精品青草 | 99国内精品久久| 91精品人妻一区二区| 国产精品美女久久久久aⅴ| www.5588.com毛片| 亚洲国产欧美日韩另类综合 | 亚洲成人黄色在线| 日韩欧美不卡视频| 欧美午夜精品久久久久久浪潮 | 精品久久久久久综合日本 | 国产中年熟女高潮大集合| 久久久久国产成人精品亚洲午夜| 超碰97av在线| 五月婷婷综合网| 国产又爽又黄免费软件| 欧美日韩在线不卡| 亚洲国产www| 这里精品视频免费| 丁香高清在线观看完整电影视频| 国产精品久久久久久久久粉嫩av| 国产一区二区三区亚洲综合| 欧美日韩国产精品一卡| 欧美黄色aaaa| 免费一级特黄录像| 成人禁用看黄a在线| 又嫩又硬又黄又爽的视频| 五月激情综合婷婷| 国产乱码久久久久| 一本色道久久综合狠狠躁篇的优点| 色女人在线视频| 国产精品自拍偷拍| 妖精视频一区二区三区| 久久久久福利视频| 蜜桃一区二区三区在线| 五月激情丁香一区二区三区| 日韩欧美一级大片| 亚洲丁香久久久| 成人毛片av在线| 国产精品第1页| 欧美电影在线观看免费| 无码人妻aⅴ一区二区三区日本| 久久久噜噜噜久久狠狠50岁| 亚洲一区二区在线免费| 成人欧美一区二区三区小说| 亚洲成人第一网站| 亚洲黄色在线看| 国产在线xxx| 91文字幕巨乱亚洲香蕉| 小处雏高清一区二区三区| 杨幂毛片午夜性生毛片| 久久久久亚洲蜜桃| 亚洲va在线观看| 亚洲精选在线观看| 亚洲少妇视频| 玖玖玖精品中文字幕| 99riav国产精品| 日韩av无码一区二区三区不卡 | 日韩av有码在线| 国模私拍视频在线播放| 国产精品香蕉视屏| 亚洲国产裸拍裸体视频在线观看乱了中文 | 91亚洲资源网| 日本一区二区免费电影| 精品中文字幕久久久久久| 免费成人在线电影| 久久视频在线观看中文字幕| 久久五月激情| 国产精品一二三区在线观看| 中文字幕不卡在线视频极品| 青青操在线播放| 国产精品羞羞答答在线观看| 91sa在线看| 欧美挤奶吃奶水xxxxx| 日本人体一区二区| 91另类视频| 欧美日本韩国国产| 久久伊人亚洲| 欧美激情 一区| 欧美日韩激情一区二区| 黄色小网站在线观看| 亚洲一区久久久| 亚洲国产电影| 蜜桃av免费看| 欧美日韩国产成人在线免费| 中国av在线播放| 国产三区精品| 可以看av的网站久久看| 福利视频第一页| 精品国偷自产国产一区| 中文在线免费视频| 色吧亚洲视频| 国产盗摄一区二区三区| 天堂网一区二区三区| 亚洲无线码在线一区观看| 亚洲免费一区| 18禁裸男晨勃露j毛免费观看| 91欧美一区二区| 亚洲一区在线观| 欧美精品激情blacked18| 久草成人资源| 亚洲黄色片免费| 黑人精品xxx一区一二区| a√在线中文网新版址在线| 中文字幕视频一区二区| 精品国产免费视频| 超碰aⅴ人人做人人爽欧美| 亚洲精品一区二| 国产成人综合自拍| 手机在线看片1024| 麻豆乱码国产一区二区三区| 欧美人与动xxxxz0oz| 欧美视频国产视频| 精品久久久免费| 免费日本一区二区三区视频| 国产一级精品aaaaa看| 麻豆91在线看| www.国产色| 色综合色综合久久综合频道88| 国产亚洲一区| 理论片大全免费理伦片|