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

AngularJS數(shù)據(jù)建模

開發(fā) 前端
我們知道,AngularJS并沒有自帶立等可用的數(shù)據(jù)建模方案。而是以相當(dāng)抽象的方式,讓我們?cè)赾ontroller中使用JSON數(shù)據(jù)作為模 型。但是隨著時(shí)間的推移和項(xiàng)目的成長,我意識(shí)到這種建模的方式不再能滿足我們項(xiàng)目的需求。在這篇文章中我會(huì)介紹在我的AngularJS應(yīng)用中處理數(shù)據(jù)建 模的方式。

我們知道,AngularJS并沒有自帶立等可用的數(shù)據(jù)建模方案。而是以相當(dāng)抽象的方式,讓我們?cè)赾ontroller中使用JSON數(shù)據(jù)作為模 型。但是隨著時(shí)間的推移和項(xiàng)目的成長,我意識(shí)到這種建模的方式不再能滿足我們項(xiàng)目的需求。在這篇文章中我會(huì)介紹在我的AngularJS應(yīng)用中處理數(shù)據(jù)建 模的方式。

為Controller定義模型

讓我們從一個(gè)簡單的例子開始。我想要顯示一個(gè)書本(book)的頁面。下面是控制器(Controller):

BookController

  1. app.controller('BookController', ['$scope'function($scope) { 
  2.     $scope.book = { 
  3.         id: 1, 
  4.         name: 'Harry Potter'
  5.         author: 'J. K. Rowling'
  6.         stores: [ 
  7.             { id: 1, name: 'Barnes & Noble', quantity: 3}, 
  8.             { id: 2, name: 'Waterstones', quantity: 2}, 
  9.             { id: 3, name: 'Book Depository', quantity: 5} 
  10.         ] 
  11.     }; 
  12. }]); 

這個(gè)控制器創(chuàng)建了一個(gè)書本的模型,我們可以在后面的模板中(templage)中使用它。

template for displaying a book

  1. <div ng-controller="BookController"> 
  2.     Id: <span ng-bind="book.id"></span> 
  3.       
  4.     Name:<input type="text" ng-model="book.name" /> 
  5.       
  6.     Author: <input type="text" ng-model="book.author" /> 
  7. </div> 
假如我們需要從后臺(tái)的api獲取書本的數(shù)據(jù),我們需要使用$http:

BookController with $http

  1. app.controller('BookController', ['$scope''$http'function($scope, $http) { 
  2.     var bookId = 1; 
  3.   
  4.     $http.get('ourserver/books/' + bookId).success(function(bookData) { 
  5.         $scope.book = bookData; 
  6.     }); 
  7. }]); 

注意到這里的bookData仍然是一個(gè)JSON對(duì)象。接下來我們想要使用這些數(shù)據(jù)做一些事情。比如,更新書本信息,刪除書本,甚至其他的一些不涉及到后臺(tái)的操作,比如根據(jù)請(qǐng)求的圖片大小生成一個(gè)書本圖片的url,或者判斷書本是否有效。這些方法都可以被定義在控制器中。

BookController with several book actions

  1. app.controller('BookController', ['$scope''$http'function($scope, $http) { 
  2.     var bookId = 1; 
  3.   
  4.     $http.get('ourserver/books/' + bookId).success(function(bookData) { 
  5.         $scope.book = bookData; 
  6.     }); 
  7.   
  8.     $scope.deleteBook = function() { 
  9.         $http.delete('ourserver/books/' + bookId); 
  10.     }; 
  11.   
  12.     $scope.updateBook = function() { 
  13.         $http.put('ourserver/books/' + bookId, $scope.book); 
  14.     }; 
  15.   
  16.     $scope.getBookImageUrl = function(width, height) { 
  17.         return 'our/image/service/' + bookId + '/width/height'
  18.     }; 
  19.   
  20.     $scope.isAvailable = function() { 
  21.         if (!$scope.book.stores || $scope.book.stores.length === 0) { 
  22.             return false
  23.         } 
  24.         return $scope.book.stores.some(function(store) { 
  25.             return store.quantity > 0; 
  26.         }); 
  27.     }; 
  28. }]); 

然后在我們的模板中:

