精品欧美一区二区三区在线观看 _久久久久国色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小说| 欧美精品久久| 九九热精品免费视频| 国产精品流白浆在线观看| 欧美香蕉大胸在线视频观看| 亚洲国产一区二区三区在线播| 乱妇乱女熟妇熟女网站| 日本五码在线| 精品亚洲成a人在线观看| 欧美成人中文字幕| 熟女性饥渴一区二区三区| 国产高清在线观看| 国产成人精品一区二| 人人做人人澡人人爽欧美| 极品美妇后花庭翘臀娇吟小说| 亚洲午夜免费| 欧美探花视频资源| 国产一级爱c视频| 欧美性天天影视| 91在线视频在线| 国产欧美va欧美va香蕉在| 日韩免费黄色片| 亚洲国产不卡| 在线电影av不卡网址| 欧美一区二区免费在线观看| 国产精品成人3p一区二区三区| 精品国产成人在线| 欧美国产视频一区| 日本美女在线中文版| 久久免费的精品国产v∧| 99影视tv| 国产人妻精品一区二区三区| 日日噜噜夜夜狠狠视频欧美人| 高清欧美性猛交xxxx| 性生交大片免费全黄| 国产亚洲第一伦理第一区| 精品日韩一区二区三区免费视频| 精品久久久99| 国产另类xxxxhd高清| 黄色91在线观看| 拔插拔插海外华人免费| 在线观看男女av免费网址| 中文字幕一区二区三区在线播放 | 亚洲www啪成人一区二区| 午夜免费久久看| 800av在线免费观看| 黄色网在线免费看| 国产精品灌醉下药二区| 日韩欧美亚洲v片| 国产小视频免费在线观看| 久久嫩草精品久久久精品| 久久久久久国产精品一区| 黄色一级大片在线免费看国产一 | 免费不卡的av| 欧美a在线观看| 91精品欧美一区二区三区综合在| 五月婷婷激情久久| 国产原创一区| 7777精品伊人久久久大香线蕉超级流畅 | 亚洲成av人片| 欧美 日韩 国产在线观看| 182在线视频观看| 午夜精品久久久久久久久久久| 成人在线国产视频| 台湾佬中文娱乐网欧美电影| 欧美性猛xxx| 成人在线观看黄| 精品成人免费一区二区在线播放| 在线一区二区三区四区五区 | 国产呦精品一区二区三区网站| 91精品久久久久久久久青青 | 久久久久无码精品国产| 激情欧美一区二区三区| 欧美亚洲国产视频小说| jizz国产在线| 激情亚洲综合在线| 成人xxxxx色| 香蕉av一区二区三区| 精品久久久久久中文字幕动漫| 精品99999| 精品无码一区二区三区爱欲| 爱啪啪综合导航| 色域天天综合网| 欧美日韩一区二区三区69堂| 天天干天天色综合| 欧洲乱码伦视频免费| 日韩一区二区久久久| 国产高潮国产高潮久久久91| 136国产福利精品导航网址| 欧美综合一区第一页| 中文字幕日韩第一页| 国产精品中文字幕日韩精品| 国产三级精品在线不卡| 成人亚洲综合天堂| 一区二区三区色| 北条麻妃av高潮尖叫在线观看| 久久精品黄色| 亚洲国产欧美一区二区丝袜黑人| 亚洲午夜久久久久久久国产| 最新精品国产| 国产精品第一第二| 亚洲黄色在线观看视频| 欧美国产精品劲爆| 日韩精品在线中文字幕| 国产成人精品一区二区三区视频| 日韩一区二区精品葵司在线 | 日韩一级特黄| 精品国产1区2区3区| 少妇无套高潮一二三区| 欧美欧美天天天天操| 国产精品99久久久久久人| 黄色小视频免费在线观看| 国产精品久久夜| 国产成人久久婷婷精品流白浆| 国产精品视频一区二区三区综合| 国产丝袜精品视频| 无码专区aaaaaa免费视频| 美女网站视频一区| 亚洲白虎美女被爆操| 激情高潮到大叫狂喷水| 国产亚洲在线观看| 成人av蜜桃| 浪潮av一区| 欧美性三三影院| 国产精品1000部啪视频| 韩国精品一区二区三区| 91久久嫩草影院一区二区| 国产黄在线观看| 欧美日韩激情网| 国产性猛交96| 亚洲电影影音先锋| 成人a在线观看| 日本免费中文字幕在线| 欧美视频在线一区二区三区 | 日韩一区在线免费观看| 88av.com| 综合国产视频| 91av免费观看91av精品在线| 丰满人妻一区二区| 亚洲精选在线视频| 99视频在线观看视频| 99精品综合| 国产美女高潮久久白浆| 91精彩在线视频| 在线观看一区二区视频| 成人精品999| 蜜乳av另类精品一区二区| 久久综合福利| 欧美香蕉视频| 国产亚洲一区二区在线| 国产精品免费无遮挡无码永久视频| 久久综合久久综合久久综合| 男人操女人免费软件| 国产日产精品一区二区三区四区的观看方式 | 日韩一区二区在线看片| 国产av 一区二区三区| 国产精品一区二区久激情瑜伽 | 欧美一区二区三区在线电影| 欧美风情第一页| 国产一区二区精品久久91| 国产女人18毛片| 一区二区三区四区精品视频 | 国产精品成人久久| www.视频一区| 女性隐私黄www网站视频| 欧美日韩老妇| 成人看片人aa| 久久不射影院| 亚洲精品网站在线播放gif| 欧美一区二区三区网站| 中文字幕第一区二区| 伊人国产精品视频| 在线精品一区二区| 欧美精品七区| 性欧美video另类hd尤物| 美女性感视频久久久| 日本免费不卡视频| 色噜噜夜夜夜综合网| 特黄一区二区三区| 大尺度一区二区| 久章草在线视频| 91九色精品国产一区二区| 国产成人亚洲欧美| 日本精品另类| 欧美富婆性猛交| 免费理论片在线观看播放老| 欧美精品久久一区| 加勒比av在线播放| 久久免费看少妇高潮| 中文 日韩 欧美| 亚洲在线观看| 日韩最新中文字幕| 一本色道久久综合狠狠躁的番外| 成人在线国产精品| 成人一级福利| 精品国产一区二区三区在线观看 | 欧洲xxxxx| 神马久久av| 久久成人综合视频| 五月天激情婷婷| 欧美精品久久天天躁| 国产超碰人人爽人人做人人爱| 国产精品欧美一区喷水| 在线视频 日韩| 国产在线播放一区| av无码精品一区二区三区| 黑人一区二区| 国产精品h视频| 亚州精品视频| 91在线看网站| 欧洲亚洲精品| 国产成人综合av| 538视频在线| 超碰97人人做人人爱少妇| 黄色av网站在线| 亚洲第一区第二区| 国产成人精品一区二区无码呦| 色婷婷av一区二区三区之一色屋| 久久在线视频精品| 综合久久国产九一剧情麻豆| 成人在线一级片| 91在线观看下载| 95视频在线观看| 国产精品123区| 亚洲一区二区三区观看| 日本欧洲一区二区| 国产免费一区二区三区视频| 韩国自拍一区| 成人在线视频一区二区三区| 五月婷婷亚洲| 一本一生久久a久久精品综合蜜| 久久99高清| 麻豆av一区| 偷拍亚洲色图| 久久日韩精品| 精品久久对白| 国产乱码精品一区二区三区卡 | 免费看污久久久| 老司机精品在线| 黑人中文字幕一区二区三区| 丁香婷婷成人| 国产精品久久精品视| 大陆精大陆国产国语精品| 99精品欧美一区二区三区| 国产麻豆精品| 亚洲最大成人网色| 日韩精品一级| 国产精品免费一区二区三区在线观看 | 亚洲天堂成人| 黄色www网站| 亚洲在线视频| 无码人妻丰满熟妇区毛片18| 六月天综合网| av五月天在线| 久久国产麻豆精品| 超碰在线免费av| 国产成a人亚洲| 高清中文字幕mv的电影| 99天天综合性| 欧美做受高潮6| 国产精品久久午夜夜伦鲁鲁| 午夜国产福利一区二区| 一区二区三区四区亚洲| 国产无码精品久久久| 精品久久久久久久久国产字幕| 五月婷婷色丁香| 91成人免费网站| 国产一区二区三区成人| 欧美一区二区女人| 日本人妻丰满熟妇久久久久久| 日韩精品中文字| 最新电影电视剧在线观看免费观看| 精品国产一区二区三区四区在线观看 | 91在线一区| 欧美日本韩国一区二区三区| 日本一区二区三区视频| 99久久99久久精品| 亚洲欧美久久| 午夜国产福利在线观看| 东方aⅴ免费观看久久av| 亚洲第一页av| 国产精品白丝在线| 日本三级网站在线观看| 欧洲日韩一区二区三区| www.国产黄色| 亚洲欧美日韩一区二区在线| 免费黄色在线看| 久久久久九九九九| 日本欧美韩国| 国产欧美一区二区视频| re久久精品视频| 2019日韩中文字幕mv| 日韩影院在线观看| 人妻精油按摩bd高清中文字幕| 97精品久久久久中文字幕 | 日本久久精品一区二区| 国产福利一区二区| 国产一级久久久久毛片精品| 亚洲黄色av一区| 国产伦精品一区二区三区视频我| 欧美一区二区日韩一区二区| 免费av在线电影| 欧美激情免费观看| 日本久久一区| 牛人盗摄一区二区三区视频| 中文字幕亚洲综合久久五月天色无吗'' | 91免费版网站入口| 五月国产精品| 欧美在线观看黄| 免费人成在线不卡| 人妻丰满熟妇av无码久久洗澡| 亚洲人精品午夜| 天天操天天干天天摸| 亚洲成色www8888| 在线中文免费视频| 国产主播在线一区| 国产欧美日韩| 情侣黄网站免费看| 成+人+亚洲+综合天堂| 亚洲天堂黄色片| 欧美老肥妇做.爰bbww| 国产免费视频在线| 日韩av成人在线观看| 久久综合五月婷婷| 日本阿v视频在线观看| 国产精品亚洲人在线观看| а天堂中文在线资源| 精品视频123区在线观看| 你懂的视频在线免费| 国产69久久精品成人看| 欧美sss在线视频| 日韩网站在线免费观看| 国产suv精品一区二区6| 欧美做爰爽爽爽爽爽爽| 欧美美女黄视频| 午夜国产福利在线| 国产精品久久久久久久久久尿| 久久91麻豆精品一区| 一本久道综合色婷婷五月| 久久综合色天天久久综合图片| 久久久久久久黄色片| 亚洲精品福利视频| 擼擼色在线看观看免费| 精品国产乱码一区二区三区四区| 亚洲激情专区| 日韩成人av一区二区| 福利一区视频在线观看| 青青草视频免费在线观看| 欧美专区日韩视频| 精品国产乱码久久久久久蜜坠欲下| 东京热加勒比无码少妇| 欧美韩日一区二区三区| 中文字幕一区二区三区波野结| 中文字幕亚洲激情| 色狠狠一区二区三区| 亚洲欧美日韩精品久久久| 久久精品国产亚洲一区二区三区 | 亚洲色图欧美视频| 欧美性做爰毛片| 国产成人1区| 亚洲福利精品视频| 亚洲啪啪综合av一区二区三区| 午夜精品久久久久久久第一页按摩| 欧美大秀在线观看| 久久中文字幕导航| 免费一级特黄录像| 亚洲色图欧洲色图婷婷| 亚洲精品成av人片天堂无码| 国自在线精品视频| 国产一区日韩| 欧美视频国产视频| 亚洲午夜电影在线观看| 欧美日韩在线精品一区二区三区激情综| 人体精品一二三区| 99久久精品费精品国产风间由美| 四虎1515hh.com| 午夜不卡av免费| www.亚洲资源| 99免费在线观看视频| 久久av在线| 欧美精品久久久久久久久46p| 精品日韩在线观看| 国产私拍福利精品视频二区| 国产精品av免费观看| 久久久久久久综合日本| 国产女人爽到高潮a毛片| 97精品免费视频| 青青一区二区三区| aaa黄色大片| 欧美日韩精品系列| sm性调教片在线观看| 在线码字幕一区| bt7086福利一区国产| 一级片免费网站| **欧美日韩vr在线| 亚洲一区二区三区| 国产色视频一区二区三区qq号| 3atv一区二区三区| 天天综合网站| 青青草成人免费在线视频|