久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

詳解如何在vue+element-ui的項目中封裝dialog組件

瀏覽:116日期:2022-10-20 08:02:39
1、問題起源

由于 Vue 基于組件化的設計,得益于這個思想,我們在 Vue 的項目中可以通過封裝組件提高代碼的復用性。根據我目前的使用心得,知道 Vue 拆分組件至少有兩個優點:

1、代碼復用。

2、代碼拆分

在基于 element-ui 開發的項目中,可能我們要寫出一個類似的調度彈窗功能,很容易編寫出以下代碼:

<template> <div> <el-dialog :visible.sync='cnMapVisible'>我是中國地圖的彈窗</el-dialog> <el-dialog :visible.sync='usaMapVisible'>我是美國地圖的彈窗</el-dialog> <el-dialog :visible.sync='ukMapVisible'>我是英國地圖的彈窗</el-dialog> <el-button @click='openChina'>打開中國地圖</el-button> <el-button @click='openUSA'>打開美國地圖</el-button> <el-button @click='openUK'>打開英國地圖</el-button> </div></template><script>export default { name: 'View', data() { return { // 對百度地圖和谷歌地圖的一些業務處理代碼 省略 cnMapVisible: false, usaMapVisible: false, ukMapVisible: false, }; }, methods: { // 對百度地圖和谷歌地圖的一些業務處理代碼 省略 openChina() {}, openUSA() {}, openUK() {}, },};</script>

上述代碼存在的問題非常多,首先當我們的彈窗越來越多的時候,我們會發現此時需要定義越來越多的變量去控制這個彈窗的顯示或者隱藏。

由于當我們的彈窗的內部還有業務邏輯需要處理,那么此時會有相當多的業務處理代碼夾雜在一起(比如我調用中國地圖我需要用高德地圖或者百度地圖,而調用美國、英國地圖我只能用谷歌地圖,這會使得兩套業務邏輯分別位于一個文件,嚴重加大了業務的耦合度)

我們按照分離業務,降低耦合度的原則,將代碼按以下思路進行拆分:

1、View.vue

<template> <div> <china-map-dialog ref='china'></china-map-dialog> <usa-map-dialog ref='usa'></usa-map-dialog> <uk-map-dialog ref='uk'></uk-map-dialog> <el-button @click='openChina'>打開中國地圖</el-button> <el-button @click='openUSA'>打開美國地圖</el-button> <el-button @click='openUK'>打開英國地圖</el-button> </div></template><script>export default { name: 'View', data() { return { /** 將地圖的業務全部抽離到對應的dialog里面去,View只存放調度業務代碼 */ }; }, methods: { openChina() { this.$refs.china && this.$refs.china.openDialog(); }, openUSA() { this.$refs.usa && this.$refs.usa.openDialog(); }, openUK() { this.$refs.uk && this.$refs.uk.openDialog(); }, },};</script>

2、ChinaMapDialog.vue

<template> <div> <el-dialog :visible.sync='baiduMapVisible'>我是中國地圖的彈窗</el-dialog> </div></template><script>export default { name: 'ChinaMapDialog', data() { return { // 對中國地圖業務邏輯的封裝處理 省略 baiduMapVisible: false, }; }, methods: { // 對百度地圖和谷歌地圖的一些業務處理代碼 省略 openDialog() { this.baiduMapVisible = true; }, closeDialog() { this.baiduMapVisible = false; }, },};</script>

3、由于此處僅僅展示偽代碼,且和 ChinaMapDialog.vue 表達的含義一致, 為避免篇幅過長 USAMapDialog.vue 和 UKMapDialog.vue 已省略

2、問題分析

我們通過對這幾個彈窗的分析,對剛才的設計進行抽象發現,這里面都有一個共同的部分,那就是我們對 dialog 的操作代碼都是可以重用的代碼,如果我們能夠編寫出一個抽象的彈窗,然后在恰當的時候將其和業務代碼進行組合,就可以實現 1+1=2 的效果。

3、設計

由于 Vue 在不改變默認的 mixin 原則(默認也最好不要改變,可能會給后來的維護人員帶來困惑)的情況下,如果在混入過程中發生了命名沖突,默認會將方法合并(數據對象在內部會進行遞歸合并,并在發生沖突時以組件數據優先),因此,mixin 無法改寫本來的實現,而我們期望的是,父類提供一個比較抽象的實現,子類繼承父類,若子類需要改表這個行為,子類可以重寫父類的方法(多態的一種實現)。

因此我們決定使用 vue-class-component 這個庫,以類的形式來編寫這個抽象彈窗。

import Vue from 'vue';import Component from 'vue-class-component';@Component({ name: 'AbstractDialog',})export default class AbstractDialog extends Vue {}3.1 事件處理

查看 Element-UI 的官方網站,我們發現 ElDialog 對外拋出 4 個事件,因此,我們需要預先接管這 4 個事件。因此需要在我們的抽象彈窗里預設這個 4 個事件的 handler(因為對于組件的行為的劃分,而對于彈窗的處理本來就應該從屬于彈窗本身,因此我并沒有通過$listeners 去穿透外部調用時的監聽方法)

import Vue from 'vue';import Component from 'vue-class-component';@Component({ name: 'AbstractDialog',})export default class AbstractDialog extends Vue { open() { console.log('彈窗打開,我啥也不做'); } close() { console.log('彈窗關閉,我啥也不做'); } opened() { console.log('彈窗打開,我啥也不做'); } closed() { console.log('彈窗關閉,我啥也不做'); }}3.2 屬性處理

dialog 有很多屬性,默認我們只需要關注的是 before-close 和 title 兩者,因為這兩個屬性從職責上劃分是從屬于彈窗本身的行為,所以我們會在抽象彈窗里面處理開關和 title 的任務

import Vue from 'vue';import Component from 'vue-class-component';@Component({ name: 'AbstractDialog',})export default class AbstractDialog extends Vue { visible = false; t = ''; loading = false; //定義這個屬性的目的是為了實現既可以外界通過傳入屬性改變dialog的屬性,也支持組件內部預設dialog的屬性 attrs = {}; get title() { return this.t; } setTitle(title) { this.t = title; }}3.3 slots 的處理

查看 Element-UI 的官方網站,我們發現,ElDialog 有三個插槽,因此,我們需要接管這三個插槽

1、對 header 的處理

import Vue from 'vue';import Component from 'vue-class-component';@Component({ name: 'AbstractDialog',})class AbstractDialog extends Vue { /* 構建彈窗的Header */ _createHeader(h) { // 判斷在調用的時候,外界是否傳入header的插槽,若有的話,則以外界傳入的插槽為準 var slotHeader = this.$scopedSlots['header'] || this.$slots['header']; if (typeof slotHeader === 'function') { return slotHeader(); } //若用戶沒有傳入插槽,則判斷用戶是否想改寫Header var renderHeader = this.renderHeader; if (typeof renderHeader === 'function') { return <div slot='header'>{renderHeader(h)}</div>; } //如果都沒有的話, 返回undefined,則dialog會使用我們預設好的title }}

2、對 body 的處理

import Vue from 'vue';import Component from 'vue-class-component';@Component({ name: 'AbstractDialog',})class AbstractDialog extends Vue { /** * 構建彈窗的Body部分 */ _createBody(h) { // 判斷在調用的時候,外界是否傳入default的插槽,若有的話,則以外界傳入的插槽為準 var slotBody = this.$scopedSlots['default'] || this.$slots['default']; if (typeof slotBody === 'function') { return slotBody(); } //若用戶沒有傳入插槽,則判斷用戶想插入到body部分的內容 var renderBody = this.renderBody; if (typeof renderBody === 'function') { return renderBody(h); } }}

3、對 footer 的處理

由于 dialog 的 footer 經常都有一些相似的業務,因此,我們需要把這些重復率高的代碼封裝在此,若在某種時候,用戶需要改寫 footer 的時候,再重寫,否則使用默認行為

import Vue from 'vue';import Component from 'vue-class-component';@Component({ name: 'BaseDialog',})export default class BaseDialog extends Vue { showLoading() { this.loading = true; } closeLoading() { this.loading = false; } onSubmit() { this.closeDialog(); } onClose() { this.closeDialog(); } /** * 構建彈窗的Footer */ _createFooter(h) { var footer = this.$scopedSlots.footer || this.$slots.footer; if (typeof footer == 'function') { return footer(); } var renderFooter = this.renderFooter; if (typeof renderFooter === 'function') { return <div slot='footer'>{renderFooter(h)}</div>; } return this.defaultFooter(h); } defaultFooter(h) { return ( <div slot='footer'><el-button type='primary' loading={this.loading} on-click={() => { this.onSubmit(); }}> 保存</el-button><el-button on-click={() => { this.onClose(); }}> 取消</el-button> </div> ); }}

最后,我們再通過 JSX 將我們編寫的這些代碼組織起來,就得到了我們最終想要的抽象彈窗代碼如下:

import Vue from 'vue';import Component from 'vue-class-component';@Component({ name: 'AbstractDialog',})export default class AbstractDialog extends Vue { visible = false; t = ''; loading = false; attrs = {}; get title() { return this.t; } setTitle(title) { this.t = title; } open() { console.log('彈窗打開,我啥也不做'); } close() { console.log('彈窗關閉,我啥也不做'); } opened() { console.log('彈窗打開,我啥也不做'); } closed() { console.log('彈窗關閉,我啥也不做'); } showLoading() { this.loading = true; } closeLoading() { this.loading = false; } openDialog() { this.visible = true; } closeDialog() { if (this.loading) { this.$message.warning('請等待操作完成!'); return; } this.visible = false; } onSubmit() { this.closeDialog(); } onClose() { this.closeDialog(); } /* 構建彈窗的Header */ _createHeader(h) { var slotHeader = this.$scopedSlots['header'] || this.$slots['header']; if (typeof slotHeader === 'function') { return slotHeader(); } var renderHeader = this.renderHeader; if (typeof renderHeader === 'function') { return <div slot='header'>{renderHeader(h)}</div>; } } /** * 構建彈窗的Body部分 */ _createBody(h) { var slotBody = this.$scopedSlots['default'] || this.$slots['default']; if (typeof slotBody === 'function') { return slotBody(); } var renderBody = this.renderBody; if (typeof renderBody === 'function') { return renderBody(h); } } /** * 構建彈窗的Footer */ _createFooter(h) { var footer = this.$scopedSlots.footer || this.$slots.footer; if (typeof footer == 'function') { return footer(); } var renderFooter = this.renderFooter; if (typeof renderFooter === 'function') { return <div slot='footer'>{renderFooter(h)}</div>; } return this.defaultFooter(h); } defaultFooter(h) { return ( <div slot='footer'><el-button type='primary' loading={this.loading} on-click={() => { this.onSubmit(); }}> 保存</el-button><el-button on-click={() => { this.onClose(); }}> 取消</el-button> </div> ); } createContainer(h) { //防止外界誤傳參數影響彈窗本來的設計,因此,需要將某些參數過濾開來,有title beforeClose, visible var { title, beforeClose, visible, ...rest } = Object.assign({}, this.$attrs, this.attrs); return ( <el-dialog{...{ props: { ...rest, visible: this.visible, title: this.title || title || '彈窗', beforeClose: this.closeDialog, }, on: { close: this.close, closed: this.closed, opened: this.opened, open: this.open, },}} >{/* 根據JSX的渲染規則 null、 undefined、 false、 ’’ 等內容將不會在頁面顯示,若createHeader返回undefined,將會使用默認的title */}{this._createHeader(h)}{this._createBody(h)}{this._createFooter(h)} </el-dialog> ); } render(h) { return this.createContainer(h); }}4.應用4.1組件調用

我們就以編寫 ChinaMapDialog.vue 為例,將其進行改寫

<script>import Vue from 'vue';import AbstractDialog from '@/components/AbstractDialog.vue';import Component from 'vue-class-component';@Component({ name: 'ChinaMapDialog',})class ChinaMapDialog extends AbstractDialog { get title() { return '這是中國地圖'; } attrs = { width: '600px', } //編寫一些中國地圖的處理業務邏輯代碼 //編寫彈窗的內容部分 renderBody(h) { return <div>我是中國地圖,我講為你呈現華夏最壯麗的美</div>; }}</script>4.2 使用 Composition API

由于我們是通過組件的實例調用組件的方法,因此我們每次都需要獲取當前組件的 refs 上面的屬性,這樣會使得我們的調用特別長,寫起來也特別麻煩。我們可以通過使用 Composition API 來簡化這個寫法

<template> <div> <china-map-dialog ref='china'></china-map-dialog> <usa-map-dialog ref='usa'></usa-map-dialog> <uk-map-dialog ref='uk'></uk-map-dialog> <el-button @click='openChina'>打開中國地圖</el-button> <el-button @click='openUSA'>打開美國地圖</el-button> <el-button @click='openUK'>打開英國地圖</el-button> </div></template><script>import { ref } from '@vue/composition-api';export default { name: 'View', setup() { const china = ref(null); const usa = ref(null); const uk = ref(null); return { china, usa, uk, }; }, data() { return { /** 將地圖的業務全部抽離到對應的dialog里面去,View只存放調度業務代碼 */ }; }, methods: { // 對百度地圖和谷歌地圖的一些業務處理代碼 省略 openChina() { this.china && this.china.openDialog(); }, openUSA() { this.usa && this.usa.openDialog(); }, openUK() { this.uk && this.uk.openDialog(); }, },};</script>總結

開發這個彈窗所用到的知識點:1、面向對象設計在前端開發中的應用;2、如何編寫基于類風格的組件(vue-class-component 或 vue-property-decorator);3、JSX 在 vue 中的應用;4、$attrs和$listeners 在開發高階組件(個人叫法)中的應用;5、slots 插槽,以及插槽在 JSX 中的用法;6、在 Vue2.x 中使用 Composition API;

到此這篇關于詳解如何在vue+element-ui的項目中封裝dialog組件的文章就介紹到這了,更多相關vue element封裝dialog內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
主站蜘蛛池模板: 在线视频日韩 | 久久国产日韩 | 欧美黑人狂躁日本寡妇 | 亚洲精品亚洲人成人网 | 黄色精品| www四虎com| 亚洲成人av | 精品免费av| 中文字幕一区二区三区在线视频 | 亚洲午夜成激人情在线影院 | 亚洲九九 | 国产精品视频入口 | 欧美一级二级三级视频 | 成人精品视频 | www日韩| 一级毛片视频 | 99re6在线视频精品免费 | 九色影院 | 亚洲情欲网 | 自拍偷拍精品 | 欧美精品一区二区久久 | a级在线观看 | 成人欧美一区二区三区白人 | 日韩av一区二区在线观看 | 在线免费观看毛片 | 在线日韩中文字幕 | 天堂精品久久 | 久久国内 | 精品一区二区电影 | 操操操av| 亚洲精品一区二区三区四区高清 | 国产精品久久久久aaaa | 国产激情午夜 | 成人免费网站视频 | 欧美激情久久久 | 懂色一区二区三区av片 | 亚洲精品电影 | 欧美成人一区二区三区片免费 | 国产高清精品在线 | 亚洲精品视频区 | 黄色片一区 | 啪啪免费网站 | av在线免费观看一区二区 | 中文字幕 亚洲一区 | 一级做a爰片毛片 | а天堂中文最新一区二区三区 | www.色综合| 免费午夜电影 | 日本不卡高字幕在线2019 | 精品日韩欧美一区二区在线播放 | 国产高清免费视频 | 电影91久久久 | 亚洲成人综合网站 | 国产视频三区 | 久久女人 | 国产精品1区 | 久久tv在线观看 | 国产免费无遮挡 | 欧美精品成人 | 欧美激情在线免费观看 | 亚洲高清久久 | 亚洲美女久久 | 国产一二三区在线播放 | 在线成人www免费观看视频 | 亚洲欧美日韩电影 | 国产一区二区电影 | 激情五月婷婷综合 | 亚洲精品一区二区三区在线观看 | 中文字幕91 | 亚洲福利片 | 精品国产欧美 | 黄色国产大片 | 国产精品综合 | 亚洲黄色一区二区三区 | 美女一区 | 国产精品久久一区二区三区 | 国产精品不卡一区 | 香蕉久久久久久 | 天天拍天天操 | 亚洲一区在线日韩在线深爱 | 国产一区二区三区视频在线观看 | 精品国产乱码一区二区三区四区 | 日本在线观看一区二区 | 亚洲精品字幕 | av一区二区在线观看 | 嫩草网址 | 成人国产在线 | 成人性生交大片免费看中文带字幕 | 亚洲最新中文字幕 | 免费av在线网站 | 久草中文在线 | 日韩精品在线免费观看 | 国产欧美精品区一区二区三区 | jizz在线观看 | 欧美视频在线播放 | 久久99精品久久久久久噜噜 | 日韩中文一区 | 欧美日韩久久久久 | 中国91视频| 日本成人在线看 | 国产精品一区二区三区免费 | 99九九久久 | 成人中文网 | 91久久久久久 | 欧美激情欧美激情在线五月 | 国产欧美综合视频 | 一级黄色毛片子 | 亚洲精品一区二区三区蜜桃久 | 国产激情91久久精品导航 | 一区电影| 久久久999精品视频 99国产精品久久久久久久 | 婷婷在线免费视频 | 男人阁久久 | 狠狠爱亚洲| 亚洲视频在线观看 | 日本中文一区二区 | 亚洲毛片在线 | 农村妇女毛片精品久久久 | 成人免费视频网站在线看 | 亚洲一区二区免费视频 | 一级一片在线观看 | 亚洲午夜精品一区二区三区 | 91久久综合亚洲鲁鲁五月天 | 欧美久久视频 | 亚洲欧洲精品成人久久奇米网 | 91视频国产区 | 国产精品久久久久久久久免费丝袜 | 亚洲视频自拍 | 午夜视频在线 | 福利视频网站 | 欧美自拍视频在线观看 | 日韩欧美国产成人一区二区 | 一级黄色录像毛片 | 日本不卡一区二区 | 精品无码久久久久久国产 | av一区二区三区 | 天天操网址 | 午夜av电影 | 国产精品永久免费 | 中文av网站| 国产视频网| 国产精品视频入口 | 色一色视频 | aaaaaa毛片 | 精品一区在线视频 | 亚洲高清在线 | av一二三四| 国产激情免费 | 日韩超碰 | 夜夜爽99久久国产综合精品女不卡 | 日韩日韩日韩日韩日韩日韩 | av电影一区二区 | 精品久久久久久久久久久久久久久 | 日韩视频久久 | 永久av| 99爱视频| 在线观看欧美一区 | 99精品国产高清一区二区麻豆 | 久久久国产视频 | 国产激情 | 国产一区二区精品在线 | 97国产资源 | 日韩在线不卡 | 91精品久久久久久久久久 | 久久爱www. | 亚洲精品一区二区三区麻豆 | av在线综合网 | 9999久久久久| 精品国产91乱码一区二区三区 | 亚洲成人二区 | 午夜影视av| 亚洲综合在线一区二区 | 奇米成人影视 | a级片在线观看 | 波多野结衣三区 | 亚洲一区二区三区 | 九一视频在线播放 | 亚洲国产精品久久久久秋霞蜜臀 | 国产一区二区三区视频在线观看 | 日韩爽妇网 | 久久国产精品久久 | 色婷婷亚洲一区二区三区 | 欧美日韩一区二区三区在线观看 | 亚洲综合精品在线 | 欧美日韩亚洲综合 | 日韩精品视频在线播放 | 日韩在线免费视频 | 国产精品视频免费 | 操久久 | 精品一区二区三区免费 | 欧美一级特黄aaaaaaa在线观看 | 成人精品鲁一区一区二区 | 超碰美女 | 亚洲精品乱码久久久久久蜜桃91 | 97精品一区二区三区 | 在线激情视频 | 久久久成人精品 | 天堂精品 | 91久草视频 | 99精品国自产在线 | 91丁香婷婷综合久久欧美 | 国产精品一区久久久 | 久久精品无码一区二区三区 | 美女视频久久 | av在线一区二区 | 毛片毛片毛片毛片毛片毛片 | 欧美成人精品一区二区男人看 | 国产精品久久久久不卡 | 欧美日韩国产综合在线 | 国产成人综合一区二区三区 | 不卡久久| 一级国产视频 | 日韩有码在线观看 | 白浆在线播放 | 日本二区在线播放 | 欧美日韩一区二区三区 | 精品视频一区二区三区 | 久久精品久久综合 | 九九精品视频在线 | 91久久精品一区 | 欧美成人资源 | 狠狠ri | 亚洲国产精品精华液网站 | 麻豆久久精品 | 免费毛片网 | 99久久夜色精品国产亚洲1000部 | 精品久久久久久久久久久久久久 | 午夜影院在线观看 | 亚洲一区二区在线视频 | 亚洲一区二区三 | 中文字幕在线视频精品 | 国产精品国产精品国产专区不片 | 成人在线免费视频 | 亚洲成人精品网 | 国产欧美一区二区精品性色 | 国产成人免费视频网站视频社区 | 色爱区综合五月激情 | 久久精品亚洲精品国产欧美 | 日韩一二区 | 欧美天天 | 999精品嫩草久久久久久99 | 97在线视频免费 | 色黄网站| 日韩精品免费在线视频 | 综合自拍偷拍 | 日本丶国产丶欧美色综合 | 91精品国产综合久久国产大片 | 色久天堂 | 黄色大片视频 | 特级毛片www | 国产精品久久久久一区二区三区 | 国产福利一区二区三区视频 | 中文学幕专区 | 久草天堂 | 国产视频久久 | 99在线观看| 天天干天天操 | 中文字幕视频在线免费观看 | 欧美黑人一级爽快片淫片高清 | 亚洲视频中文 | 日本理伦片午夜理伦片 | 亚洲视频免费在线 | 日韩一区二区三区在线观看 | 超碰人人插| 中文字幕在线电影观看 | 精品久久久久久久久久久久久久 | 国产1区| 精品久久一区 | 欧美一级全黄 | 91社区在线高清 | 国产精品亚洲一区 | 国产精品成人一区二区 | 99在线看 | 久久精品欧美 | 国内久久精品 | 国产精品久久久久久久久久东京 | 日日干夜夜操 | 亚洲欧美日韩在线一区二区 | 国产精品久久久久久久免费大片 | 午夜成人在线视频 | 国产精选一区二区三区不卡催乳 | www.久久精品视频 | 国产福利在线播放 | 中文字幕日韩专区 | 91视频专区 | 综合五月 | 日日操夜夜操天天操 | 成人午夜视频在线观看 | 毛片在线视频 | 人人草在线观看视频 | 欧美一区二区三区黄 | 成人av入口 | 国产精品日本一区二区在线播放 | 亚洲视频综合 | 国产精品久久国产愉拍 | 亚洲午夜精品a | 九九色综合 | 亚洲欧美日韩电影 | 密室大逃脱第六季大神版在线观看 | 国产综合精品一区二区三区 | a一级免费视频 | 黄视频入口 | av电影手机在线看 | 国产亚洲欧美一区二区 | 中文字幕在线不卡 | 欧美精品黄 | 欧美激情一区二区 | 黑人一级片视频 | 久久精品无码一区二区日韩av | 亚洲一区二区三区视频免费观看 | 啊v在线 | 不卡一区 | 国产亚洲精品久久久久久豆腐 | 中文字幕在线视频网站 | 国产美女网站 | 国产精品久久久久久久久久久久 | 久草精品在线 | 日韩精品www | 精品久久久久久久久久久久久久久 | 亚洲成人一区二区三区 | 国产精品二区一区二区aⅴ污介绍 | 国产一区二区三区精品久久久 | 国产精品久久久久一区二区三区 | 懂色中文一区二区在线播放 | 亚洲一区二区三区四区五区午夜 | 成人av福利| 真人女人一级毛片免费播放 | 久久久国产精品免费 | 成年人黄色一级毛片 | 国产a区 | 欧美日韩一二三区 | 影音先锋 色先锋 | 欧美一区二区 | 国产精品99在线观看 | 欧美成人免费视频 | 在线一区 | 伊人夜夜躁av伊人久久 | 日韩欧美精品一区二区三区 | 91在线观 | 日本阿v视频高清在线中文 中文二区 | 国产在线小视频 | 国产精品国产三级国产aⅴ中文 | 国产 日韩 欧美 中文 在线播放 | www日本在线 | 国产精品美女久久久久久久网站 | 国产激情偷乱视频一区二区三区 | 日韩精品一区二区三区在线观看 | 欧洲精品在线观看 | 精品1区| 久草视频免费在线播放 | 一区在线视频 | 麻豆av电影在线观看 | 精品一区二区三区四区视频 | 亚洲 中文 欧美 日韩在线观看 | 国产欧美一区二区精品婷 | 亚洲精品自拍 | 久久精品国产99国产精品 | 中文字幕av亚洲精品一部二部 | 欧美激情一区二区三级高清视频 | 中文字幕在线视频精品 | 成人亚洲精品久久久久软件 | 蜜桃视频一区二区三区 | 午夜寂寞福利视频 | 亚洲精品9999 | 亚洲精品久久久久久动漫 | 操人网站| 日韩大片播放器 | 欧美人成在线视频 | 成人精品一区二区三区 | 精品乱子伦一区二区三区 | 能直接看的av网站 | 国产色99精品9i | 日韩一区二区观看 | 成人在线免费 | av一区二区三区四区 | 亚洲日本欧美日韩高观看 | 美女张开腿视频网站免费 | 亚洲一区二区三区免费观看 | 91视频大全| 美女久久久久 | 亚州av | 日韩欧美在线播放 | 精品日韩一区二区三区 | 久久av一区二区三区 | 一级黄色爱爱视频 | 国产精品久久久久永久免费观看 | 欧美一级视频免费 | 国产精品久久久久婷婷二区次 | 免费中文字幕 | 超碰在线播 | 国产高清av在线一区二区三区 | 欧美一级片在线 | 国产精品精品视频一区二区三区 | 日日干夜夜操 | 成人网址在线观看 | 黄色毛片在线看 | 好姑娘影视在线观看高清 | 99国内精品久久久久久久 | 国产真实精品久久二三区 | 9l蝌蚪porny中文自拍 | 日韩欧美成人一区二区三区 | 黄色av网站免费看 | 精品国产一区二区三区久久影院 | 欧美性区| 久久网国产 | 国产乱码精品一区二区三区忘忧草 | 久久久久国产 | 色婷婷综合久色 | 91久久看片| 欧美不卡视频 | 午夜精品久久久久久久久 | 美女视频一区二区三区 | 欧美日韩国产精品 | 精品久久香蕉国产线看观看亚洲 | 青青草视频在线免费观看 | 日韩欧美在线视频 | 欧美日韩三区 | 99免费视频 | 欧美一级精品片在线看 | 亚洲www啪成人一区二区 | 日韩电影在线一区 | 日韩精品一二三区 | 69av.com| 一区小视频 | 亚洲精品久久久久久久久久久久久 | 久热精品视频在线播放 | 97国产精品视频人人做人人爱 | 亚洲精品一区二区三区 | 日本免费三片免费观看 | 一级片日韩| 午夜成年人 | 亚洲国产精品一区二区久久,亚洲午夜 | 一区二区三区高清 | av男人电影天堂 | 日韩免费| 欧美xxxⅹ性欧美大片 | 一区二区三区在线 | 欧 | 久久精品免费观看视频 | 成人午夜免费视频 | 亚洲一区二区三区在线播放 | 国产精品久久久久久久 | 久久综合伊人 | 午夜精品久久久久久久 | 欧美亚洲视频在线观看 | 国产午夜精品美女视频明星a级 | 91麻豆精品国产91久久久资源速度 | 国产三级精品在线 | 久草成人| 精品国产一区探花在线观看 | 国产99精品视频 | 成人在线网站 | 99久久99久久 | 国产日韩一区二区三免费高清 | 91精品久久久久久久久久 | 黄色成人av | 狠狠撸在线视频 | 国产欧美日韩综合精品一区二区 | 在线视频中文字幕 | 四虎免费紧急入口观看 | 成人无遮挡毛片免费看 | 美女操av | 国产精品伊人影院 | 久久久久国产 | 精品日韩欧美一区二区三区 | 日韩在线视频第一页 | 日韩av免费在线观看 | av在线三级 | 久久99成人 | 精品福利在线视频 | 一级片在线观看视频 | 国产欧美精品一区二区三区四区 | 特黄色一级片 | 国产一级二级毛片 | 欧美黄色一级毛片 | 极品videossex中国妞hd | 亚洲aⅴ天堂av在线电影软件 | 日本免费www | 欧美在线激情 | 亚洲精品国产setv | 暖暖av | 久久手机视频 | 中文字幕_第2页_高清免费在线 | 免费看91| 嫩草网址 | 日韩成人视屏 | 色综久久 | 麻豆久久精品 | 日韩欧美a级v片免费播放 | 国产精品99久久免费观看 | 一区二区三区视频免费看 | 亚洲视频三区 | 国产在线精品一区二区 | 日韩av一区二区三区四区 | 99久久免费视频在线观看 | 永久在线观看 | 中文无吗| 国产一级做a爰片在线看免费 | 国产免费观看一区二区三区 | 爱操av | 91香蕉视频| 欧美视频在线观看 | 天天插狠狠插 | 久久久亚洲精品视频 | 亚洲视频一区二区三区 | bxbx成人精品一区二区三区 | 久久九九精品久久 | 日韩精品一区二区三区在线 | 天天摸夜夜摸爽爽狠狠婷婷97 | 久久aⅴ国产欧美74aaa | 国产成人精品一区二区在线 | 精品国产一区二区三区日日嗨 | 欧美激情小视频 | 亚洲一区 | 欧美精品不卡 | 久久精品国产一区 | 99精品国产高清一区二区麻豆 | 午夜影院免费版 | 中文久久 | 中文字幕亚洲精品 | 亚洲一区在线视频 | 不卡视频一区 | 精品毛片 | 亚洲视频一区二区三区四区 | 国产一区二区三区久久久 | 国产高潮失禁喷水爽网站 | 欧美日韩亚洲国内综合网 | 亚洲精品欧美 | 3bmm在线观看视频免费 | 亚洲久久一区 | 一区二区三区有限公司 | 日韩国产精品视频 | 精品国产一区二区三区久久久 | 91原创国产 | 成年人精品视频 | 国产精品亚洲区 | 老司机午夜免费精品视频 | 中文字幕亚洲视频 | 亚洲国产精品福利 | 亚洲成人精品 | 国产精品影院在线观看 | 中文字幕成人 | 国产高清视频在线 | 夜久久| 午夜精品久久久久 | 国产精彩视频 | 亚洲精品久久 | 男人天堂999 | 一区二区在线免费观看 | 麻豆免费短视频 | 青青草视频在线免费观看 | 久久久久国产一级毛片 | 天堂资源 | 国产精品久久久久久久久久新婚 | 国产一级毛片国语一级 | 国产精品2区| 91亚洲视频 | 日韩免费视频一区二区 | 国产精品久久久久久久久久久久 | 毛片国产| 日韩一区二区影视 | 天天干干干干 | 九色91九色porny永久 | 久久亚洲一区二区三区四区 | 大桥未久亚洲精品久久久强制中出 | 日韩在线播放一区 | 国产成人一区二区三区 | 福利网址| 成人免费观看49www在线观看 | 一级毛片国产 | 黄色小视频网 | 久久亚洲天堂 | 四虎黄色网 | 日韩欧美一级精品久久 | 久久精品成人免费视频 | 国产精品污www在线观看 | 国产精品一区二区三区在线播放 | 天天操天天添 | 欧美喷潮久久久xxxxx | 男女全黄一级一级高潮免费看 | 欧美视频免费在线 | 国产精品久久精品 | 最新午夜| 99re在线观看 | 日韩亚洲欧美综合 | 黄毛片视频| www.嫩草 | 日韩久久久久 | 久久精品国产免费 | 中文字幕日韩视频 | 欧美一区二区免费 | 欧美一区二区三区四区不卡 | 亚洲激情在线 | 国产成人精品午夜 | 久久亚洲精品中文字幕 | 中文字幕成人影院 | 国产成人精品免费视频 | 亚洲高清www| 黑人精品xxx一区一二区 | 精品国产一区探花在线观看 | 男人的天堂在线视频 | 婷婷综合五月 | 神马久久久久久久 | 极品久久| 亚洲av毛片| 欧美激情精品久久久久久变态 | 亚洲91精品 | 日韩视频在线免费观看 | 久久精品性 | 国产色网站 | 国产精品视频播放 | 一本色道精品久久一区二区三区 | 亚洲中字在线 | 亚洲一区中文字幕在线观看 | 国产激情一区二区三区 | 国产日韩精品视频 |