template for displaying a complete book

  1. <div ng-controller="BookController"
  2.     <div ng-style="{ backgroundImage: 'url(' + getBookImageUrl(100, 100) + ')' }"></div> 
  3.     Id: <span ng-bind="book.id"></span> 
  4.       
  5.     Name:<input type="text" ng-model="book.name" /> 
  6.       
  7.     Author: <input type="text" ng-model="book.author" /> 
  8.       
  9.     Is Available: <span ng-bind="isAvailable() ? 'Yes' : 'No' "></span> 
  10.       
  11.     <button ng-click="deleteBook()">Delete</button> 
  12.       
  13.     <button ng-click="updateBook()">Update</button> 
  14. </div> 

#p#

在controllers之間共享Model

如果書本的結(jié)構(gòu)和方法只和一個(gè)控制器有關(guān),那我們現(xiàn)在的工作已經(jīng)可以應(yīng)付。但是隨著應(yīng)用的增長,會(huì)有其他的控制器也需要和書本打交道。那些控制器很 多時(shí)候也需要獲取書本,更新它,刪除它,或者獲得它的圖片url以及看它是否有效。因此,我們需要在控制器之間共享這些書本的行為。我們需要使用一個(gè)返回 書本行為的factory來實(shí)現(xiàn)這個(gè)目的。在動(dòng)手寫一個(gè)factory之前,我想在這里先提一下,我們創(chuàng)建一個(gè)factory來返回帶有這些book輔助 方法的對(duì)象,但我更傾向于使用prototype來構(gòu)造一個(gè)Book類,我覺得這是更正確的選擇:

Book model service

  1. app.factory('Book', ['$http'function($http) { 
  2.     function Book(bookData) { 
  3.         if (bookData) { 
  4.             this.setData(bookData): 
  5.         } 
  6.         // Some other initializations related to book 
  7.     }; 
  8.     Book.prototype = { 
  9.         setData: function(bookData) { 
  10.             angular.extend(this, bookData); 
  11.         }, 
  12.         load: function(id) { 
  13.             var scope = this
  14.             $http.get('ourserver/books/' + bookId).success(function(bookData) { 
  15.                 scope.setData(bookData); 
  16.             }); 
  17.         }, 
  18.         deletefunction() { 
  19.             $http.delete('ourserver/books/' + bookId); 
  20.         }, 
  21.         update: function() { 
  22.             $http.put('ourserver/books/' + bookId, this); 
  23.         }, 
  24.         getImageUrl: function(width, height) { 
  25.             return 'our/image/service/' + this.book.id + '/width/height'
  26.         }, 
  27.         isAvailable: function() { 
  28.             if (!this.book.stores || this.book.stores.length === 0) { 
  29.                 return false
  30.             } 
  31.             return this.book.stores.some(function(store) { 
  32.                 return store.quantity > 0; 
  33.             }); 
  34.         } 
  35.     }; 
  36.     return Book; 
  37. }]); 

這種方式下,書本相關(guān)的所有行為都被封裝在Book服務(wù)內(nèi)。現(xiàn)在,我們?cè)贐ookController中來使用這個(gè)亮眼的Book服務(wù)。

BookController that uses Book model

  1. app.controller('BookController', ['$scope''Book'function($scope, Book) { 
  2.     $scope.book = new Book(); 
  3.     $scope.book.load(1); 
  4. }]); 

正如你看到的,控制器變得非常簡單。它創(chuàng)建一個(gè)Book實(shí)例,指派給scope,并從后臺(tái)加載。當(dāng)書本被加載成功時(shí),它的屬性會(huì)被改變,模板也隨著 被更新。記住其他的控制器想要使用書本功能,只要簡單地注入Book服務(wù)即可。此外,我們還要改變template使用book的方法。

template that uses book instance

  1. <div ng-controller="BookController"> 
  2.     <div ng-style="{ backgroundImage: 'url(' + book.getImageUrl(100, 100) + ')' }"></div> 
  3.     Id: <span ng-bind="book.id"></span> 
  4.       
  5.     Name:<input type="text" ng-model="book.name" /> 
  6.       
  7.     Author: <input type="text" ng-model="book.author" /> 
  8.       
  9.     Is Available: <span ng-bind="book.isAvailable() ? 'Yes' : 'No' "></span> 
  10.       
  11.     <button ng-click="book.delete()">Delete</button> 
  12.       
  13.     <button ng-click="book.update()">Update</button> 
  14. </div> 

到這里,我們知道了如何建模一個(gè)數(shù)據(jù),把他的方法封裝到一個(gè)類中,并且在多個(gè)控制器中共享它,而不需要寫重復(fù)代碼。

在多個(gè)控制器中使用相同的書本模型

我們定義了一個(gè)書本模型,并且在多個(gè)控制器中使用了它。在使用了這種建模架構(gòu)之后你會(huì)注意到有一個(gè)嚴(yán)重的問題。到目前為止,我們假設(shè)多個(gè)控制器對(duì)書本進(jìn)行操作,但如果有兩個(gè)控制器同時(shí)處理同一本書會(huì)是什么情況呢?

假設(shè)我們頁面的一塊區(qū)域我們所有書本的名稱,另一塊區(qū)域可以更新某一本書。對(duì)應(yīng)這兩塊區(qū)域,我們有兩個(gè)不同的控制器。***個(gè)加載書本列表,第二個(gè)加 載特定的一本書。我們的用戶在第二塊區(qū)域中修改了書本的名稱并且點(diǎn)擊“更新”按鈕。更新操作成功后,書本的名稱會(huì)被改變。但是在書本列表中,這個(gè)用戶始終 看到的是修改之前的名稱!真實(shí)的情況是我們對(duì)同一本書創(chuàng)建了兩個(gè)不同的書本實(shí)例——一個(gè)在書本列表中使用,而另一個(gè)在修改書本時(shí)使用。當(dāng)用戶修改書本名稱 的時(shí)候,它實(shí)際上只修改了后一個(gè)實(shí)例中的屬性。然而書本列表中的書本實(shí)例并未得到改變。

解決這個(gè)問題的辦法是在所有的控制器中使用相同的書本實(shí)例。在這種方式下,書本列表和書本修改的頁面和控制器都持有相同的書本實(shí)例,一旦這個(gè)實(shí)例發(fā) 生變化,就會(huì)被立刻反映到所有的視圖中。那么按這種方式行動(dòng)起來,我們需要?jiǎng)?chuàng)建一個(gè)booksManager服務(wù)(我們沒有大寫開頭的b字母,是因?yàn)檫@是 一個(gè)對(duì)象而不是一個(gè)類)來管理所有的書本實(shí)例池,并且富足返回這些書本實(shí)例。如果被請(qǐng)求的書本實(shí)例不在實(shí)例池中,這個(gè)服務(wù)會(huì)創(chuàng)建它。如果已經(jīng)在池中,那么 就直接返回它。請(qǐng)牢記,所有的加載書本的方法最終都會(huì)被定義在booksManager服務(wù)中,因?yàn)樗俏ㄒ坏奶峁緦?shí)例的組件。

#p#

booksManager service

  1. app.factory('booksManager', ['$http''$q''Book'function($http, $q, Book) { 
  2.     var booksManager = { 
  3.         _pool: {}, 
  4.         _retrieveInstance: function(bookId, bookData) { 
  5.             var instance = this._pool[bookId]; 
  6.   
  7.             if (instance) { 
  8.                 instance.setData(bookData); 
  9.             } else { 
  10.                 instance = new Book(bookData); 
  11.                 this._pool[bookId] = instance; 
  12.             } 
  13.   
  14.             return instance; 
  15.         }, 
  16.         _search: function(bookId) { 
  17.             return this._pool[bookId]; 
  18.         }, 
  19.         _load: function(bookId, deferred) { 
  20.             var scope = this
  21.   
  22.             $http.get('ourserver/books/' + bookId) 
  23.                 .success(function(bookData) { 
  24.                     var book = scope._retrieveInstance(bookData.id, bookData); 
  25.                     deferred.resolve(book); 
  26.                 }) 
  27.                 .error(function() { 
  28.                     deferred.reject(); 
  29.                 }); 
  30.         }, 
  31.         /* Public Methods */ 
  32.         /* Use this function in order to get a book instance by it's id */ 
  33.         getBook: function(bookId) { 
  34.             var deferred = $q.defer(); 
  35.             var book = this._search(bookId); 
  36.             if (book) { 
  37.                 deferred.resolve(book); 
  38.             } else { 
  39.                 this._load(bookId, deferred); 
  40.             } 
  41.             return deferred.promise; 
  42.         }, 
  43.         /* Use this function in order to get instances of all the books */ 
  44.         loadAllBooks: function() { 
  45.             var deferred = $q.defer(); 
  46.             var scope = this
  47.             $http.get('ourserver/books) 
  48.                 .success(function(booksArray) { 
  49.                     var books = []; 
  50.                     booksArray.forEach(function(bookData) { 
  51.                         var book = scope._retrieveInstance(bookData.id, bookData); 
  52.                         books.push(book); 
  53.                     }); 
  54.   
  55.                     deferred.resolve(books); 
  56.                 }) 
  57.                 .error(function() { 
  58.                     deferred.reject(); 
  59.                 }); 
  60.             return deferred.promise; 
  61.         }, 
  62.         /*  This function is useful when we got somehow the book data and we wish to store it or update the pool and get a book instance in return */ 
  63.         setBook: function(bookData) { 
  64.             var scope = this
  65.             var book = this._search(bookData.id); 
  66.             if (book) { 
  67.                 book.setData(bookData); 
  68.             } else { 
  69.                 book = scope._retrieveInstance(bookData); 
  70.             } 
  71.             return book; 
  72.         }, 
  73.   
  74.     }; 
  75.     return booksManager; 
  76. }]); 

下面是我們的EditableBookController和BooksListController兩個(gè)控制器的代碼:

EditableBookController and BooksListController that uses booksManager

  1. app.factory('Book', ['$http'function($http) { 
  2.     function Book(bookData) { 
  3.         if (bookData) { 
  4.             this.setData(bookData): 
  5.         } 
  6.         // Some other initializations related to book 
  7.     }; 
  8.     Book.prototype = { 
  9.         setData: function(bookData) { 
  10.             angular.extend(this, bookData); 
  11.         }, 
  12.         deletefunction() { 
  13.             $http.delete('ourserver/books/' + bookId); 
  14.         }, 
  15.         update: function() { 
  16.             $http.put('ourserver/books/' + bookId, this); 
  17.         }, 
  18.         getImageUrl: function(width, height) { 
  19.             return 'our/image/service/' + this.book.id + '/width/height'
  20.         }, 
  21.         isAvailable: function() { 
  22.             if (!this.book.stores || this.book.stores.length === 0) { 
  23.                 return false
  24.             } 
  25.             return this.book.stores.some(function(store) { 
  26.                 return store.quantity > 0; 
  27.             }); 
  28.         } 
  29.     }; 
  30.     return Book; 
  31. }]); 

需要注意的是,模塊(template)中還是保持原來使用book實(shí)例的方式。現(xiàn)在應(yīng)用中只持有一個(gè)id為1的book實(shí)例,它發(fā)生的所有改變都會(huì)被反映到使用它的各個(gè)頁面上。

總結(jié)

在這片文章中,我建議了AngularJS中建模數(shù)據(jù)的一種架構(gòu)。首先,我展示了AngularJS默認(rèn)的數(shù)據(jù)模型綁定,然后講了如何封裝模型的方 法和操作從而可以在不同的控制其中重用它們,***我解釋了如何管理模型實(shí)例從而使得所有的改變都能被反映到應(yīng)用中各個(gè)相關(guān)的視圖上。

希望這篇文章能在如何實(shí)現(xiàn)數(shù)據(jù)建模上給你一些啟示。

原文鏈接:http://www.webdeveasy.com/angularjs-data-model/

譯文鏈接:http://blog.jobbole.com/54817/

責(zé)任編輯:陳四芳 來源: 伯樂在線
相關(guān)推薦

2020-10-10 06:53:18

數(shù)據(jù)建模數(shù)據(jù)庫

2012-07-26 08:32:38

MongoDB

2017-02-05 14:59:18

MongoDB數(shù)據(jù)建模數(shù)據(jù)庫

2012-05-15 10:28:29

NoSQL數(shù)據(jù)庫建模技術(shù)

2012-05-15 11:03:22

NoSQL數(shù)據(jù)建模

2016-05-10 10:43:02

2021-07-30 18:35:57

數(shù)據(jù)建模聚類

2023-08-14 16:56:53

2010-06-30 16:29:29

UML數(shù)據(jù)建模

2024-01-10 08:22:38

物聯(lián)網(wǎng)數(shù)據(jù)分析建模人工智能

2025-06-10 03:00:00

數(shù)據(jù)倉庫數(shù)據(jù)模型大數(shù)據(jù)

2021-08-26 23:01:41

人工智能氣候大數(shù)據(jù)

2019-09-27 12:44:03

數(shù)據(jù)建模企業(yè)數(shù)據(jù)存儲(chǔ)

2019-08-01 13:09:57

大數(shù)據(jù)分析建模信息化

2010-06-30 16:52:23

UML數(shù)據(jù)建模

2014-07-11 09:24:56

終端調(diào)試AngularJS

2016-02-26 15:22:15

AngularJS

2014-03-12 10:22:59

AngularJS指令

2014-05-30 10:51:55

PhpStormAngularJS

2009-01-18 16:01:42

數(shù)據(jù)倉庫數(shù)據(jù)建模常用術(shù)語
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

免费观看特级毛片| 国产精品人人爽人人爽| 三级小视频在线观看| 欧美一级二区| 日韩一区在线视频| 久久中文久久字幕| 日韩福利在线| 国产黄色一级大片| 美女尤物久久精品| 大量国产精品视频| 中文字幕第4页| 欧美久久亚洲| 在线精品视频免费观看| 日本高清xxxx| 国产精品秘入口| 国产成人精品影视| 国产精品午夜一区二区欲梦| 精品少妇爆乳无码av无码专区| 蜜臀91精品国产高清在线观看| 欧美一区二区福利视频| 中文字幕日本最新乱码视频| 日本资源在线| 国产精品高潮久久久久无| 久久国产精品高清| 亚洲乱码在线观看| 精品午夜一区二区三区在线观看| 欧洲亚洲免费在线| 日本熟妇乱子伦xxxx| 欧美日韩视频一区二区三区| 色婷婷综合成人av| 日韩女同一区二区三区| 欧美激情影院| 99riav视频在线观看| 成人毛片老司机大片| 成人黄色短视频在线观看| www.久久精品视频| 99精品国产在热久久婷婷| 久久99热精品| 国产高清在线免费观看| 91精品一区二区三区综合在线爱| 亚洲视频免费一区| 亚洲永久精品ww.7491进入| 精品视频高潮| 亚洲精品成人久久久| 国模私拍在线观看| jizz国产精品| 精品国产亚洲在线| 在线观看一区二区三区四区| 91精品丝袜国产高跟在线| 91精品国产一区二区人妖| 中文字幕久久av| 国产亚洲人成a在线v网站 | 久88久久88久久久| 国产美女搞久久| 一级片在线免费观看视频| 奇米精品一区二区三区在线观看| 国产精品久久97| 中文字幕日韩经典| 久久精品国产精品亚洲红杏| 国产美女精品免费电影| 国产人妖一区二区| 国产精品77777| 高清国产在线一区| 国精产品乱码一区一区三区四区| 国产成人免费视频| 狠狠色噜噜狠狠色综合久| 四虎免费在线观看| 国产无人区一区二区三区| 日韩国产欧美精品| 毛片在线看网站| 亚洲另类春色国产| 国产一区二区三区小说| 性爽视频在线| 欧美日韩国产一级二级| 91蝌蚪视频在线| 福利在线一区| 亚洲午夜性刺激影院| 制服丨自拍丨欧美丨动漫丨| 欧美激情aⅴ一区二区三区| 国外成人在线直播| 亚洲中文无码av在线| 精品一区二区三区免费观看| 国产精华一区二区三区| 亚州男人的天堂| 国产精品乱码一区二区三区软件 | 红桃视频国产一区| 538国产精品一区二区免费视频| 成年人av网站| 国产一区二区不卡| 蜜桃传媒视频麻豆第一区免费观看| 成人18在线| 亚洲一区二区三区激情| 三年中国国语在线播放免费| 免费一级欧美在线大片| 亚洲欧美国产一本综合首页| 婷婷伊人五月天| 久久亚洲欧美| 99re在线视频观看| 国产女人在线观看| 亚洲一区欧美一区| 日本成人黄色网| 91成人短视频| 久久激情视频免费观看| 影音先锋亚洲天堂| 国内欧美视频一区二区| 你懂的网址一区二区三区| 4438x成人网全国最大| 色欧美日韩亚洲| 久久久久99人妻一区二区三区| 在线观看欧美理论a影院| 欧美国产亚洲精品久久久8v| 波多野结衣小视频| 99re成人精品视频| 国产精品免费看久久久无码| www.一区| 亚洲无限av看| 男女啊啊啊视频| 国产成人亚洲精品狼色在线| 亚洲精品免费在线看| 深夜av在线| 欧美电影精品一区二区| 中文字幕美女视频| 免费成人小视频| 欧洲亚洲一区二区| 男女羞羞在线观看| 日韩欧美一区二区视频| 性色国产成人久久久精品| 久久久一二三| 美女亚洲精品| 欧美一级鲁丝片| 精品国产不卡一区二区三区| 成年人午夜剧场| 精品一区免费av| 亚洲国内在线| se69色成人网wwwsex| 亚洲色图五月天| 国产精品第5页| 91视频.com| 女人和拘做爰正片视频| 国产美女撒尿一区二区| 欧美精品久久久久久久久| 国产成人三级一区二区在线观看一| 国产精品拍天天在线| 久热精品在线播放| 欧美一区二区三区高清视频| 国产成人精品在线观看| www.中文字幕久久久| 在线欧美日韩精品| 四季av中文字幕| 激情综合网av| 小泽玛利亚av在线| 午夜日韩影院| 午夜精品久久久久久久99黑人| 五月婷婷在线播放| 色天天综合久久久久综合片| 亚洲国产日韩一区无码精品久久久| 久久久久国产精品一区二区| 亚洲国产综合自拍| 国产专区精品| 久久久久国色av免费观看性色| 国模私拍视频在线| 精品久久久久久| 亚洲一级中文字幕| 麻豆久久一区二区| 蜜臀av.com| 国产成人一二片| 人体精品一二三区| 日p在线观看| 日韩一区二区三区免费观看| 成年人av电影| 91视频精品在这里| 精品亚洲一区二区三区四区| 亚洲理论电影网| 国产日韩亚洲精品| 中文.日本.精品| 欧美另类69精品久久久久9999| 二区三区在线视频| 91国模大尺度私拍在线视频| 亚洲女人久久久| 99久久综合精品| 手机在线看福利| 欧美激情综合色综合啪啪| 精品国产乱码久久久久软件| 日本黄色一区| 欧美激情一级二级| 97超碰国产一区二区三区| 欧美一二三区精品| 波多野结衣啪啪| 亚洲精品视频一区| 亚洲色成人网站www永久四虎| 国产自产v一区二区三区c| 人妻av中文系列| 日本大胆欧美| 国模精品娜娜一二三区| 激情久久99| 97视频色精品| 久草资源在线| 亚洲欧美第一页| 超碰福利在线观看| 91国产福利在线| 国产性一乱一性一伧一色| 欧美极品少妇xxxxⅹ高跟鞋| 四虎成人免费视频| 九九视频精品免费| 91看片就是不一样| 一区二区亚洲精品| 一区二区三区日韩视频| 在线日本制服中文欧美| 国产乱码一区| 成人自拍视频| 国产精品成人品| 一区二区乱码| 欧美精品九九久久| 中文字幕在线观看播放| 中文字幕欧美视频在线| 男人的天堂av高清在线| 亚洲精品在线电影| 国产欧美熟妇另类久久久| 欧美影视一区在线| 精品免费囯产一区二区三区| 亚洲一区二区三区四区在线| 中文字幕无码日韩专区免费| 国产欧美精品日韩区二区麻豆天美 | aaa在线播放视频| 欧美成人精品影院| 欧美a在线看| 中文字幕v亚洲ⅴv天堂| 久久这里精品| 亚洲美女久久久| 亚洲 国产 欧美 日韩| 亚洲成人三级在线| www黄色网址| 日韩一级成人av| 国产高清视频免费观看| 在线不卡中文字幕播放| 亚洲天堂视频网| 欧美图区在线视频| 国产在线观看第一页| 欧洲精品视频在线观看| 无码人妻一区二区三区免费| 色偷偷久久人人79超碰人人澡| 一区二区三区视频免费看| 亚洲va国产va欧美va观看| 国产一级生活片| 午夜久久电影网| 国产成人在线观看网站| 精品国产91久久久久久老师| 日韩污视频在线观看| 亚洲777理论| 四虎精品永久在线| 色综合久久99| 亚洲av无码不卡| 欧美日韩激情一区| 97精品人妻一区二区三区| 91麻豆精品国产91久久久资源速度| 91麻豆视频在线观看| 91精品黄色片免费大全| 亚洲精品一区二区口爆| 亚洲成人性视频| 牛牛澡牛牛爽一区二区| 中文字幕精品国产| www在线视频| 性欧美视频videos6一9| 国产日韩电影| 国产精品私拍pans大尺度在线| 亚洲欧洲二区| 国产精品播放| 九九热线有精品视频99| 一区不卡字幕| 狠狠入ady亚洲精品| 国产又黄又猛视频| 韩国一区二区视频| 国产精品久久久久久久无码| 久久精品视频免费| 最新一区二区三区| 天天综合日日夜夜精品| 黄色网址中文字幕| 日韩一区二区三区免费看| 视频福利在线| 中文字幕欧美专区| 99re6在线精品视频免费播放| 国产精品va在线播放我和闺蜜| 日韩在线电影| 国产在线一区二| 欧美日韩伦理| www.夜夜爱| 日本sm残虐另类| av在线天堂网| 中文字幕第一区综合| 久久久国产精品人人片| 91黄色小视频| 色欲av伊人久久大香线蕉影院| 一区二区三区久久精品| 丁香花在线电影小说观看| 国产精品久久久久久久久久东京| 日韩免费一级| 日韩精品资源| 在线成人h网| 国产精品久久久久久9999| 91女神在线视频| 精国产品一区二区三区a片| 欧美影视一区二区三区| 色综合免费视频| 久久av.com| 免费一级欧美在线观看视频| 九色视频成人porny| 中文字幕一区二区三区久久网站 | 视频一区国产精品| 亚洲久久视频| 99热这里只有精品2| 欧美国产精品中文字幕| 超碰超碰超碰超碰| 精品国产乱码久久| 成人日日夜夜| 国产精品一区二区电影| 欧美精美视频| 日本一道本久久| 国产91精品久久久久久久网曝门| 后入内射无码人妻一区| 色婷婷综合久久| 手机看片一区二区| 欧美黄色片视频| 日本免费一区二区三区视频| 一区二区三区一级片| 蜜臀久久久久久久| 谁有免费的黄色网址| 一区中文字幕| 国产亚洲精品久久久久久牛牛| 欧美黑人xx片| 亚洲xxx大片| 91精品一区国产高清在线gif| 亚洲最大成人在线观看| 日本一区二区三区免费乱视频| www.国产高清| 亚洲韩国日本中文字幕| 99久久精品免费看国产小宝寻花| 99国产超薄肉色丝袜交足的后果| 2023国产精品久久久精品双| 高潮一区二区三区| 国产精品国产三级国产a| 伊人免费在线观看| 日韩一区二区福利| 成人污版视频| 国产日产欧美一区二区| 国产乱理伦片在线观看夜一区| 少妇人妻丰满做爰xxx| 欧美一级国产精品| 女人黄色免费在线观看| 成人免费91在线看| 9国产精品视频| 欧美多人猛交狂配| 色婷婷国产精品久久包臀| 国产在线一二| 国产精品专区第二| 亚洲最大黄网| 国产人妖在线观看| 精品毛片三在线观看| 久久伊伊香蕉| 成人黄色生活片| 欧美特黄一区| 日本一卡二卡在线| 色视频一区二区| 老司机精品影院| 国产精品二区三区四区| 国产日韩一区二区三区在线| 免费看裸体网站| 8v天堂国产在线一区二区| 色呦呦在线免费观看| 久久riav| 狠狠色狠狠色综合系列| 欧美亚洲另类在线| 日日夜夜综合| 精品久久久久久无码中文野结衣| av电影一区二区| 亚洲视屏在线观看| 欧美乱妇高清无乱码| 日本欧美韩国国产| 九九热免费在线观看| 亚洲国产精品久久不卡毛片| 欧美日本网站| 成人午夜激情免费视频| 亚洲国产日韩在线| 国产一区二区三区精品在线| 欧美一区二区在线免费播放| 韩国精品一区| 中文字幕一区二区三区有限公司| 高清成人免费视频| 中文字幕免费视频观看| 不卡av在线网站| 视频一区中文| 任你躁av一区二区三区| 在线观看成人小视频| 免费不卡av| 日韩欧美亚洲在线| 国产成人精品综合在线观看| 国产精品无码粉嫩小泬| 国模吧一区二区三区| 欧美oldwomenvideos| 熟女人妻在线视频| 欧美精选在线播放|