国产无遮挡裸体免费直播视频,久久精品国产蜜臀av,动漫在线视频一区二区,欧亚日韩一区二区三区,久艹在线 免费视频,国产精品美女网站免费,正在播放 97超级视频在线观看,斗破苍穹年番在线观看免费,51最新乱码中文字幕

Vue命令行工具Vue-CLI圖文詳解(推薦!)

 更新時間:2022年07月22日 10:40:09   作者:知其黑、受其白  
vue-cli 是 Vue.js 開發(fā)的標(biāo)準(zhǔn)工具,它簡化了程序員基于 webpack 創(chuàng)建工程化的 Vue 項目的過程,下面這篇文章主要給大家介紹了關(guān)于Vue命令行工具Vue-CLI的相關(guān)資料,需要的朋友可以參考下

闡述

vue-cli 構(gòu)建一個工程的時候,發(fā)現(xiàn)官方文檔還是不夠用,需要熟練掌握 es6,而 vue 的全家桶還是都要上的。

Vue CLI 的包名稱由vue-cli改成了@vue/cli。 如果你已經(jīng)全局安裝了舊版本的vue-cli(1.x 或 2.x),你需要先通過 npm uninstall vue-cli -g 或 yarn global remove vue-cli 卸載它。

安裝新版的腳手 node 也有版本要求,Vue CLI 4.x 需要Node.jsv8.9 或更高版本 (推薦 v10 以上)。

vue全家桶

vue全家桶是基于vue開發(fā)必備的也是必學(xué)的東西,概括起來就是:

1.vue-cli項目構(gòu)建工具

2.vue-router路由管理

3.vuex狀態(tài)管理全局變量

4.axios,http請求工具。

5.UI 框架 element,iview,vant

最常見常用的 vue 全家桶簡單的介紹一下,希望可以幫助你了解認(rèn)識學(xué)會 vue 全家桶!

vue-cli

vue-cli 就是快速搭建一個 vue 項目的腳手架工具。

VueCLI是一個官方發(fā)布vue.js項目腳手架,使用 VueCLI 可以快速搭建 vue 開發(fā)環(huán)境,以及對應(yīng)的 webpack 配置。

1、CLI 是 Command-Line Interface, 翻譯為命令行界面, 但是俗稱腳手架

2、Vue CLI是一個官方發(fā)布 vue.js 項目腳手架

3、使用 vue-cli 可以快速搭建 Vue 開發(fā)環(huán)境以及對應(yīng)的 webpack 配置.

關(guān)于舊版本

Vue CLI 的包名稱由 vue-cli 改成了 @vue/cli。 如果你已經(jīng)全局安裝了舊版本的 vue-cli (1.x 或 2.x),你需要先通過 npm uninstall vue-cli -gyarn global remove vue-cli 卸載它。

腳手架依賴于 node.jswebpack。

Vue CLI 需要 Node.js 8.9 或更高版本 (推薦 8.11.0+)。你可以使用 nvm 或 nvm-windows 在同一臺電腦中管理多個 Node 版本。

Vue CLI 的安裝

Vue CLI2初始化項目:vue init webpack my-project

Vue CLI3初始化項目:vue create my-project

注意: 下面的默認(rèn)安裝的是 Vue CLI3 的版本,如果需要想按照 Vue CLI2 的方式初始化項目時不可以的。

由于博主的版本過低出現(xiàn)了切換 node 版本、反復(fù)安裝操作,第二步查看 Vue Cli 需要的node 版本。版本一直請越過反復(fù)安裝過程。

① 默認(rèn)安裝 vue/cli 腳手架 3

PS C:\Windows\system32> npm install -g @vue/cli
npm WARN deprecated subscriptions-transport-ws@0.9.19: The `subscriptions-transport-ws` package is no longer maintained. We recommend you use `graphql-ws` instead. For help migrating Apollo software to `graphql-ws`, see https://www.apollographql.com/docs/apollo-server/data/subscriptions/#switching-from-subscriptions-transport-ws    For general help using `graphql-ws`, see https://github.com/enisdenjo/graphql-ws/blob/master/README.md
npm WARN deprecated graphql-tools@4.0.8: This package has been deprecated and now it only exports makeExecutableSchema.\nAnd it will no longer receive updates.\nWe recommend you to migrate to scoped packages such as @graphql-tools/schema, @graphql-tools/utils and etc.\nCheck out https://www.graphql-tools.com to learn what package you should use instead
npm WARN deprecated apollo-cache-control@0.14.0: The functionality provided by the `apollo-cache-control` package is built in to `apollo-server-core` starting with Apollo Server 3. See https://www.apollographql.com/docs/apollo-server/migration/#cachecontrol for details.
npm WARN deprecated apollo-tracing@0.15.0: The `apollo-tracing` package is no longer part of Apollo Server 3. See https://www.apollographql.com/docs/apollo-server/migration/#tracing for details
npm WARN deprecated graphql-extensions@0.15.0: The `graphql-extensions` API has been removed from Apollo Server 3. Use the plugin API instead: https://www.apollographql.com/docs/apollo-server/integrations/plugins/
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated source-map-resolve@0.5.3: See https://github.com/lydell/source-map-resolve#deprecated
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
npm WARN deprecated source-map-url@0.4.1: See https://github.com/lydell/source-map-url#deprecated
C:\Program Files\nodejs\vue -> C:\Program Files\nodejs\node_modules\@vue\cli\bin\vue.js

> core-js-pure@3.22.0 postinstall C:\Program Files\nodejs\node_modules\@vue\cli\node_modules\core-js-pure
> node -e "try{require('./postinstall')}catch(e){}"

Thank you for using core-js ( https://github.com/zloirock/core-js ) for polyfilling JavaScript standard library!

The project needs your help! Please consider supporting of core-js:
> https://opencollective.com/core-js
> https://patreon.com/zloirock
> bitcoin: bc1qlea7544qtsmj2rayg0lthvza9fau63ux0fstcz

Also, the author of core-js ( https://github.com/zloirock ) is looking for a good job -)


> @apollo/protobufjs@1.2.2 postinstall C:\Program Files\nodejs\node_modules\@vue\cli\node_modules\@apollo\protobufjs
> node scripts/postinstall

npm WARN node-fetch@2.6.7 requires a peer of encoding@^0.1.0 but none is installed. You must install peer dependencies yourself.
npm WARN ws@7.5.7 requires a peer of bufferutil@^4.0.1 but none is installed. You must install peer dependencies yourself.
npm WARN ws@7.5.7 requires a peer of utf-8-validate@^5.0.2 but none is installed. You must install peer dependencies yourself.

+ @vue/cli@5.0.4
added 880 packages from 531 contributors in 130.475s

結(jié)束

② 默認(rèn)安裝失敗,解決mode版本問題

安裝之后,你就可以在命令行中訪問 vue 命令。

檢查其版本是否正確:

PS C:\Windows\system32> vue --version
You are using Node v11.15.0, but this version of @vue/cli requires Node ^12.0.0 || >= 14.0.0.
Please upgrade your Node version.

您使用的是 Node v11.15.0,但是這個版本的 @vue/cli 需要 Node ^12.0.0 || >= 14.0.0。
請升級您的節(jié)點版本。

PS C:\Windows\system32>

③ nvm下載太慢問題解決

由于 nvm 默認(rèn)的下載地址 http://nodejs.org/dist/ 是外國外服務(wù)器,國內(nèi)很慢可以使用淘寶的鏡像。

where nvm 找到 nvm 安裝路徑

找到 settings.txt 文件

將下面這兩句話復(fù)制到settings.txt,并保存

node_mirror: https://npm.taobao.org/mirrors/node/
npm_mirror: https://npm.taobao.org/mirrors/npm/

④ 安裝 Node ^12.0.0

PS C:\Windows\system32> nvm install 12.0.0
Downloading node.js version 12.0.0 (64-bit)...
Complete
Creating C:\Users\ASUS\AppData\Roaming\nvm\temp

Downloading npm version 6.9.0... Complete
Installing npm v6.9.0...

Installation complete. If you want to use this version, type

nvm use 12.0.0

PS C:\Windows\system32> nvm use 12.0.0
Now using node v12.0.0 (64-bit)

PS C:\Windows\system32> nvm list

    14.17.6
  * 12.0.0 (Currently using 64-bit executable)
    11.15.0  此版本主項目
PS C:\Windows\system32>

⑤ 從新安裝 VueCli 腳手架 3

PS C:\Windows\system32> npm install -g @vue/cli
npm WARN deprecated subscriptions-transport-ws@0.9.19: The `subscriptions-transport-ws` package is no longer maintained. We recommend you use `graphql-ws` instead. For help migrating Apollo software to `graphql-ws`, see https://www.apollographql.com/docs/apollo-server/data/subscriptions/#switching-from-subscriptions-transport-ws    For general help using `graphql-ws`, see https://github.com/enisdenjo/graphql-ws/blob/master/README.md
npm WARN deprecated graphql-tools@4.0.8: This package has been deprecated and now it only exports makeExecutableSchema.\nAnd it will no longer receive updates.\nWe recommend you to migrate to scoped packages such as @graphql-tools/schema, @graphql-tools/utils and etc.\nCheck out https://www.graphql-tools.com to learn what package you should use instead
npm WARN deprecated apollo-cache-control@0.14.0: The functionality provided by the `apollo-cache-control` package is built in to `apollo-server-core` starting with Apollo Server 3. See https://www.apollographql.com/docs/apollo-server/migration/#cachecontrol for details.
npm WARN deprecated apollo-tracing@0.15.0: The `apollo-tracing` package is no longer part of Apollo Server 3. See https://www.apollographql.com/docs/apollo-server/migration/#tracing for details
npm WARN deprecated graphql-extensions@0.15.0: The `graphql-extensions` API has been removed from Apollo Server 3. Use the plugin API instead: https://www.apollographql.com/docs/apollo-server/integrations/plugins/
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated source-map-resolve@0.5.3: See https://github.com/lydell/source-map-resolve#deprecated
npm WARN deprecated source-map-url@0.4.1: See https://github.com/lydell/source-map-url#deprecated
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
C:\Program Files\nodejs\vue -> C:\Program Files\nodejs\node_modules\@vue\cli\bin\vue.js

> core-js-pure@3.22.0 postinstall C:\Program Files\nodejs\node_modules\@vue\cli\node_modules\core-js-pure
> node -e "try{require('./postinstall')}catch(e){}"

Thank you for using core-js ( https://github.com/zloirock/core-js ) for polyfilling JavaScript standard library!

The project needs your help! Please consider supporting of core-js:
> https://opencollective.com/core-js
> https://patreon.com/zloirock
> bitcoin: bc1qlea7544qtsmj2rayg0lthvza9fau63ux0fstcz

Also, the author of core-js ( https://github.com/zloirock ) is looking for a good job -)


> @apollo/protobufjs@1.2.2 postinstall C:\Program Files\nodejs\node_modules\@vue\cli\node_modules\@apollo\protobufjs
> node scripts/postinstall

npm WARN node-fetch@2.6.7 requires a peer of encoding@^0.1.0 but none is installed. You must install peer dependencies yourself.
npm WARN ws@7.5.7 requires a peer of bufferutil@^4.0.1 but none is installed. You must install peer dependencies yourself.
npm WARN ws@7.5.7 requires a peer of utf-8-validate@^5.0.2 but none is installed. You must install peer dependencies yourself.

+ @vue/cli@5.0.4
added 880 packages from 531 contributors in 81.975s
安裝結(jié)束

查看 vue 版本,及驗證是否安裝正確。

PS C:\Windows\system32> vue --version
@vue/cli 5.0.4
PS C:\Windows\system32>

④ 拉取 2.x 模板 (舊版本)

Vue CLI >= 3 和舊版使用了相同的 vue 命令,所以 Vue CLI 2 (vue-cli) 被覆蓋了。

如果你仍然需要使用舊版本的 vue init 功能,你可以全局安裝一個橋接工具:

PS C:\Windows\system32> npm install -g @vue/cli-init
npm WARN deprecated vue-cli@2.9.6: This package has been deprecated in favour of @vue/cli
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated coffee-script@1.12.7: CoffeeScript on NPM has moved to "coffeescript" (no hyphen)
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
+ @vue/cli-init@5.0.4
added 259 packages from 231 contributors in 38.328s
PS C:\Windows\system32>

vue init 的運行效果將會跟 vue-cli@2.x 相同。

創(chuàng)建項目提示,原因上面安裝已經(jīng)提示命令都為棄用狀態(tài)。

PS E:\node> vue init webpack vue-cli2-test

  Command vue init requires a global addon to be installed.
  Please run undefined @vue/cli-init and try again.
  
  命令 vue init 需要安裝全局插件。
  請運行 undefined @vue/cli-init 并重試。

PS E:\node>

⑤ 安裝vue指定版本

【前端開發(fā)】Vue-CLI4 &Vue-CLI3 與Vue-CLI2 的區(qū)別

1、安裝:

Vue-CLI2:

npm install -g vue-cli 或 cnpm install -g vue-cli

Vue-CLI最新版本:

npm install -g @vue/cli 或 cnpm install -g @vue/cli

2、卸載

Vue-CLI2:

npm uninstall -g vue-cli 或 cnpm uninstall -g vue-cli

Vue-CLI最新版本:

npm uninstall -g @vue/cli 或 cnpm uninstall -g @vue/cli

指定版本安裝

可以安裝:2.6.0 版本
npm install -g vue-cli@2.6
可以安裝:2.6.0 版本
cnpm install -g vue-cli@v2.6.*
卸載vue
cnpm uninstall -g vue-cli

cdn 鏈接

<title>Vue 測試實例 - 菜鳥教程(runoob.com)</title>
<script src="https://unpkg.com/vue@2.6.14/dist/vue.min.js"></script>

https://unpkg.com/browse/vue@2.6.14/dist/
選擇vue版本
https://unpkg.com/browse/vue@2.6.14/dist/vue.min.js

⑥ 博主node版本

改 vue 版本

PS C:\WINDOWS\system32> npm install vue-cli -g
npm WARN deprecated vue-cli@2.9.6: This package has been deprecated in favour of @vue/cli
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated coffee-script@1.12.7: CoffeeScript on NPM has moved to "coffeescript" (no hyphen)
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
C:\Program Files\nodejs\vue-init -> C:\Program Files\nodejs\node_modules\vue-cli\bin\vue-init
C:\Program Files\nodejs\vue-list -> C:\Program Files\nodejs\node_modules\vue-cli\bin\vue-list
C:\Program Files\nodejs\vue -> C:\Program Files\nodejs\node_modules\vue-cli\bin\vue
+ vue-cli@2.9.6
added 244 packages from 229 contributors and updated 1 package in 22.77s



PS C:\WINDOWS\system32> vue -V
2.9.6
PS C:\WINDOWS\system32>

如何查看 Vue項 目 vue 的版本號:

如果是用 vue-cli 創(chuàng)建的項目,則找到項目根目錄下的 "package.json" 文件。

初始化項目

① vue init命令講解

用 vue init 命令來初始化項目,具體使用方法如下:

vue init <template-name> <project-name>

init:表示要用 vue-cli 來初始化項目

<template-name>:表示模板名稱,vue-cli 官方提供的 5 種模板:

1、webpack:

一個全面的 webpack+vue-loader 的模板,功能包括熱加載,linting,檢測和CSS擴展。

2、webpack-simple:

一個簡單 webpack+vue-loader 的模板,不包含其他功能,讓你快速的搭建 vue 的開發(fā)環(huán)境。

3、browserify:

一個全面的 Browserify+vueify 的模板,功能包括熱加載,linting,單元檢測。

4、browserify-simple:

一個簡單 Browserify+vueify 的模板,不包含其他功能,讓你快速的搭建 vue 的開發(fā)環(huán)境。

5、simple:

一個最簡單的單頁應(yīng)用模板。

<project-name>:標(biāo)識項目名稱,用戶根據(jù)自己的項目來起名字。

② 項目初始化

在實際開發(fā)中,一般都會使用 webpack 這個模板,命令使用如下:

第一步操作:

PS E:\node> vue init webpack vue-cli296

? Project name (vue-cli296)

Project name:項目名稱 ,默認(rèn)為初始化建項目的名稱 vue-cli296,不需要直接回車

第二步操作:

 Project description (A Vue.js project)

Project description:項目描述,默認(rèn)為A Vue.js project,不需要直接回車

Author (cwgqmxy <1157818690@qq.com>)

Author:作者,如果有配置 git 的作者,自動會讀取。直接回車

第三步操作:

兩個選項,Runtime + Compiler 和 Runtime-only:

· Runtime + Compiler: recommended for most users

(運行程序+編譯器:推薦給大多數(shù)用戶)

· Runtime-only: about 6KB lighter min+gzip, but templates (or any Vue-specificHTML) are ONLY allowed in .vue files - render functions are required elsewhere

(僅運行程序: 比上面那種模式輕大約 6KB min+gzip,但是 template (或任何特定于vue的html)只允許在.vue文件中使用——其他地方用需要 render 函數(shù))

區(qū)別

1、runtime-only 比 runtime-compiler 輕 6kb

2、runtime-only 運行更快

3、runtime-only 其實只能識別 render 函數(shù),不能識別 template,.vue 文件中的也是被 vue-template-compiler 翻譯成了 render 函數(shù),所以只能在 .vue 里寫 template。

兩種模式生成的 腳手架 即(代碼模板)其實區(qū)別只有在 main.js 中,其他都是一樣的:

可以發(fā)現(xiàn)一個 是用 template + component 而另一個 則是 用 render 函數(shù)。

第四步操作:

Install vue-router? (Y/n)

Install vue-router?

是否安裝vue的路由插件,需要安裝,選擇Y

第五步操作:

Use ESLint to lint your code? (Y/n)

輸入 Y
Pick an ESLint preset:選擇分支風(fēng)格

選項有三個(博主選了第一個)
1.standard(https://github.com/feross/standard) js的標(biāo)準(zhǔn)風(fēng)格
2.Airbnb(https://github.com/airbnb/javascript) JavaScript最合理的方法,這個github地址說是JavaScript最合理的方法
3.none (configure it yourself) 自己配置

Use ESLint to lint your code?

是否用 ESLint 來限制你的代碼錯誤和風(fēng)格。不需要輸入n,需要選擇y,如果是大型團隊開發(fā),最好是進(jìn)行配置。

第六步操作:

Set up unit tests (Y/n)

是否需要安裝單元測試工具,不需要輸入n,需要選擇y

第七步操作:

Setup e2e tests with Nightwatch? (Y/n)

是否安裝E2E測試框架NightWatch(E2E,也就是End To End,就是所謂的“用戶真實場景”。

第八步操作:

Should we run `npm install` for you after the project has been created? (recommended) (Use arrow keys)

(譯:項目創(chuàng)建后是否要為你運行 “npm install”? 這里選擇包管理工具)

選項有三個
yes,use npm(使用npm)
yes,use yarn(使用yarn)
no,I will handle that myself(自己配置安裝包)

開始創(chuàng)建了項目,初始化完成之后會出現(xiàn)以下信息,表示操作成功。

PS E:\node> vue init webpack vue-cli296

? Project name vue-cli296
? Project description A Vue.js project
? Author cwgqmxy <1157818690@qq.com>
? Vue build runtime
? Install vue-router? Yes
? Use ESLint to lint your code? Yes
? Pick an ESLint preset Standard
? Set up unit tests No
? Setup e2e tests with Nightwatch? No
? Should we run `npm install` for you after the project has been created? (recommended) npm

   vue-cli · Generated "vue-cli296".

# Installing project dependencies ...
# ========================

npm WARN deprecated babel-eslint@8.2.6: babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.
npm WARN deprecated eslint-loader@1.9.0: This loader has been deprecated. Please use eslint-webpack-plugin
npm WARN deprecated extract-text-webpack-plugin@3.0.2: Deprecated. Please use https://github.com/webpack-contrib/mini-css-extract-plugin
npm WARN deprecated html-webpack-plugin@2.30.1: out of support
npm WARN deprecated browserslist@2.11.3: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
npm WARN deprecated uglify-es@3.3.9: support for ECMAScript is superseded by `uglify-js` as of v3.13.0
npm WARN deprecated bfj-node4@5.3.1: Switch to the `bfj` package for fixes and new features!
npm WARN deprecated core-js@2.6.12: core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.
npm WARN deprecated chokidar@2.1.8: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies
npm WARN deprecated fsevents@1.2.13: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated flatten@1.0.3: flatten is deprecated in favor of utility frameworks such as lodash.
npm WARN deprecated browserslist@1.7.7: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
npm WARN deprecated svgo@0.7.2: This SVGO version is no longer supported. Upgrade to v2.x.x.
npm WARN deprecated circular-json@0.3.3: CircularJSON is in maintenance only, flatted is its successor.
npm WARN deprecated querystring@0.2.0: The querystring API is considered Legacy. new code should use the URLSearchParams API instead.
npm WARN deprecated svgo@1.3.2: This SVGO version is no longer supported. Upgrade to v2.x.x.
npm WARN deprecated source-map-resolve@0.5.3: See https://github.com/lydell/source-map-resolve#deprecated
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated
npm WARN deprecated source-map-url@0.4.1: See https://github.com/lydell/source-map-url#deprecated
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated

> core-js@2.6.12 postinstall E:\node\vue-cli296\node_modules\core-js
> node -e "try{require('./postinstall')}catch(e){}"

Thank you for using core-js ( https://github.com/zloirock/core-js ) for polyfilling JavaScript standard library!

The project needs your help! Please consider supporting of core-js on Open Collective or Patreon:
> https://opencollective.com/core-js
> https://www.patreon.com/zloirock

Also, the author of core-js ( https://github.com/zloirock ) is looking for a good job -)

> ejs@2.7.4 postinstall E:\node\vue-cli296\node_modules\ejs
> node ./postinstall.js

Thank you for installing EJS: built with the Jake JavaScript build tool (https://jakejs.com/)

> es5-ext@0.10.60 postinstall E:\node\vue-cli296\node_modules\es5-ext
>  node -e "try{require('./_postinstall')}catch(e){}"

#
# Fatal error in , line 0
# Check failed: U_SUCCESS(status).
#
#
#
#FailureMessage Object: 000000E8857BCE10[            ......] / postinstall: info lifecycle es5-ext@0.10.60~postinstall: npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@~2.3.2 (node_modules\chokidar\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.3.2: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.2.7 (node_modules\watchpack-chokidar2\node_modules\chokidar\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.2.7 (node_modules\webpack-dev-server\node_modules\chokidar\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})

npm ERR! Maximum call stack size exceeded

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\Administrator\AppData\Roaming\npm-cache\_logs\2022-04-19T08_59_35_781Z-debug.log

Running eslint --fix to comply with chosen preset rules...
# ========================

> vue-cli296@1.0.0 lint E:\node\vue-cli296
> eslint --ext .js,.vue src "--fix"


# Project initialization finished!
# ========================

To get started:

  cd vue-cli296
  npm run dev

Documentation can be found at https://vuejs-templates.github.io/webpack

PS E:\node>

③ 目錄結(jié)構(gòu)詳解

④ 運行項目

環(huán)境崩潰了,從新裝node環(huán)境。

npm 是什么東東?

npm其實是Node.js的包管理工具(package manager)。

為啥我們需要一個包管理工具呢?

因為我們在Node.js上開發(fā)時,會用到很多別人寫的JavaScript代碼。

(http://caibaojian.com/npm/all.html)

講了這么多,npm究竟在哪?

其實npm已經(jīng)在Node.js安裝的時候順帶裝好了。我們在命令提示符或者終端輸入npm -v,

node 安裝適合小白

1 去node官網(wǎng)下載

中文官方網(wǎng)址:http://nodejs.cn/

下載網(wǎng)址:http://nodejs.cn/download/

官方網(wǎng)址:https://nodejs.org/en/

2 下載完成后雙擊安裝包,跳出安裝彈窗,點擊Next

以下一路 Next

               node.js runtime:node 運行環(huán)境
               orepack manager:npm 包管理
Online documentation shortcuts:在線文件快捷方式
                   Add to Path:添加路徑
              corepack manager:核心包管理

不用打鉤,如果打了 √ 會把 node 所有的工具都下載,需要很久,以后要什么工具,直接npm下載。

安裝好啦

環(huán)境路徑已經(jīng)自動設(shè)置好了

可以去 cmd 窗口中查看安裝 node 和 npm 的版本號。

從新來過

上面環(huán)境崩潰了,從新搭建的環(huán)境。

PS E:\node> node -v
v11.15.0
PS E:\node>

vue-cli 安裝

vue-cli是vue官方出品的快速構(gòu)建單頁應(yīng)用的腳手架,里面集成了webpack,npm,nodejs,babel,vue,vue-router。

PS E:\node> npm install vue-cli -g
npm WARN deprecated vue-cli@2.9.6: This package has been deprecated in favour of @vue/cli
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated coffee-script@1.12.7: CoffeeScript on NPM has moved to "coffeescript" (no hyphen)
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
C:\Program Files\nodejs\vue-init -> C:\Program Files\nodejs\node_modules\vue-cli\bin\vue-init
C:\Program Files\nodejs\vue -> C:\Program Files\nodejs\node_modules\vue-cli\bin\vue
C:\Program Files\nodejs\vue-list -> C:\Program Files\nodejs\node_modules\vue-cli\bin\vue-list
+ vue-cli@2.9.6
added 245 packages from 230 contributors in 27.375s
PS E:\node>
PS E:\node> vue --version
2.9.6
PS E:\node>

vue-cli 項目初始化

PS E:\node> vue init webpack vue296

? Project name vue296
? Project description A Vue.js project
? Author cwgqmxy <1157818690@qq.com>
? Vue build standalone
? Install vue-router? Yes
? Use ESLint to lint your code? Yes
? Pick an ESLint preset Standard
? Set up unit tests No
? Setup e2e tests with Nightwatch? No
? Should we run `npm install` for you after the project has been created? (recommended) npm

   vue-cli · Generated "vue296".


# Installing project dependencies ...
# ========================

npm WARN deprecated babel-eslint@8.2.6: babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.
npm WARN deprecated eslint-loader@1.9.0: This loader has been deprecated. Please use eslint-webpack-plugin
npm WARN deprecated extract-text-webpack-plugin@3.0.2: Deprecated. Please use https://github.com/webpack-contrib/mini-css-extract-plugin
npm WARN deprecated html-webpack-plugin@2.30.1: out of support
npm WARN deprecated browserslist@2.11.3: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
npm WARN deprecated uglify-es@3.3.9: support for ECMAScript is superseded by `uglify-js` as of v3.13.0
npm WARN deprecated bfj-node4@5.3.1: Switch to the `bfj` package for fixes and new features!
npm WARN deprecated chokidar@2.1.8: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies
npm WARN deprecated core-js@2.6.12: core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.
npm WARN deprecated fsevents@1.2.13: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated flatten@1.0.3: flatten is deprecated in favor of utility frameworks such as lodash.
npm WARN deprecated browserslist@1.7.7: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
npm WARN deprecated svgo@0.7.2: This SVGO version is no longer supported. Upgrade to v2.x.x.
npm WARN deprecated circular-json@0.3.3: CircularJSON is in maintenance only, flatted is its successor.
npm WARN deprecated querystring@0.2.0: The querystring API is considered Legacy. new code should use the URLSearchParams API instead.
npm WARN deprecated svgo@1.3.2: This SVGO version is no longer supported. Upgrade to v2.x.x.
npm WARN deprecated source-map-resolve@0.5.3: See https://github.com/lydell/source-map-resolve#deprecated
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
npm WARN deprecated source-map-url@0.4.1: See https://github.com/lydell/source-map-url#deprecated
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated

> core-js@2.6.12 postinstall E:\node\vue296\node_modules\core-js
> node -e "try{require('./postinstall')}catch(e){}"

Thank you for using core-js ( https://github.com/zloirock/core-js ) for polyfilling JavaScript standard library!

The project needs your help! Please consider supporting of core-js on Open Collective or Patreon:
> https://opencollective.com/core-js
> https://www.patreon.com/zloirock

Also, the author of core-js ( https://github.com/zloirock ) is looking for a good job -)


> ejs@2.7.4 postinstall E:\node\vue296\node_modules\ejs
> node ./postinstall.js

Thank you for installing EJS: built with the Jake JavaScript build tool (https://jakejs.com/)


> es5-ext@0.10.60 postinstall E:\node\vue296\node_modules\es5-ext
>  node -e "try{require('./_postinstall')}catch(e){}"


> uglifyjs-webpack-plugin@0.4.6 postinstall E:\node\vue296\node_modules\webpack\node_modules\uglifyjs-webpack-plugin
> node lib/post_install.js

npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@~2.3.2 (node_modules\chokidar\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.3.2: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.2.7 (node_modules\watchpack-chokidar2\node_modules\chokidar\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.2.7 (node_modules\webpack-dev-server\node_modules\chokidar\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})

added 1395 packages from 715 contributors in 76.245s


Running eslint --fix to comply with chosen preset rules...
# ========================


> vue296@1.0.0 lint E:\node\vue296
> eslint --ext .js,.vue src "--fix"


# Project initialization finished!
# ========================

To get started:

  cd vue296
  npm run dev

Documentation can be found at https://vuejs-templates.github.io/webpack

PS E:\node>

cd 命令進(jìn)入到項目目錄

npm run dev

成功頁面

package.json

{
  "name": "vue296",
  "version": "1.0.0",
  "description": "A Vue.js project",
  "author": "cwgqmxy <1157818690@qq.com>",
  "private": true,
  "scripts": {
    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
    "start": "npm run dev",
    "lint": "eslint --ext .js,.vue src",
    "build": "node build/build.js"
  },
  "dependencies": {
    "vue": "^2.5.2",
    "vue-router": "^3.0.1"
  },
  "devDependencies": {
    "autoprefixer": "^7.1.2",
    "babel-core": "^6.22.1",
    "babel-eslint": "^8.2.1",
    "babel-helper-vue-jsx-merge-props": "^2.0.3",
    "babel-loader": "^7.1.1",
    "babel-plugin-syntax-jsx": "^6.18.0",
    "babel-plugin-transform-runtime": "^6.22.0",
    "babel-plugin-transform-vue-jsx": "^3.5.0",
    "babel-preset-env": "^1.3.2",
    "babel-preset-stage-2": "^6.22.0",
    "chalk": "^2.0.1",
    "copy-webpack-plugin": "^4.0.1",
    "css-loader": "^0.28.0",
    "eslint": "^4.15.0",
    "eslint-config-standard": "^10.2.1",
    "eslint-friendly-formatter": "^3.0.0",
    "eslint-loader": "^1.7.1",
    "eslint-plugin-import": "^2.7.0",
    "eslint-plugin-node": "^5.2.0",
    "eslint-plugin-promise": "^3.4.0",
    "eslint-plugin-standard": "^3.0.1",
    "eslint-plugin-vue": "^4.0.0",
    "extract-text-webpack-plugin": "^3.0.0",
    "file-loader": "^1.1.4",
    "friendly-errors-webpack-plugin": "^1.6.1",
    "html-webpack-plugin": "^2.30.1",
    "node-notifier": "^5.1.2",
    "optimize-css-assets-webpack-plugin": "^3.2.0",
    "ora": "^1.2.0",
    "portfinder": "^1.0.13",
    "postcss-import": "^11.0.0",
    "postcss-loader": "^2.0.8",
    "postcss-url": "^7.2.1",
    "rimraf": "^2.6.0",
    "semver": "^5.3.0",
    "shelljs": "^0.7.6",
    "uglifyjs-webpack-plugin": "^1.1.1",
    "url-loader": "^0.5.8",
    "vue-loader": "^13.3.0",
    "vue-style-loader": "^3.0.1",
    "vue-template-compiler": "^2.5.2",
    "webpack": "^3.6.0",
    "webpack-bundle-analyzer": "^2.9.0",
    "webpack-dev-server": "^2.9.1",
    "webpack-merge": "^4.1.0"
  },
  "engines": {
    "node": ">= 6.0.0",
    "npm": ">= 3.0.0"
  },
  "browserslist": [
    "> 1%",
    "last 2 versions",
    "not ie <= 8"
  ]
}

項目結(jié)構(gòu)

一個 vue-cli 的項目結(jié)構(gòu)如下,其中 src 文件夾是需要掌握,其余了解即可。

文件夾目錄如下:

1、build目錄(webpack配置)

build 文件主要是 webpack 的配置,目錄詳情如下:

2、config目錄(vue項目配置目錄)

config 文件主要是項目相關(guān)配置,常用的就是當(dāng)端口沖突時配置監(jiān)聽端口,打包輸出路徑及命名等,目錄詳情如下:

3、node_modules(項目依賴包)

node_modules 里面是項目依賴包,其中包括很多基礎(chǔ)依賴,自己也可以根據(jù)需要安裝其他依賴。安裝方法打開命令工具,進(jìn)入項目目錄,輸入 npm install [依賴包名稱],回車。

安裝依賴:npm i

在兩種情況下我們會自己去安裝依賴:

》項目運行缺少該依賴包

》安裝插件:如 vuex

PS:有時會安裝指定依賴版本,需在依賴包名稱后加上版本號信息,

npm install vue-loader@11.1.4

src 項目核心文件講解

核心文件目錄前面已經(jīng)說明了,下面重點講解 index.html,main.js,App.vue,routerindex.js,HelloWorld.vue。

1、index.html(主頁)

index.html 為項目的主頁,跟其他 html 一樣,但一般只定義一個空的根節(jié)點,在 main.js 里面定義的實例將掛載在根節(jié)點下,內(nèi)容都通過 vue 組件來填充。

說明如下:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>my-vue-demo</title>
  </head>
  <body>
      <!-- 定義的vue實例將掛載在#app節(jié)點下 -->
    <div id="app"></div>
  </body>
</html>

2、main.js(入口文件)

main.js 為項目的入口文件,即單入口,主要是引入 vue 框架,根組件及路由設(shè)置,并且定義 vue 實例,說明如下:

// 引入vue框架
import Vue from 'vue'
// 引入根組件
import App from './App'
// 引入路由配置
import router from './router'

// 關(guān)閉生產(chǎn)模式下給出的提示
Vue.config.productionTip = false

// 定義實例
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

3、App.vue(根組件)

一個 vue 頁面通常由三部分組成:

模板 (template)

js (script)

樣式 (style)

說明如下:

<!-- 模板 --><template> <div id="app"> <img src="./assets/logo.png"> <router-view/> </div></template><!-- js代碼 --><script>export default {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> name: 'App'}</script><!-- css樣式 --><style>#app {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> font-family: 'Avenir', Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px;}</style>

[ template-模板 ]

(1) 模板只能包含一個父節(jié)點,也就是說頂層的 div 只能有一個

(如上圖,父節(jié)點為 #app 的 div,其沒有兄弟節(jié)點)

(2)是子路由視圖插槽,后面的路由頁面都顯示在此處,相當(dāng)于 iframe

【script-JS代碼】

vue 通常用 es6 來寫,用 export default 導(dǎo)出,其下面可以包含數(shù)據(jù) data,生命周期 ( mounted 等),方法( methods )等。

【style-CSS樣式】

樣式通過 style 標(biāo)簽 <style></style> 包裹,默認(rèn)是影響全局的,如需定義作用域只在該組件下起作用,需在標(biāo)簽上加 scoped,<style scoped></style>。

引入外部CSS示例:

<style>
    import './assets/css/public.css'
</style>

4、router(路由配置)

router文件夾下,有一個 index,js 的路由配置文件,

說明如下:

// 引入vue框架
import Vue from 'vue'
// 引入vue-router路由依賴
import Router from 'vue-router'
// 引入頁面組件,命名為HelloWorld
import HelloWorld from '@/components/HelloWorld'

// 使用路由依賴
Vue.use(Router)

// 定義路由配置
export default new Router({
  routes: [
    {
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld
    }
  ]
})

5、HelloWorld.vue(頁面組件)

最熟悉的 HelloWorld 輸出,說明如下:

<template>
  <div>
    <!-- 輸出變量 -->
    <h1>{{ msg }}</h1>
  </div>
</template>

<script>
export default {
  // 定義頁面名稱,可以不要
  name: 'HelloWorld',
  data () {
    return {
      // 定義變量
      msg: 'HelloWorld'
    }
  }
}
</script>

<style scoped>
h1 {
  font-size: 16px;
  font-weight: normal;
}
</style>

網(wǎng)頁 CDN 引入 vue@2.6.14 示例

<title>Vue 測試實例 - 菜鳥教程(runoob.com)</title>
<script src="https://unpkg.com/vue@2.6.14/dist/vue.min.js"></script>

https://unpkg.com/browse/vue@2.6.14/dist/
選擇vue版本
https://unpkg.com/browse/vue@2.6.14/dist/vue.min.js
<!--第一步:創(chuàng)建文件夾及html文件-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue入門之Helloworld</title>
    <!--第二步:引入Vue庫-->
    <script src="https://unpkg.com/vue@2.6.14/dist/vue.min.js"></script>
</head>
<body>
    <!--第三步:創(chuàng)建一個Div-->
    <div id="app">
        <!--Vue的模板的綁定數(shù)據(jù)的方法,用兩對花括號進(jìn)行綁定Vue中的數(shù)據(jù)對象的屬性 -->
        {{message}}
    </div>

    <!--第四步:創(chuàng)建Vue的對象,并把數(shù)據(jù)綁定到上面創(chuàng)建好的div上去。-->
    <script type="text/javascript">
        var app=new Vue({ // 創(chuàng)建Vue對象。Vue的核心對象。
            el:'#app', // el屬性:把當(dāng)前Vue對象掛載到 div標(biāo)簽上,#app是id選擇器
            data:{    // data: 是Vue對象中綁定的數(shù)據(jù)
                message:'hello Vue!' // message 自定義的數(shù)據(jù)
            }
        })
    </script>
</body>
</html>

內(nèi)部指令

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue入門之Helloworld</title>
    <script src="https://unpkg.com/vue@2.6.14/dist/vue.min.js"></script>
    <style type="text/css">
        [v-cloak] {
            display: none;
        }
    </style>
</head>
<body>
<div id="app">
    <!-- v-if -->
    <div v-if="isLogin">你好</div>
    <!-- v-else -->
    <div v-else>請登錄后操作</div>
    <!-- v-show -->
    <div v-show="isLogin">你好</div>
    <!-- v-else-if -->
    <div v-if="type === 'A'">A</div>
    <div v-else-if="type === 'B'">B</div>
    <div v-else-if="type === 'C'">C</div>
    <div v-else>Not A/B/C</div>
    
    <!-- v-for基本使用 -->
    <ul>
        <li v-for="item in items">
            {{item}}
        </li>
    </ul>
    
    <!-- v-for高級使用 -->
    <ul>
        <li v-for="(value, key, index) in object">
            {{ index }}. {{ key }} - {{ value }}
        </li>
    </ul>
    
    <!-- v-text -->
    <div v-text="message"></div>
    
    <!-- v-html -->
    <div v-html="msgHtml"></div>
    
    <!-- v-on部分 -->
    <div>本場比賽得分:{{count}}</div>
    
    <!-- 常規(guī)寫法 -->
    <button v-on:click="add">加分</button>
    <!-- @縮寫 -->
    <button @click="add">加分</button><br/>
    
    <!-- v-model input -->
    <input type="text" v-model="message">
    <br/>
    
    <!-- v-model textarea -->
    <textarea  cols="30" rows="10" v-model="message"></textarea>
    <br/>
    
    <!-- v-model checkbox -->
    <input type="checkbox" id="first" value="1" v-model="status">
    <label for="first">有效</label>
    <input type="checkbox" id="second" value="2" v-model="status">
    <label for="second">無效</label>
    <div>狀態(tài):{{status}}</div>
    
    <!-- v-model radio -->
    <input type="radio" id="one" value="男" v-model="sex">
    <label for="one">男</label>
    <input type="radio" id="two" value="女" v-model="sex">
    <label for="one">女</label>
    <div>性別:{{sex}}</div>
    
    <!-- v-model select -->
    <select v-model="selected">
        <option disabled value="">請選擇</option>
        <option>A</option>
        <option>B</option>
        <option>C</option>
    </select>
    <div>Selected: {{ selected }}</div>
    
    <!-- v-model select -->
    <img v-bind:src="imgSrc"  width="200px"><br/>
    <img :src="imgSrc"  width="200px"><br/>
    
    <!-- v-pre -->
    <div v-pre>{{message}}</div>
    
    <!-- v-cloak -->
    <div v-cloak>{{message}}</div>
    
    <!-- v-pre -->
    <div v-once>第一次綁定的值:{{message}}</div>
    
</div>

<script type="text/javascript">
var app=new Vue({
    el:'#app',
    data:{
        isLogin: false,
        type: 'A',
        items:[20,23,18,65],
        object: {
            firstName: 'John',
            lastName: 'Doe'
        },
        message: 'hello Vue',
        msgHtml: '<h2>hello Vue!</h2>',
        count: 1,
        status: [],
        sex: '男',
        selected: '',
        imgSrc:'http://liangxinghua.com/uploads/image/20180709/1531106987.png'
    },
    methods: {
        add() {
            this.count++;
        }
    }
})
</script>
</body>
</html>

(1)v-if

<div v-if="isLogin">你好</div>

(2)v-else

<div v-else>請登錄后操作</div>

(3)v-show

<div v-show="isLogin">你好</div>

(4)v-else-if

<div v-if="type === 'A'">A</div>
<div v-else-if="type === 'B'">B</div>
<div v-else-if="type === 'C'">C</div>
<div v-else>Not A/B/C</div>

(5)v-if 與 v-show 的區(qū)別

v-if: 在切換過程中條件塊內(nèi)的事件監(jiān)聽器和子組件適當(dāng)?shù)乇讳N毀和重建,開銷較高,在運行時條件很少改變時使用。

v-show:調(diào)整css dispaly屬性,開銷較小,在常頻繁地切換時使用。

(6)v-for

(1)基本用法

<!-- 模板 -->
<div id="app">
    <ul>
        <li v-for="item in items">
            {{item}}
        </li>
    </ul>
</div>

<!--JS代碼 -->
<script type="text/javascript">
    var app=new Vue({
        el:'#app',
        data:{
            items:[20,23,18,65]
        }
    })
</script>

(2)對象遍歷

參數(shù): 第一個為值,第二個為鍵名,第三個為索引

<!-- 模板 -->
<div id="app">
    <ul>
        <li v-for="(value, key, index) in object">
        {{ index }}. {{ key }} - {{ value }}
        </li>
    </ul>
</div>

<!--JS代碼 -->
<script type="text/javascript">
    var app=new Vue({
        el:'#app',
        data:{
            object: {
                firstName: 'John',
                lastName: 'Doe'
            }
        }
    })
</script>

(7)v-text

{{xxx}} 取值有個弊端,當(dāng)網(wǎng)速很慢或 javascript 出錯時,會在頁面顯示 {{xxx}},Vue 提供的 v-text 可以解決這個問題。

<div>{{ message }}</div>
<!-- 和下面的一樣 -->
<div v-text="message"></div>

(8)v-html

用于輸出 html 代碼

<span v-html="msgHtml"></span><span v-html="msgHtml"></span>

(9)v-on

(1)常規(guī)用法

// html
<div>本場比賽得分:{{count}}</div>
<button v-on:click="add">加分</button>

// JS
data:{
    count: 1
},
methods: {
    add() {
        this.count++;
    }
}

(2)縮寫

<button @click="add">加分</button>

指令詳情的更多用法參照 v-on 官方 API

(10)v-model

以下的 model 都需要在 data 中聲明初始值:

data: {
	message: 'hello Vue',
    count: 1,
    status: [],
    sex: '男',
    selected: ''
}

(1)input

(2)textarea

<input type="text" v-model="message">
<textarea  cols="30" rows="10" v-model="message"></textarea>

(3)checkbox

<input type="checkbox" id="first" value="1" v-model="status">
<label for="first">有效</label>

<input type="checkbox" id="second" value="2" v-model="status">
<label for="second">無效</label>

<div>狀態(tài):{{status}}</div>

(4)radio

<input type="radio" id="one" value="男" v-model="sex">
<label for="one">男</label>

<input type="radio" id="two" value="女" v-model="sex">
<label for="one">女</label>

<div>性別:{{sex}}</div>

(5)select

<select v-model="selected">
    <option disabled value="">請選擇</option>
    <option>A</option>
    <option>B</option>
    <option>C</option>
</select>
<div>Selected: {{ selected }}</div>

(11)v-bind

用于處理 html 標(biāo)簽的動態(tài)屬性,即動態(tài)賦值。

(1)常規(guī)用法

// html
<img v-bind:src="imgSrc"  width="200px">

// js
data: {    
    imgSrc:'http://liangxinghua.com/uploads/image/20180709/1531106987.png'
}

(2)縮寫

<img :src="imgSrc"  width="200px">

指令詳情的更多用法參照 v-bind 官方 API

(12)v-pre

在模板中跳過 vue 的編譯,直接輸出原始值,如果在標(biāo)簽中加入 v-pre 就不會輸出 vue 中的data 值了。

<div v-pre>{{message}}</div>

(13)v-cloak

在 vue 渲染完指定的整個 DOM 后才進(jìn)行顯示。它必須和 CSS 樣式一起使用。

// css
[v-cloak] {
    display: none;
}

// html
<div v-cloak>{{message}}</div>

(14)v-once

只顯示 DOM 第一次渲染的值,以后不改變了

<div v-once>第一次綁定的值:{{message}}</div>

生命周期

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue入門之Helloworld</title>
    <script src="https://unpkg.com/vue@2.6.14/dist/vue.min.js"></script>
</head>
<body>
    
<div id="app">
    {{message}}
</div>

<script type="text/javascript">
var app=new Vue({
    el:'#app',
    data:{
        message:'hello Vue!'
    },
    beforeCreate: function () {
        console.group('beforeCreate 創(chuàng)建前狀態(tài)===============》');
        console.log("%c%s", "color:red" , "el      : " + this.$el); //undefined
        console.log("%c%s", "color:red","data    : " + this.$data); //undefined 
        console.log("%c%s", "color:red","message: " + this.message)  
    },
    created: function () {
        console.group('created 創(chuàng)建完畢狀態(tài)===============》');
        console.log("%c%s", "color:red","el      : " + this.$el); //undefined
        console.log("%c%s", "color:red","data    : " + this.$data); //已被初始化 
        console.log("%c%s", "color:red","message: " + this.message); //已被初始化
    },
    beforeMount: function () {
        console.group('beforeMount 掛載前狀態(tài)===============》');
        console.log("%c%s", "color:red","el      : " + (this.$el)); //已被初始化
        console.log(this.$el);
        console.log("%c%s", "color:red","data    : " + this.$data); //已被初始化  
        console.log("%c%s", "color:red","message: " + this.message); //已被初始化  
    },
    mounted: function () {
        console.group('mounted 掛載結(jié)束狀態(tài)===============》');
        console.log("%c%s", "color:red","el      : " + this.$el); //已被初始化
        console.log(this.$el);     
        console.log("%c%s", "color:red","data    : " + this.$data); //已被初始化
        console.log("%c%s", "color:red","message: " + this.message); //已被初始化 
    },
    beforeUpdate: function () {
        console.group('beforeUpdate 更新前狀態(tài)===============》');
        console.log("%c%s", "color:red","el      : " + this.$el);
        console.log(this.$el);    
        console.log("%c%s", "color:red","data    : " + this.$data); 
        console.log("%c%s", "color:red","message: " + this.message); 
    },
    updated: function () {
        console.group('updated 更新完成狀態(tài)===============》');
        console.log("%c%s", "color:red","el      : " + this.$el);
        console.log(this.$el); 
        console.log("%c%s", "color:red","data    : " + this.$data); 
        console.log("%c%s", "color:red","message: " + this.message); 
    },
    beforeDestroy: function () {
        console.group('beforeDestroy 銷毀前狀態(tài)===============》');
        console.log("%c%s", "color:red","el      : " + this.$el);
        console.log(this.$el);     
        console.log("%c%s", "color:red","data    : " + this.$data); 
        console.log("%c%s", "color:red","message: " + this.message); 
    },
    destroyed: function () {
        console.group('destroyed 銷毀完成狀態(tài)===============》');
        console.log("%c%s", "color:red","el      : " + this.$el);
        console.log(this.$el);  
        console.log("%c%s", "color:red","data    : " + this.$data); 
        console.log("%c%s", "color:red","message: " + this.message)
    }
})
</script>
</body>
</html>

生命周期表格

周期說明
beforeCreate在實例初始化之后,數(shù)據(jù)觀測和事件配置之前被調(diào)用
created在實例創(chuàng)建完成后被立即調(diào)用,完成數(shù)據(jù)觀測,屬性和方法的運算,初始化事件,$el屬性未見
beforeMount在掛載開始之前被調(diào)用:相關(guān)的 render 函數(shù)首次被調(diào)用,只在虛擬DOM生成HTML
mounted在el 被新創(chuàng)建的 vm.$el 替換,并掛載到實例上去之后調(diào)用。實例已完成以下的配置:用上面編譯好的html內(nèi)容替換el屬性指向的DOM對象。完成模板中的html渲染到html頁面中。此過程中進(jìn)行ajax交互
beforeUpdate在數(shù)據(jù)更新之前調(diào)用,發(fā)生在虛擬DOM重新渲染和打補丁之前??梢栽谠撱^子中進(jìn)一步地更改狀態(tài),不會觸發(fā)附加的重渲染過程
updated在由于數(shù)據(jù)更改導(dǎo)致的虛擬DOM重新渲染和打補丁之后調(diào)用。調(diào)用時,組件DOM已經(jīng)更新,所以可以執(zhí)行依賴于DOM的操作。然而在大多數(shù)情況下,應(yīng)該避免在此期間更改狀態(tài),因為這可能會導(dǎo)致更新無限循環(huán)。該鉤子在服務(wù)器端渲染期間不被調(diào)用
activatedkeep-alive 組件激活時調(diào)用
deactivatedkeep-alive 組件停用時調(diào)用
beforeDestroy在實例銷毀之前調(diào)用。實例仍然完全可用
destroyed在實例銷毀之后調(diào)用。調(diào)用后,所有的事件監(jiān)聽器會被移除,所有的子實例也會被銷毀。該鉤子在服務(wù)器端渲染期間不被調(diào)用

生命周期圖解

階段一:創(chuàng)建和掛載

beforecreated:el 和 data 并未初始化
      created:完成了 data 數(shù)據(jù)的初始化,el沒有
  beforeMount:完成了 el 和 data 初始化
     mounted :完成掛載

階段二:更新

在 chrome console 執(zhí)行以下命令:

app.message= 'yes !! I do';

beforeUpdate:虛擬 DOM 中根據(jù) data 變化去更新 html
     updated:將虛擬 DOM 更新完成的 HTML 更新到頁面中

階段三:銷毀

在 chrome console 執(zhí)行以下命令:

app.$destroy();

beforeDestroy:銷毀之前調(diào)用
    destroyed:銷毀之后調(diào)用,之后再執(zhí)行app.message= ‘hello vue’,頁面不會同步更新。

常用選項

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue入門之Helloworld</title>
    <script src="https://unpkg.com/vue@2.6.14/dist/vue.min.js"></script>
</head>
<body>
    
<div id="app">
    {{message}}
    <div>價格: {{newPrice}}</div>
    <div>數(shù)字: {{count}}</div>
    <div><button @click="add(2)">add</button></div>
    <div><input v-model="question"></div>
    <div>過濾: {{filtera | filterA}}</div>
</div>

<script type="text/javascript">
// 額外臨時加入時,用于顯示日志
var addLog={
    updated:function(){
        console.log("數(shù)據(jù)放生變化,變化成"+this.count+".");
    }
}

// 擴展
var extendObj ={
    created: function(){
        console.log("我是被擴展出來的");
    }
}

// 實例化vue
var app = new Vue({
    // 掛載實例
    el:'#app',
    // 頁面數(shù)據(jù)初始化,字符,對象、數(shù)組
    data:{
        message: 'hello Vue!',
        price: 100,
        count: 100,
        question: '',
        filtera: 'abc'
    },
    // 計算屬性:主要是對原數(shù)據(jù)進(jìn)行改造輸出。
    // 改造輸出:包括格式化數(shù)據(jù)(價格,日期),大小寫轉(zhuǎn)換,排序,添加符號
    computed: {
        newPrice () {
            return '¥' + this.price + '元';
        }
    },
    // 方法聲明:用于綁定html中的方法
    methods:{
        add (num) {
            this.count += num;
        }
    },
    // data屬性監(jiān)聽器, 作用v-model
    watch: {
        question(val, oldVal) {
            console.log('new: %s, old: %s', val, oldVal);
        }
    },
    // 過濾器,通常格式化字符,使用傳值
    filters: {
        filterA(value) {
            return value.toUpperCase();
        }
    },
    // 混入,作用:減少代碼污染、減少代碼量、實現(xiàn)代碼重用
    mixins: [addLog],
    // 擴展
    extends: extendObj
})
</script>
</body>
</html>

1、computed 計算屬性、改造輸出

計算屬性:主要是對原數(shù)據(jù)進(jìn)行改造輸出。

改造輸出:包括格式化數(shù)據(jù)(價格,日期),大小寫轉(zhuǎn)換,排序,添加符號。

computed: {
    newPrice () {
        return '¥' + this.price + '元';
    }
}

2、methods 用于綁定 html 中的事件對應(yīng)的方法

方法屬性:用于綁定 html 中的事件對應(yīng)的方法

methods:{
    add (num) {
        this.count += num;
    }
}

3、watch 數(shù)據(jù)變化監(jiān)聽器

數(shù)據(jù)變化監(jiān)聽器:主要用于監(jiān)測 data 中的數(shù)據(jù)變化, v-model 生效

watch: {
    question(val, oldVal) {
        console.log('new: %s, old: %s', val, oldVal);
    }
}

4、filters 過濾器:通常格式化字符,使用傳值

filters: {
    filterA(value) {
        return value.toUpperCase();
    }
}

5、mixins 實現(xiàn)代碼重用

混入:用于減少代碼污染、減少代碼量、實現(xiàn)代碼重用

// 額外臨時加入時,用于顯示日志
var addLog={
    updated:function(){
        console.log("數(shù)據(jù)放生變化,變化成"+this.count+".");
    }
}

// 實例化vue
var app = new Vue({
    // 掛載實例
    el:'#app',
    // 頁面數(shù)據(jù)初始化,字符,對象、數(shù)組
    data:{
        count: 100
    },
    // 混入
    mixins: [addLog]
})

6、extends 擴展:對構(gòu)造器進(jìn)行擴展

// 擴展
var extendObj ={
    created: function(){
        console.log("我是被擴展出來的");
    }
}

// 實例化vue
var app = new Vue({
    // 掛載實例
    el:'#app',
    // 頁面數(shù)據(jù)初始化,字符,對象、數(shù)組
    data:{
    },
    // 擴展
    extends: extendObj
})

實例事件

vue 有實例屬性,實例方法,實例事件,前兩個跟選項類似,不是很常用,這次只講實例事件。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue入門之Helloworld</title>
    <script src="https://unpkg.com/vue@2.6.14/dist/vue.min.js"></script>
</head>
<body>

<div id="app">
    <div>數(shù)字:{{count}}</div>
    <button onclick="reduce()">on調(diào)用</button>
    <button onclick="reduceOnce()">once調(diào)用</button>
    <button onclick="off()">off調(diào)用</button>
</div>

<script type="text/javascript">
var app = new Vue({
    el:'#app',
    data:{
        count: 1
    }
})

// $on 在構(gòu)造器外部添加事件
app.$on('reduce',function(){
    console.log('執(zhí)行了reduce()');
    this.count--;
});

// 調(diào)用
function reduce() {
    // 事件調(diào)用
    console.log('emit事件調(diào)用');
    app.$emit('reduce');
}

// $once執(zhí)行一次的事件
app.$once('reduceOnce',function(){
    console.log('只執(zhí)行一次的方法');
    this.count--;
});

// 調(diào)用
function reduceOnce() {
    app.$emit('reduceOnce');
}

// 關(guān)閉事件
function off(){
    console.log('關(guān)閉事件');
    app.$off('reduce');
}
</script>
</body>
</html>

1、$on(在構(gòu)造器外部添加事件)

$on 接收兩個參數(shù),第一個參數(shù)是調(diào)用時的事件名稱,第二個參數(shù)是一個匿名方法

app.$on('reduce',function(){
    console.log('執(zhí)行了reduce()');
    this.count--;
});

2、$once(執(zhí)行一次的事件)

app.$once('reduceOnce',function(){
    console.log('只執(zhí)行一次的方法');
    this.count--;
});

3、$off(關(guān)閉事件)

function off(){
    console.log('關(guān)閉事件');
    app.$off('reduce');
}

4、$emit(事件調(diào)用)

function reduce() {
    // 事件調(diào)用
    console.log('emit事件調(diào)用');
    app.$emit('reduce');
}

自定義指令

vue 中的自定義指令通過 Vue.directive 來實現(xiàn),主要完成內(nèi)置指令不能完成的一些事情。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue入門之自定義指令</title>
    <script src="https://unpkg.com/vue@2.6.14/dist/vue.min.js"></script>
</head>
<body>
<div id="app">
    <div v-test="color">
        {{num}}
    </div>
</div>
<button onclick="unbindApp()">解綁</button>

<script type="text/javascript">
// 解綁
function unbindApp() {
    app.$destroy();
}

// 自定義指令
Vue.directive("test",{
    //1-被綁定
    bind:function (el, binding, vnode) {
        console.log("1-bind 被綁定");
        console.log("el:",el);
        console.log("binding:",binding);
        console.log("vnode:",vnode);
        el.style.color = binding.value;
    },
    //2-被插入
    inserted:function (el, binding, vnode) {
        console.log("2-inserted 被插入");
    },
    //3-更新
    update:function (el, binding, vnode) {
        console.log("3-update 更新");
    },
    //4-更新完成
    componentUpdated:function (el, binding, vnode) {
        console.log("4-componentUpdated 更新完成");
    },
    //5-解綁
    unbind:function (el, binding, vnode) {
        console.log("5-unbind 解綁");
    }
});

var app = new Vue({
    el:'#app',
    data:{
        num: 123,
        color:'red'
    }
})
</script>
</body>
</html>

1、調(diào)試步驟

(1)chrome打開控制器查看

(2)控制臺輸入“ app.num='通過控制臺設(shè)置的新name'

(3)點擊解綁按鈕

2、參數(shù)說明

     el:指令所綁定的元素,可以用來直接操作 DOM
binding: 一個對象,包含指令的很多信息
 vnode::Vue編譯生成的虛擬節(jié)點

3、生命周期

自定義指令有五個生命周期(也叫鉤子函數(shù)),分別是 bind、inserted、update、componentUpdated、unbind,說明如下:

1、bind:

只調(diào)用一次,指令第一次綁定到元素時調(diào)用,用這個鉤子函數(shù)可以定義一個綁定時執(zhí)行一次的初始化動作。

2、inserted:

被綁定元素插入父節(jié)點時調(diào)用(父節(jié)點存在即可調(diào)用,不必存在于document中)

3、update:

被綁定于元素所在的模板更新時調(diào)用,而無論綁定值是否變化。

通過比較更新前后的綁定值,可以忽略不必要的模板更新。

4、componentUpdated:被綁定元素所在模板完成一次更新周期時調(diào)用。

5、unbind:只調(diào)用一次,指令與元素解綁時調(diào)用

組件基礎(chǔ)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue入門之組件</title>
    <script src="https://unpkg.com/vue@2.6.14/dist/vue.min.js"></script>
</head>
<body>

<div id="app">
    <!-- 全局組件 -->
    <div><button-counter></button-counter></div>
    <!-- 局部組件 -->
    <div><button-inner></button-inner></div>
    <!-- 常規(guī)屬性傳值 -->
    <div><button-props here="hello" from-here="world"></button-props></div>
    <!-- v-bind傳值 -->
    <div><button-props v-bind:here="message" :from-here="message"></button-props></div>
    <!-- 父子組件調(diào)用 -->
    <div><parent></parent></div>
</div>

<script type="text/javascript">
// 定義全局組件
Vue.component('button-counter', {
    data: function () {
        return {
            count: 0
        }
    },
    template: '<button v-on:click="count++">全局組件顯示: {{ count }}</button>'
});

// 子組件
var city = {
    template:`<div>Sichuan of China</div>`
}
// 父組件
var parent = {
    template:
        `<div>
            <p> Panda from China!</p>
            <city></city>
        </div>`,
    components:{
        "city": city
    }
}

// 實例化
new Vue({
    el: '#app',
    data: {
        message: 'hello'
    },
    // 定義局部組件
    components:{
        "button-inner":{
            data: function() {
                return {
                    inner: 0
                }
            },
            template: '<button v-on:click="inner++">局部組件顯示: {{ inner }}</button>'
        },
        // 取值
        "button-props":{
            template:`<div style="color:red;">參數(shù)1: {{ here }}:---參數(shù)2: {{fromHere}}</div>`,
            props:['here', 'fromHere']
        },
        // 組件注冊
        "parent": parent
    }
});
</script>
</body>
</html>

1、組件注冊 component

(1)全局注冊

// script
Vue.component('button-counter', {
    data: function () {
        return {
            count: 0
        }
    },
    template: '<button v-on:click="count++">全局組件顯示: {{ count }}</button>'
});

new Vue({
    el: '#app'
});

// html使用
<button-counter></button-counter>

(2)局部注冊

// script
new Vue({
    el: '#app',
    components:{
        "button-inner":{
            data: function() {
                return {
                    inner: 0
                }
            },
            template: '<button v-on:click="inner++">局部組件顯示: {{ inner }}</button>'
        }
    }
});

// html使用
<button-inner></button-inner>

2、props 屬性傳值

(1)屬性取值

// script
new Vue({
        el: '#app',
        components:{
            "button-props":{
                template:`<div style="color:red;">參數(shù)1: {{ here }}:---參數(shù)2: {{fromHere}}</div>`,
                props:['here', 'fromHere']
            }
        }
    });

// html使用
<button-props here="hello" from-here="world"></button-props>

PS:如果屬性帶 “-”,props 中需要駝峰取值

(2)在構(gòu)造器向組件傳值(v-bind)

// script
new Vue({
        el: '#app',
        data: {
            message: 'hello'
        },
        components:{
            "button-props":{
                template:`<div style="color:red;">參數(shù)1: {{ here }}:---參數(shù)2: {{fromHere}}</div>`,
                props:['here', 'fromHere']
            }
        }
    });

// html使用
<button-props v-bind:here="message" :from-here="message"></button-props>

3、父子組件

// script
// 子組件
var city = {
    template:`<div>Sichuan of China</div>`
}
// 父組件
var parent = {
    template:
        `<div>
            <p> Panda from China!</p>
            <city></city>
        </div>`,
    components:{
        "city": city
    }
}

// 實例化
new Vue({
    el: '#app',
    // 定義局部組件
    components:{
        // 組件注冊
        "parent": parent
    }
});

// html使用
<parent></parent>

制作模板

vue 中的模板使用 template 來實現(xiàn)。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue入門之組件</title>
    <script src="https://unpkg.com/vue@2.6.14/dist/vue.min.js"></script>
</head>
<body>
<div id="app">
    <!-- template標(biāo)簽?zāi)0?-->
    <template id="demo2">
        <h2 style="color:red">我是template標(biāo)簽?zāi)0?lt;/h2>
    </template>
</div>

<!-- script標(biāo)簽?zāi)0?-->
<script type="x-template" id="demo3">
    <h2 style="color:red">我是script標(biāo)簽?zāi)0?lt;/h2>
</script>

<script type="text/javascript">
    // 實例化
    new Vue({
        el: '#app',
        data: {
            message: 'hello'
        },
        // 選項模板
        //template:`<h1 style="color:red">我是選項模板</h1>`
        //template:'#demo2'
        template:'#demo3'
    });
</script>
</body>
</html>

1、選項模板

<div id="app">
</div>

<script type="text/javascript">
    // 實例化
    new Vue({
        el: '#app',
        data: {
            message: 'hello'
        },
        template:`<h1 style="color:red">我是選項模板</h1>`
    });
</script>

2、標(biāo)簽?zāi)0?/strong>

<div id="app">
    <template id="demo2">
        <h2 style="color:red">我是template標(biāo)簽?zāi)0?lt;/h2>
    </template>
</div>

<script type="text/javascript">
    // 實例化
    new Vue({
        el: '#app',
        data: {
            message: 'hello'
        },
        template:'#demo2'
    });
</script>

3、<script> 標(biāo)簽?zāi)0?/strong>

<div id="app">
</div>

<script type="x-template" id="demo3">
    <h2 style="color:red">我是script標(biāo)簽?zāi)0?lt;/h2>
</script>

<script type="text/javascript">
    // 實例化
    new Vue({
        el: '#app',
        data: {
            message: 'hello'
        },
        template:'#demo3'
    });
</script>

插槽 slot

插槽,也就是 slot,是組件的一塊HTML模板,一個 slot 最核心的兩個問題是顯示不顯示和怎樣顯示。

1、單個 slot

單個插槽,別名默認(rèn)插槽、匿名插槽,不用設(shè)置 name 屬性。

<div id="app">
    <children1>
        <span>12345</span>
    </children1>
</div>

<script type="text/javascript">
    var app = new Vue({
        el: '#app',
        components: {
            children1: {
                template: "<button><slot></slot>單個插槽</button>"
            }
        }
    });
</script>

2、具名 slot

插槽加了 name 屬性,就變成了具名插槽。

具名插槽可以在一個組件中出現(xiàn) N 次,出現(xiàn)在不同的位置。

<div id="app">
    <children2>
        <span slot="first" @click="tobeknow">12345</span>
        <span slot="second">56789</span>
    </children2>
</div>

<script type="text/javascript">
var app = new Vue({
    el: '#app',
    methods: {
        tobeknow: function () {
            console.log("It is the parent's method");
        }
    },
    components: {
        children2: {//這個無返回值,不會繼續(xù)派發(fā)  
            template: "<button><slot name='first'></slot>具名插槽,<slot name='second'></slot></button>"
        }
    }
});
</script>

3、作用域 slot

vue2.5 版本中 slot-scope 取代了 scope,來實現(xiàn)作用域插槽,主要用在組件調(diào)用中,具體在 template 標(biāo)簽上面使用 slot-scope 來獲取插槽 slot 上面的屬性值,獲取值的為一個對象,slot-scope=”它可以取任意字符串”,在 element-ui 的組件中經(jīng)常看到。

<div id="app">
    <!-- 將數(shù)據(jù)傳遞給組件 -->
    <tb-list :data="data">
        <!-- 獲取slot上面的值 -->
        <template slot-scope="scope">
            <p>索引:{{JSON.stringify(scope)}}</p>
            <p>索引:{{scope.$index}}</p>
            <p>姓名:{{scope.row.name}}</p>
            <p>年齡: {{scope.row.age}}</p>
            <p>性別: {{scope.row.sex}}</p>
        </template>
    </tb-list>
</div>

<script type="text/javascript">
var app = new Vue({
    el: '#app',
    data: {
        data: [{
            name: 'kongzhi1',
            age: '29',
            sex: 'man'
        }]
    },
    components: {
        // 作用域slot
        'tb-list': {
            template:
                `<ul>
                    <li v-for="(item, index) in data">
                        <slot :row="item" :$index="index"></slot>
                    </li>
                </ul>`,
            // 獲取值
            props: ['data']
        }
    }
});
</script>

Vue 項目中應(yīng)用 vue-router

Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,讓構(gòu)建單頁面應(yīng)用變得易如反掌。

包含的功能有:

  • 嵌套的路由/視圖表、
  • 模塊化的、基于組件的路由配置、
  • 路由參數(shù)、查詢、通配符、
  • 基于 Vue.js 過渡系統(tǒng)的視圖過渡效果、
  • 細(xì)粒度的導(dǎo)航控制、
  • 帶有自動激活的 CSS class 的鏈接、
  • HTML5 歷史模式或 hash 模式,在 IE9 中自動降級、
  • 自定義的滾動條行為

快速入門

vue-router 是 vue 官方的路由解決方案,簡單易用,中文官方地址如下:vue-router 中文手冊

安裝

vue-router 是一個插件包,需要用 npm 來進(jìn)行安裝的。如果采用 vue-cli 構(gòu)建初始化項目會提示安裝,也可以自己使用命令安裝:

npm install vue-router --save

解讀核心文件

用 vue-cli 構(gòu)建項目之后,在 src/router/index.js 文件中,看到以下的路由核心文件:

// 引入vue框架
import Vue from 'vue'
// 引入vue-router路由依賴
import Router from 'vue-router'
// 引入頁面組件,命名為 HelloWorld
import HelloWorld from '@/components/HelloWorld'

// Vue全局使用Router
Vue.use(Router)

// 定義路由配置
export default new Router({
  routes: [                  //配置路由,這里是個數(shù)組
    {                        //每一個鏈接都是一個對象
      path: '/',             //鏈接路徑
      name: 'HelloWorld',        //路由名稱,
      component: HelloWorld      //對應(yīng)的組件模板
    }
  ]
})

使用

在系統(tǒng)入口文件 main.js 中注入 router,代碼如下:

// 引入vue框架
import Vue from 'vue'
// 引入根組件
import App from './App'
// 引入路由配置
import router from './router'

// 關(guān)閉生產(chǎn)模式下給出的提示
Vue.config.productionTip = false

// 定義實例
new Vue({
  el: '#app',
  router, // 注入框架中
  components: { App },
  template: '<App/>'
})

路由屬性配置說明

代碼如下:

export default new Router({
    mode: 'history', //路由模式,取值為history與hash
    base: '/', //打包路徑,默認(rèn)為/,可以修改
    routes: [
    {
        path: string, //路徑
        ccomponent: Component; //頁面組件
        name: string; // 命名路由-路由名稱
        components: { [name: string]: Component }; // 命名視圖組件
        redirect: string | Location | Function; // 重定向
        props: boolean | string | Function; // 路由組件傳遞參數(shù)
        alias: string | Array<string>; // 路由別名
        children: Array<RouteConfig>; // 嵌套子路由
        beforeEnter?: (to: Route, from: Route, next: Function) => void; // 路由單獨鉤子
        meta: any; // 自定義標(biāo)簽屬性,比如:是否需要登錄
        icon: any; // 圖標(biāo)
        // 2.6.0+
        caseSensitive: boolean; // 匹配規(guī)則是否大小寫敏感?(默認(rèn)值:false)
        pathToRegexpOptions: Object; // 編譯正則的選項
    }
    ]
})

頁面跳轉(zhuǎn)

一、router-link 標(biāo)簽跳轉(zhuǎn)

在 html 標(biāo)簽內(nèi)使用 router-link 跳轉(zhuǎn),相應(yīng)于超鏈接 a 標(biāo)簽,使用方式如下:

<router-link to="/">[顯示字段]</router-link>

to:導(dǎo)航路徑

使用示例如下:

<p>導(dǎo)航 :
   <router-link to="/">首頁</router-link>
   <router-link to="/hello">hello</router-link>
</p>

二、編程式導(dǎo)航-JS代碼內(nèi)部跳轉(zhuǎn)

實際項目中,很多時候都是通過在JS代碼內(nèi)部進(jìn)行導(dǎo)航的跳轉(zhuǎn),使用方式如下:

this.$router.push('/xxx')

具體的簡單用法:

(1)先編寫一個按鈕,在按鈕上綁定 goHome( ) 方法。

<button @click="goHome">回到首頁</button>

(2)在 <script> 模塊里加入 goHome 方法,并用 this.$router.push(‘/’) 導(dǎo)航到首頁

export default {
    name: 'app',
    methods: {
        goHome(){
            this.$router.push('/home');
        }
    }
}

三、其他常用方法

//  后退一步記錄,等同于 history.back()
this.$router.go(-1)
// 在瀏覽器記錄中前進(jìn)一步,等同于 history.forward()
this.$router.go(1)

子路由-路由嵌套

子路由,也叫路由嵌套,采用在 children 后跟路由數(shù)組來實現(xiàn),數(shù)組里和其他配置路由基本相同,需要配置 pathcomponent,然后在相應(yīng)部分添加 <router-view/> 來展現(xiàn)子頁面信息,相當(dāng)于嵌入 iframe 。

1、src/components/Home.vue(父頁面)

<template>
    <div class="hello">
        <h1>{{ msg }}</h1>
        <!-- 添加子路由導(dǎo)航 -->
        <p>導(dǎo)航 :
            <router-link to="/home">首頁</router-link> | 
            <router-link to="/home/one">-子頁面1</router-link> |
            <router-link to="/home/two">-子頁面2</router-link>
        </p>
        <!-- 子頁面展示部分 -->
        <router-view/>
    </div>
</template>

<script>
export default {
    name: 'Home',
    data () {
        return {
            msg: 'Home Page!'
        }
    }
}
</script>

<style scoped>
</style>

2、src/components/One.vue(子頁面1)

<template>
    <div class="hello">
        <h1>{{ msg }}</h1>
    </div>
</template>
<script>
export default {
    name: 'One',
    data () {
        return {
            msg: 'Hi, I am One Page!'
        }
    }
}
</script>

<style scoped>
</style>

3、src/components/Two.vue(子頁面2)

<template>
    <div class="hello">
        <h1>{{ msg }}</h1>
    </div>
</template>
<script>
export default {
    name: 'Two',
    data () {
        return {
            msg: 'Hi, I am Two Page!'
        }
    }
}
</script>

<style scoped>
</style>

4、src/router/index.js(路由配置)

import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/components/Home'
import One from '@/components/One' 
import Two from '@/components/Two'

Vue.use(Router)

export default new Router({
    routes: [
    {
        path: '/', // 默認(rèn)頁面重定向到主頁
        redirect: '/home'
    },
    {
        path: '/home', // 主頁路由
        name: 'Home',
        component: Home,
        children:[ // 嵌套子路由
            {
                path:'one', // 子頁面1
                component:One
            },
            {
                path:'two', // 子頁面2
                component:Two
            },
        ]
    }
    ]
})

路由傳遞參數(shù)

1、通過 <router-link> 標(biāo)簽中的 to 傳參

基本語法:

<router-link :to="{name:xxx, params: {key:value}}">
valueString
</router-link>

PS:上面 to 前邊是帶冒號,后邊跟的是一個對象形勢的字符串

  name:在路由配置文件中起的 name 值。叫做命名路由,下一節(jié)會講到。
params:要傳的參數(shù),它是對象形式,在對象里可以傳遞多個值。

具體實例如下:

(1)在 src/components/Home.vue 里面導(dǎo)航中添加如下代碼:

<router-link :to="{name: 'one', params:{username:'test123'}}">
子頁面1
</router-link>

(2)在 src/router/indes.js 中添加如下代碼,重點是 name:

{
    path:'one', // 子頁面1
    name: 'one', // 路由名稱-命名路由
    component:One
}

(3)在 src/components/One.vue 里面接受參數(shù),代碼如下:

<h2>{{$route.params.username}}</h2>

2、url 中傳遞參數(shù)

(1)在路由中以冒號傳遞,在 src/router/index.js 中加入如下代碼:

{
    path:'/home/two/:id/:name', // 子頁面2
    component:Two
},

(2)接受參數(shù),在 src/components/Two.vue 中加入如下代碼:

<p>ID:{{ $route.params.id}}</p>
<p>名稱:{{ $route.params.name}}</p>

(3)路由跳轉(zhuǎn),在 src/components/Home.vue 中加入如下代碼:

<router-link to="/home/two/1/張三">子頁面2</router-link>

PS:to 前沒有冒號為字符串路由,必須全部匹配。

(4)如果路由參數(shù)需要有特定的規(guī)則,就需要加入正則表達(dá)式了,示例如下:

{
    path:'/home/two/:id(\\d+)/:name', // 子頁面2
    component:Two
}

源碼 E:\node\vue296\src\router\index.js

import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/components/Home'
import One from '@/components/One'
import Two from '@/components/Two'

Vue.use(Router)

export default new Router({
    routes: [
        {
            path: '/', // 默認(rèn)頁面重定向到主頁
            redirect: '/home'
        },
        {
            path: '/home', // 主頁路由
            name: 'Home',
            component: Home,
            children: [ // 嵌套子路由
                {
                    path: 'one', // 子頁面1
                    name: 'one', // 路由名稱-命名路由
                    component: One
                },
                {
                    path: '/home/two/:id/:name', // 子頁面2
                    component: Two
                },
            ]
        }
    ]
})

E:\node\vue296\src\components\Two.vue

<template>
    <div class="hello">
        <h1>{{ msg }}</h1>
        <p>ID:{{ $route.params.id}}</p>
        <p>名稱:{{ $route.params.name}}</p>
    </div>
</template>
<script>
export default {
    name: 'Two',
    data () {
        return {
            msg: 'Hi, I am Two Page!'
        }
    }
}
</script>

<style scoped>
</style>

E:\node\vue296\src\components\Home.vue

<template>
    <div class="hello">
        <h1>{{ msg }}</h1>
        <!-- 添加子路由導(dǎo)航 -->
        <p>導(dǎo)航 :
            <router-link to="/home">首頁</router-link> | 
            <router-link to="/home/one">-子頁面1</router-link> |
            <router-link to="/home/two">-子頁面2</router-link>
            <br>
            <router-link :to="{name: 'one', params:{username:'test123'}}">子頁面1傳遞參數(shù)</router-link>
            <br>
            <router-link to="/home/two/1/張三">子頁面2</router-link>
        </p>
        <!-- 子頁面展示部分 -->
        <router-view/>
    </div>
</template>

<script>
export default {
    name: 'Home',
    data () {
        return {
            msg: 'Home Page!'
        }
    }
}
</script>

<style scoped>
</style>

編程式導(dǎo)航 -params 傳遞參數(shù)

(1)在 src/router/index.js 頁面加入如下代碼:

{
    path:'/home/three', // 子頁面3
    name: 'three',
    component:Three
}

(2)在 src/components/Three.vue 頁面加入如下代碼:

<p>ID:{{ $route.params.id}}</p>
<p>名稱:{{ $route.params.name}}</p>

(3)在 src/components/Home.vue 中加入如下代碼:

// template
<button @click="toThreePage">頁面3-params傳參</button>

// script
methods: {
    toThreePage() {
        this.$router.push({name: 'three', params: {id: 1, name: 'zhangsan'}})
    }
}

說明:

A、動態(tài)路由使用 params 傳遞參數(shù),在 this.$router.push() 方法中 path 不能和 params 一起使用,否則 params 將無效。需要用 name 來指定頁面。

B、以上方式參數(shù)不會顯示到瀏覽器的地址欄中,如果刷新一次頁面,就獲取不到參數(shù)了,改進(jìn)方式將第一部中的代碼改成如下:

{
    path:'/home/three/:id/:name', // 子頁面3
    name: 'three',
    component:Three
}

源碼 E:\node\vue296\src\router\index.js

import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/components/Home'
import One from '@/components/One'
import Two from '@/components/Two'
import Three from '@/components/Three'

Vue.use(Router)

export default new Router({
    routes: [
        {
            path: '/', // 默認(rèn)頁面重定向到主頁
            redirect: '/home'
        },
        {
            path: '/home', // 主頁路由
            name: 'Home',
            component: Home,
            children: [ // 嵌套子路由
                {
                    path: 'one', // 子頁面1
                    name: 'one', // 路由名稱-命名路由
                    component: One
                },
                {
                    path: '/home/two/:id/:name', // 子頁面2
                    component: Two
                },
                {
                    path:'/home/three/:id/:name', // 子頁面3
                    name: 'three',
                    component:Three
                }
            ]
        }
    ]
})

E:\node\vue296\src\components\Three.vue

<template>
    <div class="hello">
        <h1>{{ msg }}</h1>
        <p>ID:{{ $route.params.id}}</p>
        <p>名稱:{{ $route.params.name}}</p>
    </div>
</template>
<script>
export default {
    name: 'Three',
    data () {
        return {
            msg: 'Hi, I am Three Page!'
        }
    }
}
</script>

<style scoped>
</style>

E:\node\vue296\src\components\Home.vue

<template>
    <div class="hello">
        <h1>{{ msg }}</h1>
        <!-- 添加子路由導(dǎo)航 -->
        <p>導(dǎo)航 :
            <router-link to="/home">首頁</router-link> | 
            <router-link to="/home/one">-子頁面1</router-link> |
            <router-link to="/home/two">-子頁面2</router-link>
            <br>
            <router-link :to="{name: 'one', params:{username:'test123'}}">子頁面1傳遞參數(shù)</router-link>
            <br>
            <router-link to="/home/two/1/張三">子頁面2</router-link>
            <br>
            <button @click="toThreePage">頁面3-params傳參</button>
        </p>
        <!-- 子頁面展示部分 -->
        <router-view/>
    </div>
</template>

<script>
export default {
    name: 'Home',
    data () {
        return {
            msg: 'Home Page!'
        }
    },
    methods: {
        toThreePage() {
            this.$router.push({name: 'three', params: {id: 1, name: 'zhangsan'}})
        }
    }
}
</script>

<style scoped>
</style>

編程式導(dǎo)航 -query 傳遞參數(shù)

(1)在 src/router/index.js 頁面加入如下代碼:

{
    path:'/home/three', // 子頁面3
    name: 'three',
    component:Three
}

(2)在 src/components/Three.vue 頁面加入如下代碼:

<p>ID:{{ $route.query.id}}</p>
<p>名稱:{{ $route.query.name}}</p>

(3)在 src/components/Home.vue 中加入如下代碼:

// template
<button @click="toThreePage">頁面3-params傳參</button>

// script
methods: {
    toThreePage() {
        this.$router.push({path: '/home/three', query: {id: 1, name: 'zhangsan'}})
    }
}

PS:動態(tài)路由使用 query 傳遞參數(shù),會顯示到瀏覽器地址欄中,

以上鏈接為 /home/three?id=1&name=zhangsan

源碼

E:\node\vue296\src\router\index.js

import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/components/Home'
import One from '@/components/One'
import Two from '@/components/Two'
import Three from '@/components/Three'

Vue.use(Router)

export default new Router({
    routes: [
        {
            path: '/', // 默認(rèn)頁面重定向到主頁
            redirect: '/home'
        },
        {
            path: '/home', // 主頁路由
            name: 'Home',
            component: Home,
            children: [ // 嵌套子路由
                {
                    path: 'one', // 子頁面1
                    name: 'one', // 路由名稱-命名路由
                    component: One
                },
                {
                    path: '/home/two/:id/:name', // 子頁面2
                    component: Two
                },
                {
                    path:'/home/three', // 子頁面3
                    name: 'three',
                    component:Three
                }
            ]
        }
    ]
})

E:\node\vue296\src\components\Three.vue

<template>
    <div class="hello">
        <h1>{{ msg }}</h1>
        <p>ID:{{ $route.query.id}}</p>
        <p>名稱:{{ $route.query.name}}</p>
    </div>
</template>
<script>
export default {
    name: 'Three',
    data () {
        return {
            msg: 'Hi, I am Three Page!'
        }
    }
}
</script>

<style scoped>
</style>

E:\node\vue296\src\components\Home.vue

<template>
    <div class="hello">
        <h1>{{ msg }}</h1>
        <!-- 添加子路由導(dǎo)航 -->
        <p>導(dǎo)航 :
            <router-link to="/home">首頁</router-link> | 
            <router-link to="/home/one">-子頁面1</router-link> |
            <router-link to="/home/two">-子頁面2</router-link>
            <br>
            <router-link :to="{name: 'one', params:{username:'test123'}}">子頁面1傳遞參數(shù)</router-link>
            <br>
            <router-link to="/home/two/1/張三">子頁面2</router-link>
            <br>
            <button @click="toThreePage">頁面3-params傳參</button>
        </p>
        <!-- 子頁面展示部分 -->
        <router-view/>
    </div>
</template>

<script>
export default {
    name: 'Home',
    data () {
        return {
            msg: 'Home Page!'
        }
    },
    methods: {
        toThreePage() {
            this.$router.push({path: '/home/three', query: {id: 1, name: 'zhangsan'}})
        }
    }
}
</script>

<style scoped>
</style>

命名路由-命名視圖-重定向-別名

1、命名路由

給一個路由命一個唯一的名稱,然后跳轉(zhuǎn)調(diào)用這個名稱即可。

(1)在 src/router/index.js 中加一個帶 name 的路由,代碼如下:

{
    path: 'one', // 子頁面1
    name: 'one', // 路由名稱-命名路由
    component: One // 頁面組件
}

(2)在 src/component/Home.vue 頁面中調(diào)用,代碼如下:

// template跳轉(zhuǎn)調(diào)用
<router-link :to="{name: 'one'}">子頁面1</router-link>

// router.push函數(shù)跳轉(zhuǎn)調(diào)用
router.push({ name: 'user'}})

2、命名視圖

在同一個頁面展示多個視圖,如果不用嵌套,只能采用命名視圖來實現(xiàn)了。

代碼如下:

(1)在 src/router/index.js 中,代碼如下:

import Vue from 'vue'
import Router from 'vue-router'
// 創(chuàng)建頁面組件
const Header = { template: '<div>Header</div>' }
const Left = { template: '<div>Left</div>' }
const Right = { template: '<div>Right</div>' }

Vue.use(Router)

export default new Router({
    routes: [
	    {
	        path: '/', // 主頁路由
	        components: {
	            default: Header,
	            a: Left,
	            b: Right
	        }
	    }
    ]
})

(2)在 src/App.vue 中,代碼如下:

<template>
    <div id="app">
        <router-view />
        <router-view name="a" class="left" />
        <router-view name="b" class="right" />
    </div>
</template>

<script>
export default {
    name: 'App'
}
</script>

<style>
#app {
    text-align: center;
    color: #2c3e50;
    width: 500px;
    border: 1px solid red;
    margin: 0 auto;
}

.left,.right{
    float: left;
    width:48%;
    text-align: center;
    border:1px solid red
}
</style>

PS:經(jīng)過實踐,命名視圖只能放在最頂級的頁面中,即第一步中的代碼不能放在其他頁面中。

3、重定向

重定向是通過 route 的配置中關(guān)鍵詞 redirect 來實現(xiàn)的,具體代碼如下:

(1)在 src/router/index.js 中,代碼如下:

export default new Router({
    routes: [
	    {
	        path: '/', // 默認(rèn)頁面重定向到主頁
	        redirect: '/home' // 重定向
	    },
	    {
	        path: '/home', // 主頁路由
	        component: Home,
	        children:[ // 嵌套子路由
	            {
	                path:'/home/two/:id/:name', // 子頁面2
	                component:Two
	            },
	            {
	                path:'/home/three/:id/:name', // 子頁面3
	                name: 'three', // 路由名稱-命名路由
	                redirect: '/home/two/:id/:name' // 重定向-傳遞參數(shù)
	            },
	        ]
	    }
    ]
})

(2)在 src/components/Home.vue 中,代碼如下:

<router-link to="/">首頁</router-link> | 
<router-link to="/home/two/1/lisi">子頁面2</router-link>  |
<router-link :to="{name: 'three', params: {id: 1, name: 'zhangsan'}}">
子頁面3
</router-link>

說明1-不帶參數(shù)的重定向:

redirect: '/home' // 重定向-不帶參數(shù)

說明2-帶參數(shù)的重定向:

redirect: '/home/two/:id/:name' // 重定向-傳遞參數(shù)

4、別名

重定向是通過 route 的配置中關(guān)鍵詞 alias 來實現(xiàn)的,具體代碼如下:

(1)在 src/router/index.js 中,代碼如下:

{
    path:'/one', // 子頁面1
    component:One,
    alias: '/oneother'
}

(2)在 src/components/Home.vue 中,代碼如下:

<router-link to="/oneother">子頁面1</router-link>

說明1:redirect 和 alias 的區(qū)別

redirect:直接改變了 url 的值,把 ur l變成了真實的 path 路徑。\

alias:

url 路徑?jīng)]有別改變,這種更友好,讓用戶知道自己訪問的路徑,只是改變了 <router-view> 中的內(nèi)容。

說明2:別名請不要用在 path 為 ’/’ 中,如下代碼的別名是不起作用的。

<router-link to="/oneother">子頁面1</router-link>

過渡動畫

(1)在 <router-view> 標(biāo)簽的外部添加 <transition> 標(biāo)簽,標(biāo)簽還需要一個 name 屬性,代碼如下:

<transition name="fade" mode="out-in">
    <router-view />
</transition>

過渡模式 mode

in-out:新元素先進(jìn)入過渡,完成之后當(dāng)前元素過渡離開,默認(rèn)模式。

out-in:當(dāng)前元素先進(jìn)行過渡離開,離開完成后新元素過渡進(jìn)入。

(2)加入CSS,一共4個CSS類名,四個類名與 transitionname 屬性有關(guān),比如name=”fade”,相應(yīng)的 css 如下:

/*頁面切換動畫*/
/*進(jìn)入過渡的結(jié)束狀態(tài),元素被插入時就生效,在過渡過程完成后移除*/
.fade-enter-active {
    transition: opacity .5s;
}
/*進(jìn)入過渡的開始狀態(tài),元素被插入時生效,只應(yīng)用一幀后立刻刪除*/
.fade-enter {
    opacity: 0;
}
/*離開過渡的開始狀態(tài),元素被刪除時觸發(fā),只應(yīng)用一幀后立刻刪除*/
.fade-leave {
    opacity: 1;
}
/*離開過渡的結(jié)束狀態(tài),元素被刪除時生效,離開過渡完成后被刪除*/
.fade-leave-active {
    opacity:0;
    transition: opacity .5s;
}

文件:E:\node\vue296\src\App.vue

<template>
  <div id="app">
    <img src="./assets/logo.png">
    <transition name="fade" mode="out-in">
        <router-view />
    </transition>
  </div>
</template>

<script>
export default {
  name: 'App'
}
</script>

<style>
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
/*頁面切換動畫*/
/*進(jìn)入過渡的結(jié)束狀態(tài),元素被插入時就生效,在過渡過程完成后移除*/
.fade-enter-active {
    transition: opacity .5s;
}
/*進(jìn)入過渡的開始狀態(tài),元素被插入時生效,只應(yīng)用一幀后立刻刪除*/
.fade-enter {
    opacity: 0;
}
/*離開過渡的開始狀態(tài),元素被刪除時觸發(fā),只應(yīng)用一幀后立刻刪除*/
.fade-leave {
    opacity: 1;
}
/*離開過渡的結(jié)束狀態(tài),元素被刪除時生效,離開過渡完成后被刪除*/
.fade-leave-active {
    opacity:0;
    transition: opacity .5s;
}
</style>

mode 與 404

1、mode 模式

代碼示例:

export default new Router({
    mode: 'history', //mode模式
    routes: [...]
})

mode取值說明:

(1)histroy:URL就像正常的 url,示例:http://localhost:8080/home
(2)   hash:默認(rèn)值,會多一個 “#”,示例:http://localhost:8080/#/home

2、404頁面設(shè)置

如果訪問的路由不存在,或者用戶輸入錯誤時,會有一個404友好的提示頁面,配置如下:

(1)在 /src/router/index.js 中加入如下代碼:

// 404
{
    path: '*',
    component: () => import('@/components/404')
}

(2)在 src/components/404.vue 中編寫如下代碼:

<template>
    <div class="hello">
        <h1>404 not found</h1>
    </div>
</template>
<script>
export default {
    data () {
        return {

        }
    }
}
</script>

<style scoped>
</style>

路由鉤子

路由鉤子,即導(dǎo)航鉤子,其實就是路由攔截器,vue-router 一共有三類:

1、全局鉤子:最常用

2、路由單獨鉤子

3、組件內(nèi)鉤子

1、全局鉤子

src/router/index.js 中使用,代碼如下:

// 定義路由配置
const router = new VueRouter({ ... })

// 全局路由攔截-進(jìn)入頁面前執(zhí)行
router.beforeEach((to, from, next) => {
    // 這里可以加入全局登陸判斷
    // 繼續(xù)執(zhí)行
    next();
});

// 全局后置鉤子-常用于結(jié)束動畫等
router.afterEach(() => {
    //不接受next
});

export default router;

每個鉤子方法接收三個參數(shù):

     to: Route : 即將要進(jìn)入的目標(biāo) [路由對象]
   from: Route : 當(dāng)前導(dǎo)航正要離開的路由
next: Function : 繼續(xù)執(zhí)行函數(shù)

                          next():繼續(xù)執(zhí)行
                     next(false):中斷當(dāng)前的導(dǎo)航。
next(‘/‘) 或 next({ path: ‘/‘ }):跳轉(zhuǎn)新頁面,常用于登陸失效跳轉(zhuǎn)登陸

2、路由單獨鉤子

使用:在路由配置中單獨加入鉤子,在 src/router/index.js 中使用,代碼如下:

{
          path:'/home/one', // 子頁面1
     component: One,
   // 路由內(nèi)鉤子
   beforeEnter: (to, from, next) => {
   console.log('進(jìn)入前執(zhí)行');
       next();
   }
}

3、組件內(nèi)鉤子

使用:在路由組件內(nèi)定義鉤子函數(shù):

beforeRouteEnter:進(jìn)入頁面前調(diào)用
beforeRouteUpdate (2.2 新增):頁面路由改變時調(diào)用,一般需要帶參數(shù)
beforeRouteLeave:離開頁面調(diào)用

任意找一頁面,編寫如下代碼:

<script>
export default {
    name: 'Two',
    data () {
        return {
            msg: 'Hi, I am Two Page!'
        }
    },
    // 進(jìn)入頁面前調(diào)用
    beforeRouteEnter(to, from, next) {
        console.log('進(jìn)入enter路由鉤子')
        next()
    },
    // 離開頁面調(diào)用
    beforeRouteLeave(to,from, next){
        console.log('進(jìn)入leave路由鉤子')
        next()
    },
    // 頁面路由改變時調(diào)用
    beforeRouteUpdate(to, from, next) {
        console.log('進(jìn)入update路由鉤子')
        console.log(to.params.id)
        next()
    }
}
</script>

路由懶加載

1、路由正常模式:

// 1、先引入頁面組件
import Home from '@/components/Home'

// 2、使用組件
{
   path: '/home',
   component: Home
}

2、懶加載模式

大項目中,為了提高初始化頁面的效率,路由一般使用懶加載模式,一共三種實現(xiàn)方式。

(1)第一種寫法:

component: (resolve) => require(['@/components/One'], resolve)

(2)第二種寫法:

component: () => import('@/components/Two')

(3)第三種寫法:

components: r => require.ensure([], () => r(require('@/components/Three')), 'group-home')

PS:

一般常用第二種簡寫
第三種中,’group-home’ 是把組件按組分塊打包, 可以將多個組件放入這個組中,在打包的時候 Webpack 會將相同 chunk 下的所有異步模塊打包到一個異步塊里面。

路由懶加載用法:E:\node\vue296\src\router\index.js

import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/components/Home'
import One from '@/components/One'
import Two from '@/components/Two'
import Three from '@/components/Three'

Vue.use(Router)

export default new Router({
    mode: 'history', //mode模式
    routes: [
        {
            path: '/', // 默認(rèn)頁面重定向到主頁
            redirect: '/home'
        },
        {
            path: '/home', // 主頁路由
            name: 'Home',
            component: Home,
            children: [ // 嵌套子路由
                {
                    path: 'one', // 子頁面1
                    name: 'one', // 路由名稱-命名路由
                    component: One
                },
                {
                    path: '/home/two/:id/:name', // 子頁面2
                    component: Two
                },
                {
                    path:'/home/three', // 子頁面3
                    name: 'three',
                    component:Three
                }
            ]
        },
        {
            path: '*',
            component: () => import('@/components/404')
        }
    ]
})

vuex 背景引言

1、vuex是什么?

vuex是一個專為 Vue.js 應(yīng)用程序開發(fā)的 狀態(tài)管理模式。

它采用集中式存儲管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測的方式發(fā)生變化。

chrome 安裝調(diào)試工具 devtools extension

2、單向數(shù)據(jù)流

示意圖說明:

  State:驅(qū)動應(yīng)用的數(shù)據(jù)源(單向數(shù)據(jù)流)
   View:以聲明方式將 state 映射到視圖(靜態(tài)顯示出來的數(shù)據(jù)源)
Actions:處理用戶在 view 上面操作而導(dǎo)致的狀態(tài)變化(數(shù)據(jù)源變化追蹤)

一個簡單的 demo 案例:
E:\node\vue296\src\router\index.js

// 引入組件
import HelloWorld from '@/components/HelloWorld'

// 添加路由
{
    path: '/hello',
    name: 'HelloWorld',
    component: HelloWorld,
}

E:\node\vue296\src\components\Home.vue 首頁

<!-- 添加跳轉(zhuǎn) -->
<router-link to="/hello">Hello頁</router-link>

E:\node\vue296\src\components\HelloWorld.vue 案例頁

<template>
    <div>
        <!-- view -->
        <div>{{ count }}</div>
        <button @click="increment">increment</button>
    </div>
</template>
<script>
export default {
    // state
    data () {
        return {
            count: 0
        }
    },
    // actions
    methods: {
        increment () {
            this.count++
        }
    }
}
</script>
<style scoped>

</style>

3、vuex 解決的問題

多個視圖組件,包括父子組件,兄弟組件之間的狀態(tài)共享。

不同視圖組件的行為需要變更同一個狀態(tài)。

4、vuex 使用場景

中大型單頁應(yīng)用,需要考慮如何更好地在組件外部管理狀態(tài),簡單應(yīng)用不建議使用。

5、vuex 與全局變量的區(qū)別

響應(yīng)式:

vuex 的狀態(tài)存儲是響應(yīng)式的,當(dāng) Vue 組件從 store 中讀取狀態(tài)的時候,若 store 中的狀態(tài)發(fā)生變化,那么相應(yīng)的組件也會得到高效更新。

不能直接改變store:

不能直接改變 store 的變化,改變 store 中狀態(tài)的唯一途徑是 commit mutation,方便于跟蹤每一個狀態(tài)的變化。

6、vuex 核心流程

示意圖說明:

1、Vue Components Vue組件:

HTML頁面上,負(fù)責(zé)接收用戶操作等交互行為,執(zhí)行 dispatch 方法觸發(fā)對應(yīng) action 進(jìn)行回應(yīng)。

2、Dispatch:操作行為觸發(fā)方法,是唯一能執(zhí)行 action 的方法。

3、Actions 操作行為處理模塊:

負(fù)責(zé)處理 Vue Components 接收到的所有交互行為。

包含同步/異步操作,支持多個同名方法,按照注冊的順序依次觸發(fā)。

向后臺API請求的操作就在這個模塊中進(jìn)行,包括觸發(fā)其他 action 以及提交 mutation 的操作。該模塊提供了 Promise 的封裝,以支持 action 的鏈?zhǔn)接|發(fā)。

4、Commit 態(tài)改變提交操作方法:

狀對 mutation 進(jìn)行提交,是唯一能執(zhí)行 mutation 的方法。

5、Mutations 狀態(tài)改變操作方法:

是 Vuex 修改 state 的唯一推薦方法,其他修改方式在嚴(yán)格模式下將會報錯。

該方法只能進(jìn)行同步操作,且方法名只能全局唯一。

操作之中會有一些 hook 暴露出來,以進(jìn)行 state 的監(jiān)控等。

6、State 頁面狀態(tài)管理容器對象:

集中存儲 Vue components 中 data 對象的零散數(shù)據(jù),全局唯一,以進(jìn)行統(tǒng)一的狀態(tài)管理。頁面顯示所需的數(shù)據(jù)從該對象中進(jìn)行讀取,利用Vue的細(xì)粒度數(shù)據(jù)響應(yīng)機制來進(jìn)行高效的狀態(tài)更新。

7、Getters:state對象讀取方法。

圖中沒有單獨列出該模塊,應(yīng)該被包含在了render 中,Vue Components 通過該方法讀取全局 state 對象。

總結(jié)說明:

Vue 組件接收交互行為,調(diào)用 dispatch 方法觸發(fā) action 相關(guān)處理,若頁面狀態(tài)需要改變,則調(diào)用 commit 方法提交 mutation 修改 state,通過 getters 獲取到 state 新值,重新渲染Vue Components,界面隨之更新。

入門示例

安裝

PS E:\node\vue296> npm install --save vuex@3.6.2
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@2.3.2 (node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.3.2: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.13 (node_modules\watchpack-chokidar2\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.13 (node_modules\webpack-dev-server\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})

+ vuex@3.6.2
removed 1 package and updated 1 package in 8.474s
PS E:\node\vue296>

(1)新建 src/vuex/store.js 中寫入以下代碼:

// 引入vue
import Vue from 'vue'
// 引入vuex
import Vuex from 'vuex'

// 使用vuex
Vue.use(Vuex)

// 1、state:創(chuàng)建初始化狀態(tài)
const state = {
    // 放置初始狀態(tài)
    count: 1
}

// 2、mutations:創(chuàng)建改變狀態(tài)的方法
const mutations = {
    // 狀態(tài)變更函數(shù)-一般大寫
    ADD (state, n) {
        state.count += n;
    }
}

// 3、getters:提供外部獲取state
const getters = {
    count: function(state){
        return state.count;
    }
}

// 4、actions:創(chuàng)建驅(qū)動方法改變mutations
const actions ={
    // 觸發(fā)mutations中相應(yīng)的方法-一般小寫
    add ({commit}, data) {
        commit('ADD', data)
    }
}

// 5、全部注入Store中
const store = new Vuex.Store({
    state,
    mutations,
    getters,
    actions
});

// 6、輸出store
export default store;

代碼說明:

state - mutations - getters - actions - store,以上寫法基本固定。

小型項目用上面的簡單管理狀態(tài)即可。

(2)src/main.js 代碼中添加

import Vue from 'vue'
import App from './App'
import router from './router'
// 引入store
import store from './vuex/store'

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  store, // 全局注入
  components: { App },
  template: '<App/>'
})

(3)src/compontent/Count.vue 頁面組件中代碼如下:

<template>
    <div class="hello">
        <h1>{{ msg }}</h1>
        <h2>{{count}}</h2>
        <button @click="clickAdd">新增</button>
    </div>
</template>
<script>
export default {
    data () {
        return {
            msg: 'Vuex test!'
        }
    },
    computed: {
        // 獲取 state 值
        count() {
            return this.$store.state.count;
        }
    },
    methods: {
        clickAdd() {
            //分發(fā)action中的add方法
            this.$store.dispatch('add', 1);
        }
    }
}
</script>
<style scoped>

</style>

state-狀態(tài)對象的獲取方法

1、在組件的 template 中直接使用

<h2>{{ $store.state.count }}</h2>

2、在計算屬性 computed 中直接賦值

// 方式1:直接獲取
computed: {
    count() {
        // this指的是main.js中的vue實例對象
        return this.$store.state.count;
    }
}

3、通過 mapState 的對象來賦值

// 方式2:利用mapState
computed: mapState({
    // es5寫法
    count: function (state) {
         return state.count;
     },
    // es6寫法
    count: state => state.count
})

4、通過 mapState 的數(shù)組來賦值

// 方式3:數(shù)組獲取
computed: mapState(['count'])

5、通過 mapState 的 JSON 來賦值

// 方式4:JSON獲取
computed: mapState({
    count: 'count'
})

PS:一般 4 和 5 兩種比較常用

完整示例代碼:E:\node\vue296\src\components\Count.vue

<template>
    <div class="hello">
        <h1>{{ msg }}</h1>
        <h2>{{ $store.state.count }}</h2>
        <h2>{{count}}</h2>
        <button @click="clickAdd">新增</button>
    </div>
</template>
<script>
import {mapState} from 'vuex'
export default {
    data () {
        return {
            msg: 'Vuex test!'
        }
    },
    // 方式1:在計算屬性computed中直接賦值
    // computed: {
    //     count() {
    //         // this指的是main.js中的vue實例對象
    //         return this.$store.state.count;
    //     }
    // },
    // 方式2:通過mapState的對象來賦值
    // computed: mapState({
    //     // es5
    //     // count: function (state) {
    //     //     return state.count;
    //     // },
    //     // es6
    //     count: state => state.count
    // }),
    // 方式3:通過mapState的對象來賦值
    // computed: mapState(['count']),
    // 方式4:通過mapState的JSON來賦值
    computed: mapState({
        count: 'count'
    }),
    methods: {
        clickAdd() {
            //分發(fā)action中的add方法
            this.$store.dispatch('add', 1);
        }
    }
}
</script>
<style scoped>

</style>

mutations - getters - actions 異步 1、mutations(修改狀態(tài))

(1)template 中直接使用 $store.commit( ) 觸發(fā)

// template
<button @click="$store.commit('ADD')">+</button>

// src/vuex/store.js
const mutations = {
    // 狀態(tài)變更函數(shù)
    ADD (state) {
        state.count++;
    }
}

(2)利用 mapMutations 引入觸發(fā)

<template>
    <div class="hello">
        <h1>{{ msg }}</h1>
        <h2>{{count}}</h2>
        <!-- 3、、直接調(diào)用相應(yīng)的方法 -->
        <button @click="ADD">+</button>
    </div>
</template>

<script>
// 1、引入mapMutations
import {mapState, mapMutations} from 'vuex'
export default {
    data () {
        return {
            msg: 'Vuex test!'
        }
    },
    // 通過mapState的JSON來賦值
    computed: mapState({
        count: 'count'
    }),
    // 2、methods中加入mapMutations
    methods: mapMutations([
        'ADD'
    ])
}
</script>
<style scoped>

</style>

2、getters(獲取state和過濾)

(1)基本用法

// src/vuex/store.js
const getters = {
    count: function(state){
        // 返回加上100
        return state.count + 100;
    }
}

(2)常規(guī)獲取值

computed: {
    // 獲取getters
    count(){
        return this.$store.getters.count;
    }
}

(3)mapGetters 獲取值

// 1、引入mapMutations
import {mapState, mapMutations, mapGetters} from 'vuex'

// 2、使用
computed: {
    // 獲取getters
    ...mapGetters(["count"])
}

3、actions(異步狀態(tài)修改)

actions 和 mutations 功能基本一樣,不同點是,actions 是異步的改變 state 狀態(tài),而mutations 是同步改變狀態(tài)。

不過實際項目中一般都是通過 actions 改變 mutations 中的值。

(1)store.js 中增加異步代碼

// src/vuex/store.js
const actions ={
    // 觸發(fā)mutations中相應(yīng)的方法
    add ({commit}) {
        // 增加異步
        setTimeout(()=>{
            commit('ADD')
        },3000);
        console.log('我比reduce提前執(zhí)行');
    }
}

(2)常規(guī)使用

// template
<button @click="add">+</button>

// script
methods: {
    add() {
        //分發(fā)action
        this.$store.dispatch('add');
    }
}

(3)mapActions 的使用

// template
<button @click="add">+</button>

// script
// 引入mapActions
import {mapState, mapActions} from 'vuex'

// 使用mapActions
methods: {
    ...mapActions(['add'])
}

傳遞參數(shù)

在 vuex 的方法調(diào)用傳遞參數(shù),只需要在 mutations 和 actions 相應(yīng)的地方加上參數(shù),然后調(diào)用的時候傳入即可。

(1)src/vuex/store.js

// actions中傳遞參數(shù)
const mutations = {
    ADD (state, n) {
        state.count += n;
    }
}

// actions中傳遞參數(shù)
const actions ={
    // 觸發(fā)mutations中相應(yīng)的方法
    add ({commit}, n) {
        // 增加異步
        setTimeout(()=>{
            commit('ADD', n);
        },3000);
        console.log('我比reduce提前執(zhí)行');
    }
}

(2)頁面組件常規(guī)調(diào)用傳遞

// template
<button @click="add">+</button>

// script
methods: {
    add() {
        // 分發(fā)action
        this.$store.dispatch('add', 99);
     }
}

(3)頁面組件使用 mapActions 調(diào)用傳遞

// template
<button @click="add(99)">+</button>

// script
methods: {
    ...mapActions(['add'])
}

module-模塊組

當(dāng)應(yīng)用非常復(fù)雜,狀態(tài)非常多的時候,需要將 store 分割成模塊(module)。

每個模塊擁有自己的 state、mutation、action、getter、甚至是嵌套子模塊,從上至下進(jìn)行同樣方式的分割。

1、大致的結(jié)構(gòu)

// 模塊A
const moduleA = {
  state: { ... },
  mutations: { ... },
  actions: { ... },
  getters: { ... }
}

// 模塊B
const moduleB = {
  state: { ... },
  mutations: { ... },
  actions: { ... }
}

// 組裝
const store = new Vuex.Store({
  modules: {
    a: moduleA,
    b: moduleB
  }
})

// 取值
store.state.a // -> moduleA 的狀態(tài)
store.state.b // -> moduleB 的狀態(tài)

2、詳細(xì)示例

實際開發(fā)中建議把 module 分開編寫。

(1)src/vuex/module1.js

// 模塊1
const module1 = {
    // 初始化狀態(tài)
    state: {
        module1: {
            name: '模塊1'
        }
    },
    // 編寫動作
    mutations: {
        CHANGE1 (state, data) {
            state.module1 = data;
        }
    },
    // 取值
    getters: {
        module1: function(state){
            return state.module1;
        }
    },
    // 創(chuàng)建驅(qū)動,可異步
    actions: {
        change1 ({commit}, data) {
            commit('CHANGE1', data)
        }
    }
}

export default module1;

(2)src/vuex/module2.js

// 模塊2
const module2 = {
    // 初始化狀態(tài)
    state: {
        module2: {
            name: '模塊2'
        }
    },
    // 編寫動作
    mutations: {
        CHANGE2 (state, data) {
            state.module2 = data;
        }
    },
    // 取值
    getters: {
        module2: function(state){
            return state.module2;
        }
    },
    // 創(chuàng)建驅(qū)動,可異步
    actions: {
        change2 ({commit}, data) {
            commit('CHANGE2', data)
        }
    }
}

export default module2;

(3)src/vuex/store.js

// 引入vue
import Vue from 'vue'
// 引入vuex
import Vuex from 'vuex'
// 引入module1
import module1 from '@/vuex/module1'
// 引入module2
import module2 from '@/vuex/module2'

// 使用vuex
Vue.use(Vuex)

// 模塊注入
const store = new Vuex.Store({
    modules: {
        a: module1,
        b: module2
    }
})

// 輸出store
export default store;

(4)組件中使用,src/compontent/one.vue

<template>
    <div id="app">
        <!-- module1 -->
        <h2>{{ module1.name }}</h2>
        <button @click="change1({'name': 'change1'})">module1改變</button>

        <!-- module2 -->
        <h2>{{ module2.name }}</h2>
        <button @click="change2({'name': 'change2'})">module2改變</button>
    </div>
</template>

<script>
// 引入快捷方法
import {mapState, mapGetters, mapActions} from 'vuex'

export default {
    name: 'app',
    data () {
        return {
        }
    },
    computed:{
        // mapState取值
        // ...mapState({
        //     module1: state => state.a.module1.name,
        //     module2: state => state.b.module2.name
        // })

        // mapGetter取值
        ...mapGetters(['module1', 'module2'])
    },
    methods: {
        // mapAction取方法
        ...mapActions([
            'change1',
            'change2'
        ])
    }
}
</script>
<style>

</style>

PS:module 中命名要唯一,不然獲取值和改變值的時候會沖突,目前親測 mapGetters 只能獲取對象。

總結(jié)

到此這篇關(guān)于Vue命令行工具Vue-CLI圖文的文章就介紹到這了,更多相關(guān)Vue命令行工具Vue-CLI內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue 中filter的多種用法

    vue 中filter的多種用法

    這篇文章主要介紹了vue 中filter的多種用法,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2018-04-04
  • vue2.* element tabs tab-pane 動態(tài)加載組件操作

    vue2.* element tabs tab-pane 動態(tài)加載組件操作

    這篇文章主要介紹了vue2.* element tabs tab-pane 動態(tài)加載組件操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Vue3進(jìn)行路由管理的示例代碼

    Vue3進(jìn)行路由管理的示例代碼

    在現(xiàn)代 Web 開發(fā)中,前端路由管理是構(gòu)建單頁面應(yīng)用(SPA)的關(guān)鍵組成部分,隨著 Vue3 的發(fā)布,Vue Router 也得到了相應(yīng)的更新,在這篇博文中,我們將詳細(xì)探討 Vue3 中的路由管理,需要的朋友可以參考下
    2025-01-01
  • printJS打印問題匯總以及解決辦法

    printJS打印問題匯總以及解決辦法

    Print.js一個小的javascript庫,可幫助您從網(wǎng)絡(luò)上打印,這篇文章主要給大家介紹了關(guān)于printJS打印問題匯總以及解決辦法的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • vue如何監(jiān)聽某個元素的大小變化

    vue如何監(jiān)聽某個元素的大小變化

    這篇文章主要介紹了vue如何監(jiān)聽某個元素的大小變化問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue利用vue meta info設(shè)置每個頁面的title與meta信息

    vue利用vue meta info設(shè)置每個頁面的title與meta信息

    這篇文章主要給大家介紹了關(guān)于vue如何利用vue meta info設(shè)置每個頁面的title與meta信息的相關(guān)資料,文中將實現(xiàn)的方法介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-10-10
  • 前端大文件上傳與下載(分片上傳)的詳細(xì)過程

    前端大文件上傳與下載(分片上傳)的詳細(xì)過程

    最近遇見一個需要上傳超大大文件的需求,所以下面這篇文章主要給大家介紹了關(guān)于前端大文件上傳與下載(分片上傳)的詳細(xì)過程,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • Vue路由History模式分析

    Vue路由History模式分析

    Vue-router是Vue的核心組件,主要是作為Vue的路由管理器,Vue-router默認(rèn)hash模式,通過引入Vue-router對象模塊時配置mode屬性可以啟用history模式,本文將通過代碼示例給大家詳細(xì)分析Vue路由History模式
    2023-06-06
  • Vue字符串中如何添加多個空格

    Vue字符串中如何添加多個空格

    這篇文章主要介紹了Vue字符串中如何添加多個空格問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • vue 配置多頁面應(yīng)用的示例代碼

    vue 配置多頁面應(yīng)用的示例代碼

    這篇文章主要介紹了vue 配置多頁面應(yīng)用的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10

最新評論

最新欧美一二三视频| 五十路熟女人妻一区二区9933| 亚洲成人午夜电影在线观看 | 欧美专区日韩专区国产专区| 在线免费观看黄页视频| 午夜精品福利91av| 天天做天天干天天舔| AV无码一区二区三区不卡| 97黄网站在线观看| 日韩美av高清在线| 91成人精品亚洲国产| 日本熟妇一区二区x x| 男生舔女生逼逼视频| 在线免费观看黄页视频| 91人妻人人做人人爽在线| 成人av天堂丝袜在线观看| 天天艹天天干天天操| 青青热久免费精品视频在线观看 | 在线网站你懂得老司机| www,久久久,com| 亚洲精品 日韩电影| 欧亚乱色一区二区三区| 久久久极品久久蜜桃| AV天堂一区二区免费试看| 中文字幕av一区在线观看| 青青热久免费精品视频在线观看| 2021国产一区二区| av一本二本在线观看| 国产日韩一区二区在线看| 精品高跟鞋丝袜一区二区| 欧美中国日韩久久精品| 美女av色播在线播放| 天天干天天操天天插天天日| av在线免费观看亚洲天堂| 天天艹天天干天天操| 天天操天天干天天艹| 白白操白白色在线免费视频| av高潮迭起在线观看| 国产精选一区在线播放| 香蕉片在线观看av| 免费十精品十国产网站| 大香蕉福利在线观看| 亚洲中文字幕人妻一区| 欧美日韩高清午夜蜜桃大香蕉| 免费在线黄色观看网站| 在线观看免费视频色97| 日本乱人一区二区三区| 中文字幕AV在线免费看 | 欧美精品伦理三区四区| 国产变态另类在线观看| 国产一区二区欧美三区 | yy6080国产在线视频| 馒头大胆亚洲一区二区| 亚洲高清视频在线不卡| 九一传媒制片厂视频在线免费观看| 色噜噜噜噜18禁止观看| 亚洲 欧美 精品 激情 偷拍 | 在线观看国产网站资源| 一区二区免费高清黄色视频| 亚洲福利精品视频在线免费观看| 欧美日本aⅴ免费视频| 国产精品亚洲在线观看| 亚洲狠狠婷婷综合久久app | 97人妻人人澡爽人人精品| 91九色porny国产蝌蚪视频| 亚洲乱码中文字幕在线| 老鸭窝日韩精品视频观看| 极品性荡少妇一区二区色欲| 久久丁香婷婷六月天| 人人妻人人澡人人爽人人dvl| 国产精品国色综合久久| 黑人大几巴狂插日本少妇| japanese五十路熟女熟妇| 成人乱码一区二区三区av| 午夜场射精嗯嗯啊啊视频| 在线免费视频 自拍| 91免费放福利在线观看| 国产精品久久久久久久女人18| 成人乱码一区二区三区av| 美女福利视频网址导航| 成人免费公开视频无毒| 中文字幕一区二区人妻电影冢本| 韩国一级特黄大片做受| 97人人妻人人澡人人爽人人精品| 亚洲福利精品视频在线免费观看| 精品久久婷婷免费视频| 欧美精品中文字幕久久二区| 久久久久久久久久性潮| 成年人黄色片免费网站| 成人网18免费视频版国产| 亚洲区美熟妇久久久久| 精品美女福利在线观看| 人妻自拍视频中国大陆| 午夜精品在线视频一区| 午夜精品福利91av| 欧洲国产成人精品91铁牛tv| 亚洲一区制服丝袜美腿| 超级福利视频在线观看| 中文字幕高清在线免费播放| 午夜在线一区二区免费| 80电影天堂网官网| 伊人精品福利综合导航| 国产伊人免费在线播放| 大屁股肉感人妻中文字幕在线| 少妇高潮一区二区三区| 欧美va不卡视频在线观看| 55夜色66夜色国产精品站| 91极品新人『兔兔』精品新作| 免费高清自慰一区二区三区网站 | 在线观看免费视频网| 熟女人妻在线中出观看完整版| 日本av熟女在线视频| 在线免费91激情四射| 大胸性感美女羞爽操逼毛片| 亚洲 欧美 自拍 偷拍 在线| 天天日天天爽天天爽| 久久久久久久久久久久久97| 免费在线观看污污视频网站| 最新的中文字幕 亚洲| 自拍偷拍 国产资源| 国产精品黄大片在线播放| 欧美精品 日韩国产| 丝袜亚洲另类欧美变态| 99久久激情婷婷综合五月天| 9国产精品久久久久老师| 天天日天天鲁天天操| 天天摸天天日天天操| 久久久制服丝袜中文字幕| 毛茸茸的大外阴中国视频| 国产高清在线观看1区2区| 中文字幕高清资源站| 国产福利小视频大全| 欧美黑人巨大性xxxxx猛交| 91麻豆精品传媒国产黄色片| 不戴胸罩引我诱的隔壁的人妻| 亚洲国产香蕉视频在线播放 | 亚洲无码一区在线影院| 中文字幕日本人妻中出| 超碰在线观看免费在线观看| 久久久久久久久久久久久97| 人人人妻人人澡人人| 特大黑人巨大xxxx| 视频一区二区综合精品| 国产真实乱子伦a视频| 国产极品精品免费视频| 免费无码人妻日韩精品一区二区 | 欧美另类z0z变态| 中文字幕日韩无敌亚洲精品| 欧美激情精品在线观看| 999九九久久久精品| 日韩在线中文字幕色| 午夜成午夜成年片在线观看| 免费在线观看污污视频网站| 免费在线观看污污视频网站| 夜夜操,天天操,狠狠操| 中文字幕+中文字幕| 5528327男人天堂| 狠狠嗨日韩综合久久| 亚洲精品中文字幕下载| 啊啊好慢点插舔我逼啊啊啊视频| 蜜臀av久久久久蜜臀av麻豆| 日韩欧美一级aa大片| 欧美偷拍自拍色图片| av男人天堂狠狠干| 97年大学生大白天操逼| 欧美女同性恋免费a| 一区二区久久成人网| 中文字幕一区二 区二三区四区| 亚洲中文字幕国产日韩| 亚洲少妇高潮免费观看| 直接观看免费黄网站| 红桃av成人在线观看| 国产夫妻视频在线观看免费| 欧美激情精品在线观看| 蜜桃色婷婷久久久福利在线| 直接观看免费黄网站| 日韩av有码一区二区三区4| 国产视频精品资源网站| 麻豆精品成人免费视频| 久久三久久三久久三久久| 经典亚洲伊人第一页| 日本成人一区二区不卡免费在线| 最新激情中文字幕视频| 精品一区二区亚洲欧美| 玖玖一区二区在线观看| av线天堂在线观看| 久青青草视频手机在线免费观看| 天天日天天干天天要| 精品人妻每日一部精品| 99热99这里精品6国产| 中文人妻AV久久人妻水| 日本高清成人一区二区三区| 精品高潮呻吟久久av| 欧美亚洲中文字幕一区二区三区| 天天干天天日天天谢综合156| 91自产国产精品视频| 在线观看黄色成年人网站| 2019av在线视频| 午夜国产福利在线观看| 99精品免费观看视频 | 爱爱免费在线观看视频| 精品人人人妻人人玩日产欧| 国产a级毛久久久久精品| 三级等保密码要求条款| 亚洲一区二区久久久人妻| 18禁网站一区二区三区四区| 亚洲少妇高潮免费观看| 欧美3p在线观看一区二区三区| 亚洲国产欧美一区二区三区…| 国产91精品拍在线观看| 日韩一区二区三区三州| 中文字幕一区二区亚洲一区| 伊拉克及约旦宣布关闭领空| 天天日夜夜操天天摸| 国产成人自拍视频在线免费观看| 九九热99视频在线观看97| 国产真实灌醉下药美女av福利| 中文字幕在线永久免费播放| 精品91自产拍在线观看一区| 亚洲精品国产综合久久久久久久久| 又大又湿又爽又紧A视频| 扒开腿挺进肉嫩小18禁视频| 国产真实乱子伦a视频| 日本一本午夜在线播放| 熟女人妻一区二区精品视频| 日韩伦理短片在线观看| 成人午夜电影在线观看 久久| 伊拉克及约旦宣布关闭领空| 91极品新人『兔兔』精品新作| 亚洲av色图18p| 最新黄色av网站在线观看| 日本一区二区三区免费小视频| 黑人变态深video特大巨大| 99精品国产自在现线观看| 免费岛国喷水视频在线观看 | 在线观看视频一区麻豆| 日曰摸日日碰夜夜爽歪歪 | 亚洲va国产va欧美精品88| 老司机99精品视频在线观看 | 超碰在线中文字幕一区二区| 亚洲精品亚洲人成在线导航| 污污小视频91在线观看| 国产精品国产三级麻豆| 一级黄片久久久久久久久| 女警官打开双腿沦为性奴| 肏插流水妹子在线乐播下载| 传媒在线播放国产精品一区| 欧美一区二区中文字幕电影| 日韩欧美一级精品在线观看| 精品久久婷婷免费视频| ka0ri在线视频| 91中文字幕免费在线观看| 欧美激情电影免费在线| 福利视频一区二区三区筱慧| 日本中文字幕一二区视频| 三上悠亚和黑人665番号| 色爱av一区二区三区| 在线免费观看视频一二区| 啪啪啪操人视频在线播放| av欧美网站在线观看| 欧美精产国品一二三产品区别大吗| sw137 中文字幕 在线| 在线免费观看国产精品黄色| 色噜噜噜噜18禁止观看| 在线观看视频网站麻豆| 青青草在观免费国产精品| 在线观看免费av网址大全| 韩国女主播精品视频网站| 欧美日韩中文字幕欧美| 成人免费公开视频无毒| 午夜激情精品福利视频| 岛国免费大片在线观看 | 免费高清自慰一区二区三区网站| 亚洲国际青青操综合网站| 青娱乐在线免费视频盛宴| 亚洲成人av一区久久| 小泽玛利亚视频在线观看| 伊拉克及约旦宣布关闭领空| 密臀av一区在线观看| 伊人精品福利综合导航| 91九色国产熟女一区二区| 午夜激情高清在线观看| 丝袜亚洲另类欧美变态| 欧美第一页在线免费观看视频| av手机在线免费观看日韩av| 人人妻人人澡欧美91精品| 国产日韩欧美视频在线导航| 日韩成人性色生活片| 国产污污污污网站在线| 亚洲精品无码色午夜福利理论片| 黄色大片男人操女人逼| 91久久人澡人人添人人爽乱| 国产在线自在拍91国语自产精品| 久久人人做人人妻人人玩精品vr| 青青草视频手机免费在线观看| 国产大鸡巴大鸡巴操小骚逼小骚逼| 国产精品久久久久久久久福交| 老司机你懂得福利视频| 亚洲中文字幕人妻一区| 色综合色综合色综合色| 亚洲av无女神免非久久| 成人网18免费视频版国产| 日本性感美女写真视频| 五十路人妻熟女av一区二区 | 93精品视频在线观看| 在线免费91激情四射| 91小伙伴中女熟女高潮| 在线观看视频 你懂的| 日韩精品中文字幕福利| 大学生A级毛片免费视频| 男人的网址你懂的亚洲欧洲av| 亚洲av成人网在线观看| 2020av天堂网在线观看| 精品久久久久久久久久久a√国产 日本女大学生的黄色小视频 | av久久精品北条麻妃av观看| 熟女人妻在线中出观看完整版| 欧美精品欧美极品欧美视频| 日韩激情文学在线视频| 欧美地区一二三专区| 2020av天堂网在线观看| 亚洲欧美一区二区三区爱爱动图| 国产女人叫床高潮大片视频| 高清成人av一区三区| 中文字幕在线欧美精品| 国产日韩一区二区在线看| 亚洲欧美激情国产综合久久久| 538精品在线观看视频| 国产高清97在线观看视频| 日韩在线视频观看有码在线| 在线观看国产网站资源| 亚洲欧美另类手机在线| 超级av免费观看一区二区三区| 日本最新一二三区不卡在线| 天天操夜夜操天天操天天操| 国产在线观看免费人成短视频| 青青草精品在线视频观看| 999久久久久999| 亚洲av黄色在线网站| 欧美一区二区三区四区性视频| 操的小逼流水的文章| 亚洲天堂第一页中文字幕| 午夜美女福利小视频| tube69日本少妇| 亚洲综合另类欧美久久| 人人妻人人澡欧美91精品| 亚洲免费福利一区二区三区| 天美传媒mv视频在线观看| 国产日韩欧美视频在线导航| 日本一区美女福利视频| 日本后入视频在线观看| 精品av国产一区二区三区四区| 天天日天天做天天日天天做| 青青草原色片网站在线观看| 天天操天天插天天色| 38av一区二区三区| 日韩av有码中文字幕| 国产视频网站国产视频| 又黄又刺激的午夜小视频| 欧美精品久久久久久影院| 欧美麻豆av在线播放| 亚洲精品国产综合久久久久久久久| 日韩一区二区电国产精品| 1000部国产精品成人观看视频 | 亚洲国产美女一区二区三区软件| 在线免费观看日本伦理| 丰满的继坶3中文在线观看| 国产不卡av在线免费| 日韩激情文学在线视频| 视频一区二区综合精品| 欧美亚洲一二三区蜜臀| 99人妻视频免费在线| 青青青青操在线观看免费| 午夜dv内射一区区| 青青青青在线视频免费观看| 日辽宁老肥女在线观看视频| 日本一二三中文字幕| 97少妇精品在线观看| 超黄超污网站在线观看| 极品性荡少妇一区二区色欲| 精品av久久久久久久| a v欧美一区=区三区| 成人蜜桃美臀九一一区二区三区 | 亚洲无线观看国产高清在线| 国产一区av澳门在线观看| 18禁无翼鸟成人在线| 蜜臀成人av在线播放| 成年女人免费播放视频| 日韩亚洲高清在线观看| 国产精品久久久久国产三级试频| 动漫美女的小穴视频| 欧美视频中文一区二区三区| 888亚洲欧美国产va在线播放| 红杏久久av人妻一区| 亚洲自拍偷拍综合色| 午夜精品福利一区二区三区p | 欧洲亚洲欧美日韩综合| 天天干天天爱天天色| 天美传媒mv视频在线观看| 人人在线视频一区二区| av中文字幕电影在线看| av中文在线天堂精品| 99国产精品窥熟女精品| 97成人免费在线观看网站| 国产真实灌醉下药美女av福利| 欧美国产亚洲中英文字幕| 欧美激情精品在线观看| 黄色三级网站免费下载| 国产超码片内射在线| 在线观看欧美黄片一区二区三区| aⅴ精产国品一二三产品| 成人久久精品一区二区三区| 亚洲成av人无码不卡影片一| 国产亚洲国产av网站在线| 日韩美女搞黄视频免费| 11久久久久久久久久久| 欧美国品一二三产区区别| 九色porny九色9l自拍视频| 中文字幕一区二 区二三区四区| 亚洲综合另类精品小说| 超鹏97历史在线观看| 97国产在线av精品| 国产在线拍揄自揄视频网站| 亚洲综合图片20p| 国产福利小视频免费观看| 黄色片黄色片wyaa| www骚国产精品视频| 五十路在线观看完整版| 国产av欧美精品高潮网站| 亚洲综合另类欧美久久| 色秀欧美视频第一页| 色偷偷伊人大杳蕉综合网| 日本人妻少妇18—xx| 91 亚洲视频在线观看| 人妻3p真实偷拍一二区| 大陆胖女人与丈夫操b国语高清| 老鸭窝在线观看一区| 男人天堂最新地址av| 3D动漫精品啪啪一区二区下载| 国产精品黄色的av| 任我爽精品视频在线播放| 日本午夜久久女同精女女| 色天天天天射天天舔| 亚洲无码一区在线影院| 任你操任你干精品在线视频| 91av精品视频在线| 在线成人日韩av电影| 国产妇女自拍区在线观看| 青青青国产片免费观看视频| 2020国产在线不卡视频| 九九热99视频在线观看97| 成人在线欧美日韩国产| 最新欧美一二三视频| 成人伊人精品色xxxx视频| 亚洲国产精品免费在线观看| 欧美在线精品一区二区三区视频 | 国产精品一区二区久久久av| 在线观看免费岛国av| 美女操逼免费短视频下载链接| 成人18禁网站在线播放| 2021年国产精品自拍| 一个色综合男人天堂| 天天草天天色天天干| 五十路熟女人妻一区二| 福利午夜视频在线合集| 亚洲1区2区3区精华液| 成年人黄色片免费网站| 亚国产成人精品久久久| 四川五十路熟女av| av日韩在线免费播放| 99热99这里精品6国产| 不卡一不卡二不卡三| 在线可以看的视频你懂的 | japanese日本熟妇另类| 亚洲精品国品乱码久久久久| 成年午夜免费无码区| 啪啪啪18禁一区二区三区| 久久久制服丝袜中文字幕| 啪啪啪操人视频在线播放| 日本免费视频午夜福利视频| 熟女人妻一区二区精品视频| 成年人中文字幕在线观看| 免费岛国喷水视频在线观看| 婷婷久久久综合中文字幕| 69精品视频一区二区在线观看| 国产久久久精品毛片| 亚洲护士一区二区三区| 人人爽亚洲av人人爽av| 人妻无码中文字幕专区| 亚洲成人国产综合一区| 91精品激情五月婷婷在线| 亚洲少妇高潮免费观看| 果冻传媒av一区二区三区| aaa久久久久久久久| 啪啪啪18禁一区二区三区| 国产 在线 免费 精品| 老熟妇凹凸淫老妇女av在线观看| 99re久久这里都是精品视频| 亚洲自拍偷拍精品网| 激情图片日韩欧美人妻| 午夜精品福利一区二区三区p| 国产麻豆国语对白露脸剧情| 日本精品一区二区三区在线视频。| 大香蕉大香蕉在线看| 五月色婷婷综合开心网4438| 欧亚日韩一区二区三区观看视频| 大鸡巴操b视频在线| 一个人免费在线观看ww视频| 中文人妻AV久久人妻水| 福利在线视频网址导航| 人人超碰国字幕观看97| 影音先锋女人av噜噜色| 午夜在线观看岛国av,com| av手机在线免费观看日韩av| 亚洲美女美妇久久字幕组| 11久久久久久久久久久| sspd152中文字幕在线| 国产三级片久久久久久久| 自拍偷拍亚洲欧美在线视频| 国产一区自拍黄视频免费观看| 国产黄色大片在线免费播放 | 年轻的人妻被夫上司侵犯| 丝袜美腿欧美另类 中文字幕| japanese五十路熟女熟妇| 日韩一区二区电国产精品| 91在线视频在线精品3| 日韩av有码一区二区三区4| 韩国AV无码不卡在线播放| 国产成人精品亚洲男人的天堂| 噜噜色噜噜噜久色超碰| 四川五十路熟女av| 国产精品3p和黑人大战| 亚洲卡1卡2卡三卡四老狼| 亚洲一区二区三区在线高清| 非洲黑人一级特黄片| 亚洲粉嫩av一区二区三区| 中文字幕熟女人妻久久久| 天天干天天日天天谢综合156| 成年女人免费播放视频| 性色av一区二区三区久久久| 欧美美女人体视频一区| av视屏免费在线播放| 久久久麻豆精亚洲av麻花| 国产九色91在线观看精品| 日韩激情文学在线视频| 成人高清在线观看视频| 视频一区 视频二区 视频| 免费在线福利小视频| 97青青青手机在线视频| 亚洲中文字字幕乱码| 欧美国品一二三产区区别| 91人妻精品久久久久久久网站| 欧美韩国日本国产亚洲| 丝袜肉丝一区二区三区四区在线看| 中文字幕 人妻精品| 操操网操操伊剧情片中文字幕网| 老鸭窝在线观看一区| 亚洲av男人天堂久久| 97超碰国语国产97超碰| 一级黄色av在线观看| 天码人妻一区二区三区在线看| 国产伊人免费在线播放| 成人av久久精品一区二区| 换爱交换乱高清大片| 日韩少妇人妻精品无码专区| 国产日本精品久久久久久久| 国产精品人妻熟女毛片av久| 国产乱子伦一二三区| 国产美女一区在线观看| 极品丝袜一区二区三区| 中文字幕在线观看国产片| 国产高清在线观看1区2区| av线天堂在线观看| 精品国产高潮中文字幕| 亚洲狠狠婷婷综合久久app| 超级av免费观看一区二区三区| 免费一级黄色av网站| 日韩少妇人妻精品无码专区| 久久久麻豆精亚洲av麻花| 亚洲精品国品乱码久久久久| 欧美日本在线观看一区二区| 久久久久久久99精品| 亚洲欧美国产综合777| 人人爽亚洲av人人爽av| 女生自摸在线观看一区二区三区| 午夜精品九一唐人麻豆嫩草成人| av一本二本在线观看| 97国产福利小视频合集| 中文字幕在线观看国产片| 天天插天天色天天日| 国产精品污污污久久| 麻豆精品成人免费视频| weyvv5国产成人精品的视频| 在线观看av亚洲情色| 午夜国产福利在线观看| 五十路人妻熟女av一区二区| 欧美亚洲偷拍自拍色图| 国产黄色高清资源在线免费观看| 大香蕉伊人国产在线| 国产成人精品久久二区91| 18禁美女黄网站色大片下载| 亚洲一区二区激情在线| 久久久人妻一区二区| 亚洲av男人天堂久久| 99热这里只有精品中文| 亚洲精品在线资源站| 亚洲精品乱码久久久本| 国产欧美精品一区二区高清| av破解版在线观看| 黑人性生活视频免费看| 国产欧美精品不卡在线| 适合午夜一个人看的视频| 黑人巨大的吊bdsm| 欧美精品国产综合久久| 亚洲高清一区二区三区视频在线| 亚洲精品av在线观看| 91色网站免费在线观看| 亚洲人妻视频在线网| 国产janese在线播放| 国产变态另类在线观看| 2021年国产精品自拍| 国产精品3p和黑人大战| 黄网十四区丁香社区激情五月天 | 亚洲免费国产在线日韩| 亚洲欧美激情中文字幕| 岛国毛片视频免费在线观看| 午夜激情高清在线观看| 久草视频在线免播放| 日本少妇在线视频大香蕉在线观看| 欧美日韩不卡一区不区二区| 青青青青操在线观看免费| 午夜精品在线视频一区| 天天日夜夜干天天操| 绝色少妇高潮3在线观看| 在线国产精品一区二区三区| 99re6热在线精品| 5528327男人天堂| 九色精品视频在线播放| 狠狠躁夜夜躁人人爽天天天天97| 国产高清在线在线视频| 久久久精品999精品日本| 农村胖女人操逼视频| 免费av岛国天堂网站| 蜜桃臀av蜜桃臀av| 日韩影片一区二区三区不卡免费| 97精品成人一区二区三区| 青青草在观免费国产精品| 午夜精品在线视频一区| 国产亚洲成人免费在线观看| 性感美女高潮视频久久久| av高潮迭起在线观看| 99久久99一区二区三区| 日本www中文字幕| 骚货自慰被发现爆操| 91亚洲精品干熟女蜜桃频道| 爱有来生高清在线中文字幕| 欧美精品免费aaaaaa| 天天干天天爱天天色| 18禁无翼鸟成人在线| 午夜精品一区二区三区4| 亚洲高清视频在线不卡| 亚洲国产香蕉视频在线播放| 日韩欧美国产一区不卡| 国产美女一区在线观看| 成年美女黄网站18禁久久| 韩国男女黄色在线观看| 天天操天天弄天天射| 国产自拍黄片在线观看| 欧美成人精品欧美一级黄色| 午夜精品九一唐人麻豆嫩草成人| 爆乳骚货内射骚货内射在线 | 91九色porny蝌蚪国产成人| 亚洲在线一区二区欧美| 日本熟妇色熟妇在线观看| 亚洲欧美一区二区三区爱爱动图| 一区二区三区美女毛片| 天天日天天干天天搡| 欲乱人妻少妇在线视频裸| 漂亮 人妻被中出中文| 欧美精品一区二区三区xxxx| 国产性感美女福利视频| 热99re69精品8在线播放| 日韩欧美国产精品91| 亚洲一级 片内射视正片| 亚洲午夜福利中文乱码字幕| 国产一区二区三免费视频| 天天爽夜夜爽人人爽QC| 国产 在线 免费 精品| 最新国产亚洲精品中文在线| 自拍偷拍vs一区二区三区| 亚洲一区二区三区久久午夜| 日本高清撒尿pissing| 无码国产精品一区二区高潮久久4 日韩欧美一级精品在线观看 | 亚洲人一区二区中文字幕| 美女福利视频网址导航| 激情国产小视频在线| sspd152中文字幕在线| 国产精品一区二区av国| 99精品视频在线观看免费播放| 亚洲熟女女同志女同| 熟女妇女老妇一二三区| 精品国产乱码一区二区三区乱| 91免费黄片可看视频| 成人av亚洲一区二区| 老司机在线精品福利视频| 精品高跟鞋丝袜一区二区| 欧美一区二区中文字幕电影 | 亚洲熟妇久久无码精品| sejizz在线视频| 97超碰国语国产97超碰| 精品国产成人亚洲午夜| 91精品国产91久久自产久强 | aⅴ精产国品一二三产品| 欧美亚洲中文字幕一区二区三区| 高潮视频在线快速观看国家快速| 亚洲国产欧美一区二区三区久久| 美女福利视频网址导航| 最近中文字幕国产在线| 欧美麻豆av在线播放| 日本人竟这样玩学生妹| v888av在线观看视频| 18禁美女无遮挡免费| 精品suv一区二区69| 日韩在线视频观看有码在线| 国产精品自拍视频大全| 三级黄色亚洲成人av| 亚洲伊人av天堂有码在线| 一区二区三区av高清免费| 欧美日韩情色在线观看| 欧美一区二区三区久久久aaa| avjpm亚洲伊人久久| 538精品在线观看视频| 中文字幕无码日韩专区免费| 2018最新中文字幕在线观看| 在线免费观看欧美小视频| 黄色资源视频网站日韩| 白白操白白色在线免费视频 | 最新国产精品拍在线观看| 青青草在观免费国产精品| 桃色视频在线观看一区二区| 日本韩国亚洲综合日韩欧美国产| 大陆胖女人与丈夫操b国语高清 | 啪啪啪啪啪啪啪啪av| 午夜激情高清在线观看| 大鸡吧插逼逼视频免费看 | 超碰中文字幕免费观看| 91欧美在线免费观看| 91精品国产91青青碰| 丁香花免费在线观看中文字幕| 一区二区三区四区中文| 啊啊啊想要被插进去视频| 日韩少妇人妻精品无码专区| 99热这里只有精品中文| 国产亚洲欧美视频网站| 久久久久久九九99精品| 懂色av蜜桃a v| 成人av免费不卡在线观看| 人妻爱爱 中文字幕| 在线免费观看视频一二区| 日本黄在免费看视频| 精品黑人一区二区三区久久国产| 在线免费观看视频一二区| 成年人午夜黄片视频资源| 亚洲福利天堂久久久久久 | 亚洲免费视频欧洲免费视频| 人人妻人人人操人人人爽| 欧美精产国品一二三区| 天天摸天天亲天天舔天天操天天爽| 十八禁在线观看地址免费| 沈阳熟妇28厘米大战黑人| 大黑人性xxxxbbbb| 男人和女人激情视频| 可以在线观看的av中文字幕| 动色av一区二区三区| 一区二区三区国产精选在线播放| 超碰公开大香蕉97| 黄色视频成年人免费观看| 性感美女福利视频网站| 国产精品一区二区三区蜜臀av| 最新国产精品网址在线观看| 亚洲欧美一区二区三区爱爱动图| 欧美在线一二三视频| 精品国产午夜视频一区二区| 青青青爽视频在线播放| 亚洲免费国产在线日韩| 爱有来生高清在线中文字幕| 3344免费偷拍视频| 国产午夜无码福利在线看| 久久久久五月天丁香社区| 欧美亚洲免费视频观看| 97精品成人一区二区三区 | 日韩亚洲高清在线观看| 伊人成人综合开心网| 五月天久久激情视频| 男人操女人的逼免费视频| 大香蕉伊人国产在线| 天天日天天日天天射天天干| 国产在线观看免费人成短视频| 黄色男人的天堂视频| 无码日韩人妻精品久久| 黄页网视频在线免费观看| 少妇人妻100系列| wwwxxx一级黄色片| 亚洲av色香蕉一区二区三区| 成人在线欧美日韩国产| 久草视频在线免播放| 老鸭窝在线观看一区| 九九视频在线精品播放| 99re国产在线精品| 97少妇精品在线观看| 亚洲伊人色一综合网| 日韩欧美国产精品91| www,久久久,com| 青娱乐极品视频青青草| 亚洲伊人久久精品影院一美女洗澡| 欧美久久久久久三级网| 激情啪啪啪啪一区二区三区| 免费在线播放a级片| 亚洲人人妻一区二区三区| 亚洲国产在人线放午夜| 亚洲自拍偷拍精品网| 天天日天天干天天要| 2022国产综合在线干| 91色秘乱一区二区三区| 色在线观看视频免费的| 国产欧美精品不卡在线| 国产精品视频男人的天堂| 亚洲欧美成人综合在线观看| 成年人中文字幕在线观看| 日本一二三区不卡无| 欧美亚洲国产成人免费在线| 欧美在线偷拍视频免费看 | 欧美成人一二三在线网| 亚洲精品在线资源站| 日韩影片一区二区三区不卡免费| 红杏久久av人妻一区| 2019av在线视频| 亚洲综合色在线免费观看| 九色porny九色9l自拍视频| 日日夜夜大香蕉伊人| av久久精品北条麻妃av观看| 免费一级特黄特色大片在线观看| 日本美女成人在线视频| 熟女少妇激情五十路| 欧美伊人久久大香线蕉综合| 国产精品免费不卡av| 日韩北条麻妃一区在线| 丰满熟女午夜福利视频| 天天操夜夜骑日日摸| 免费男阳茎伸入女阳道视频| 肏插流水妹子在线乐播下载| 亚洲av无码成人精品区辽| 免费福利av在线一区二区三区| 任我爽精品视频在线播放| 国产一区二区欧美三区| 国产一区二区神马久久| 边摸边做超爽毛片18禁色戒| 在线网站你懂得老司机| 大陆精品一区二区三区久久| 亚洲av在线观看尤物| 国产高清97在线观看视频| 国产黄色大片在线免费播放| 欧洲精品第一页欧洲精品亚洲| 日本少妇高清视频xxxxx| 国产福利在线视频一区| 亚洲中文精品人人免费| 最新激情中文字幕视频| av完全免费在线观看av| 欧美黑人巨大性xxxxx猛交| 天天操,天天干,天天射| 日本阿v视频在线免费观看| 成人av天堂丝袜在线观看| 999九九久久久精品| 又色又爽又黄的美女裸体| 大鸡八强奸视频在线观看| 人妻少妇中文有码精品| 免费在线黄色观看网站| sejizz在线视频| 91快播视频在线观看| 色综合久久五月色婷婷综合| 香港三日本三韩国三欧美三级| 视频一区二区三区高清在线| 欧美特级特黄a大片免费| 久久久超爽一二三av| 欧美日本在线观看一区二区 | 国产一区二区视频观看| 啪啪啪啪啪啪啪免费视频| 插小穴高清无码中文字幕| 久久农村老妇乱69系列| 国产无遮挡裸体免费直播视频| 亚洲卡1卡2卡三卡四老狼| 精品亚洲中文字幕av| 人妻熟女在线一区二区| 999九九久久久精品| 播放日本一区二区三区电影| 91试看福利一分钟| 中文字幕中文字幕 亚洲国产| 摧残蹂躏av一二三区| 国产午夜亚洲精品麻豆| 天天日夜夜干天天操| 天天日天天舔天天射进去| 亚洲av日韩高清hd| 三级等保密码要求条款| 91国内精品自线在拍白富美| 99视频精品全部15| 国产成人午夜精品福利| 亚洲av一妻不如妾| 四川乱子伦视频国产vip| 午夜场射精嗯嗯啊啊视频| 中文字幕+中文字幕| 婷婷六月天中文字幕| 亚洲精品 日韩电影| 伊人综合免费在线视频| 欧美特色aaa大片| 国产精品sm调教视频| 亚洲最大黄了色网站| 99热这里只有国产精品6| 国产精品一区二区av国| 国产精品视频资源在线播放| 天天日天天干天天插舔舔| 视频二区在线视频观看| 亚洲欧美激情人妻偷拍| 天天干天天日天天干天天操| 黄色片年轻人在线观看| 久久h视频在线观看| 国产日本精品久久久久久久| 亚洲自拍偷拍精品网| 51国产偷自视频在线播放| 日韩国产乱码中文字幕| 亚洲va国产va欧美精品88| 亚洲精品在线资源站| 日本一区精品视频在线观看| avjpm亚洲伊人久久| 99热久久这里只有精品| 日韩在线视频观看有码在线| 99婷婷在线观看视频| 天天干天天操天天摸天天射| 亚洲专区激情在线观看视频| 天天操天天干天天日狠狠插| 亚洲伊人久久精品影院一美女洗澡 | 孕妇奶水仑乱A级毛片免费看| 国产欧美精品免费观看视频| 五十路熟女人妻一区二| 国产三级精品三级在线不卡| 十八禁在线观看地址免费| 亚洲av男人天堂久久| 国产伦精品一区二区三区竹菊| 亚洲av无码成人精品区辽| 欧美激情电影免费在线| 亚洲av香蕉一区区二区三区犇| yellow在线播放av啊啊啊| 国产综合精品久久久久蜜臀| 欧美精品欧美极品欧美视频| 亚洲中文字幕校园春色| 色综合久久五月色婷婷综合| 2020国产在线不卡视频| 午夜极品美女福利视频| 国产精彩福利精品视频| 激情小视频国产在线| 精品黑人一区二区三区久久国产| 欧美精品国产综合久久| 一区二区三区毛片国产一区| 91传媒一区二区三区| 日韩美女精品视频在线观看网站 | 久久香蕉国产免费天天| 啪啪啪操人视频在线播放| 天天干天天日天天干天天操| 国产女人被做到高潮免费视频| 日韩一个色综合导航| 欧美天堂av无线av欧美| 狠狠地躁夜夜躁日日躁| 在线网站你懂得老司机| 熟女人妻在线中出观看完整版| 一区二区三区四区五区性感视频| 大鸡巴后入爆操大屁股美女| 99久久成人日韩欧美精品| 国产日本精品久久久久久久| 成人18禁网站在线播放| 日本少妇人妻xxxxx18| 亚洲av自拍天堂网| 午夜在线一区二区免费| 人妻另类专区欧美制服| 亚洲人成精品久久久久久久| 色哟哟国产精品入口| 亚洲成人av一区在线| 色爱av一区二区三区| 久久久久久久久久久免费女人| 亚洲av在线观看尤物| 老司机午夜精品视频资源| 91片黄在线观看喷潮| 国产一区二区视频观看| 欧美精品久久久久久影院| 黄色成年网站午夜在线观看| 亚洲偷自拍高清视频| 国产一区二区三免费视频| 女同性ⅹxx女同h偷拍| 亚洲少妇人妻无码精品| 欧美另类一区二区视频| 在线观看视频污一区| 日韩一区二区电国产精品| 91人妻精品一区二区久久| 女生自摸在线观看一区二区三区| 青青操免费日综合视频观看| 日韩欧美一级黄片亚洲| 视频 国产 精品 熟女 | 久久永久免费精品人妻专区| 色天天天天射天天舔| 一区二区视频在线观看视频在线| 青青社区2国产视频| 国产视频一区二区午夜| 国产高清97在线观看视频| 欧美久久一区二区伊人| 色婷婷六月亚洲综合香蕉| 欧美 亚洲 另类综合| 超碰97人人做人人爱| 在线观看免费av网址大全| 丝袜肉丝一区二区三区四区在线| 偷偷玩弄新婚人妻h视频| 日韩写真福利视频在线观看| 中文字幕日韩精品就在这里| 5528327男人天堂| 不卡一区一区三区在线| 天天操天天操天天碰| 国产成人精品一区在线观看 | 在线视频这里只有精品自拍| 91高清成人在线视频| 3344免费偷拍视频| 青青青青青免费视频| 成人区人妻精品一区二视频| 午夜dv内射一区区| 特黄老太婆aa毛毛片| 中文人妻AV久久人妻水| caoporn蜜桃视频| 国产va在线观看精品| 啪啪啪啪啪啪啪免费视频| 日韩人妻在线视频免费| 色偷偷伊人大杳蕉综合网| 新婚人妻聚会被中出| 视频 国产 精品 熟女 | 熟女91pooyn熟女| 亚洲变态另类色图天堂网| 夜鲁夜鲁狠鲁天天在线| 一区二区三区欧美日韩高清播放 | 久久亚洲天堂中文对白| 国产精品中文av在线播放| 中文亚洲欧美日韩无线码 | 美女操逼免费短视频下载链接| 青青草原色片网站在线观看| 国产精品熟女久久久久浪潮| 欧美综合婷婷欧美综合| 亚洲成人国产综合一区| 巨乳人妻日下部加奈被邻居中出| 欧美80老妇人性视频| 日日操综合成人av| 蜜桃色婷婷久久久福利在线| 久久丁香花五月天色婷婷| 青青草原网站在线观看| 日本熟女50视频免费| 天天综合天天综合天天网 | 婷婷久久久综合中文字幕| 一区二区久久成人网| 2022国产综合在线干| 人人爱人人妻人人澡39| 国产一区av澳门在线观看| 换爱交换乱高清大片| 99热久久这里只有精品8| 非洲黑人一级特黄片| 日韩精品中文字幕在线| 91she九色精品国产| 自拍偷拍一区二区三区图片| 可以在线观看的av中文字幕| 99亚洲美女一区二区三区| 国产黄色片在线收看| 久久www免费人成一看片| 久草电影免费在线观看| 人妻自拍视频中国大陆| 日本韩国亚洲综合日韩欧美国产 | 福利视频一区二区三区筱慧| 亚洲欧美福利在线观看| 岳太深了紧紧的中文字幕| 国产aⅴ一线在线观看| 欧美 亚洲 另类综合| 亚洲老熟妇日本老妇| 天天射夜夜操狠狠干| 欧美亚洲少妇福利视频| 蜜臀av久久久久久久| 97超碰国语国产97超碰| 日韩av有码中文字幕| 韩国女主播精品视频网站| 91国偷自产一区二区三区精品| 动色av一区二区三区| 福利在线视频网址导航| 国产91嫩草久久成人在线视频| 熟女俱乐部一二三区| 男人操女人逼逼视频网站| av中文字幕网址在线| 中文字幕高清在线免费播放 | 中文字幕午夜免费福利视频| 日本一区美女福利视频| 成年人免费看在线视频| 免费无码人妻日韩精品一区二区| 国产成人一区二区三区电影网站| 社区自拍揄拍尻屁你懂的| 精内国产乱码久久久久久| 不卡精品视频在线观看| 久久午夜夜伦痒痒想咳嗽P| 亚洲自拍偷拍综合色| 好吊视频—区二区三区| 成人30分钟免费视频| 日本熟妇一区二区x x| 国产午夜男女爽爽爽爽爽视频| 动漫黑丝美女的鸡巴| 亚洲精品在线资源站| 亚洲一级美女啪啪啪| 成年人黄色片免费网站| av在线播放国产不卡| 亚洲嫩模一区二区三区| 大陆胖女人与丈夫操b国语高清| 色哟哟国产精品入口| 黄色的网站在线免费看| 日本韩国免费一区二区三区视频| 成人福利视频免费在线| 久久久噜噜噜久久熟女av| 五月天久久激情视频| 日韩美女精品视频在线观看网站| 免费费一级特黄真人片| 精品国产成人亚洲午夜| 适合午夜一个人看的视频| 国产精品自拍视频大全| 日韩人妻在线视频免费| 国产女孩喷水在线观看| 欧美麻豆av在线播放| 91社福利《在线观看| 日韩精品激情在线观看| 性感美女福利视频网站| 亚洲国产免费av一区二区三区| 欧美80老妇人性视频| 午夜美女福利小视频| 亚洲天堂第一页中文字幕| 啊啊好慢点插舔我逼啊啊啊视频| 日日操夜夜撸天天干| 亚洲中文精品字幕在线观看| 成人蜜臀午夜久久一区| 97精品人妻一区二区三区精品| 国产综合精品久久久久蜜臀| 国产精品人妻一区二区三区网站| 99精品一区二区三区的区| 亚洲精品色在线观看视频| 黑人借宿ntr人妻的沦陷2| 天天操天天干天天日狠狠插| 亚洲中文精品人人免费| 午夜91一区二区三区| 日本美女成人在线视频| 色综合久久五月色婷婷综合| 最新国产精品网址在线观看| 中文字幕av男人天堂| 中文字幕在线视频一区二区三区| 一区二区三区蜜臀在线| 97年大学生大白天操逼| 欧美黄色录像免费看的| 国产亚洲国产av网站在线| www,久久久,com| 国产美女一区在线观看| av视屏免费在线播放| 国产精品亚洲在线观看| 日本乱人一区二区三区| 国产精品人妻66p| 超碰中文字幕免费观看| 亚洲中文精品人人免费| 好太好爽好想要免费| 青青在线视频性感少妇和隔壁黑丝| 韩国AV无码不卡在线播放| 男女啪啪啪啪啪的网站| 三级等保密码要求条款| 亚洲福利精品视频在线免费观看| 亚洲av日韩精品久久久久久hd| 在线免费观看av日韩| 日韩加勒比东京热二区| 国产在线观看免费人成短视频| 日本韩国免费一区二区三区视频| 亚洲欧美国产麻豆综合| 中文字幕一区二 区二三区四区| 精内国产乱码久久久久久| 国产精品自拍视频大全| 亚洲2021av天堂| 大鸡巴操娇小玲珑的女孩逼| 97人妻总资源视频| 视频啪啪啪免费观看| 国产久久久精品毛片| 超pen在线观看视频公开97| 欧美性感尤物人妻在线免费看| 91久久综合男人天堂| aaa久久久久久久久| 97精品成人一区二区三区 | 狠狠躁夜夜躁人人爽天天天天97| 亚洲第一伊人天堂网| 福利视频网久久91| 人妻丰满熟妇综合网| 国产麻豆剧果冻传媒app| 超污视频在线观看污污污| 午夜精品一区二区三区城中村| 午夜精品福利91av| 中文字幕在线视频一区二区三区| 日韩美av高清在线| 欧美日韩高清午夜蜜桃大香蕉 | 日韩欧美中文国产在线| 午夜在线观看岛国av,com| 久久久精品999精品日本| 男人操女人逼逼视频网站| 国产精品成久久久久三级蜜臀av| 大白屁股精品视频国产| 国产日韩精品一二三区久久久| 99热国产精品666| 亚洲国产在线精品国偷产拍| 午夜婷婷在线观看视频| 91麻豆精品91久久久久同性| 玖玖一区二区在线观看| 欧美老鸡巴日小嫩逼| 亚洲欧美自拍另类图片| 国产中文字幕四区在线观看| 特一级特级黄色网片| 9色在线视频免费观看| 欧洲精品第一页欧洲精品亚洲| 久久精品久久精品亚洲人| 成人动漫大肉棒插进去视频| 性色av一区二区三区久久久| 久久久精品欧洲亚洲av| 亚洲1卡2卡三卡4卡在线观看| 91麻豆精品91久久久久同性| 最新91精品视频在线| 天天做天天干天天舔| 97青青青手机在线视频| av男人天堂狠狠干| 97精品成人一区二区三区| 亚洲av日韩精品久久久久久hd| 欧美aa一级一区三区四区| 日韩一区二区电国产精品| 亚洲av香蕉一区区二区三区犇| 精品久久久久久久久久久a√国产| 天堂av狠狠操蜜桃| 国产精品自拍偷拍a| 亚洲 中文字幕在线 日韩| 在线可以看的视频你懂的| 2021最新热播中文字幕| 66久久久久久久久久久| 欧美一区二区中文字幕电影| 亚洲精品ww久久久久久| 99久久中文字幕一本人| 人妻少妇亚洲一区二区| 日韩人妻xxxxx| 日视频免费在线观看| av高潮迭起在线观看| 日韩剧情片电影在线收看| 国产在线91观看免费观看| 亚洲欧美日韩视频免费观看| 亚洲福利天堂久久久久久| 亚洲 欧美 精品 激情 偷拍| 国产日韩一区二区在线看| 精品老妇女久久9g国产| 天天操天天操天天碰| 天天艹天天干天天操| 一区二区三区 自拍偷拍| 91极品大一女神正在播放| 欧美乱妇无乱码一区二区| 日本性感美女视频网站| 成熟丰满熟妇高潮xx×xx| 亚洲综合色在线免费观看| 九九视频在线精品播放| 国产精品久久久久久美女校花| 97a片免费在线观看| 亚洲的电影一区二区三区| av日韩在线免费播放| 在线观看av2025| 沈阳熟妇28厘米大战黑人| av乱码一区二区三区| 精品亚洲国产中文自在线| 综合一区二区三区蜜臀| 成人av亚洲一区二区| 精品国产午夜视频一区二区| 春色激情网欧美成人| 夜夜嗨av蜜臀av| 中文字幕在线欧美精品| 国产乱子伦一二三区| 精品高潮呻吟久久av| 热99re69精品8在线播放| 天天干天天日天天干天天操| 一区二区视频在线观看免费观看| 99热99这里精品6国产| 国产91嫩草久久成人在线视频| 91久久精品色伊人6882| 黄色大片男人操女人逼| 亚洲中文字幕乱码区| 91九色porny蝌蚪国产成人| 中国黄色av一级片| 亚洲高清国产拍青青草原| 偷拍自拍亚洲视频在线观看| 2017亚洲男人天堂| 国产一区av澳门在线观看| 在线观看的a站 最新| 日本美女成人在线视频| av成人在线观看一区| 亚洲在线免费h观看网站| 老有所依在线观看完整版| 色综合久久久久久久久中文| 亚洲精品乱码久久久久久密桃明| 日本www中文字幕| 91色网站免费在线观看| 性感美女诱惑福利视频| 日本韩国在线观看一区二区| 美女张开腿让男生操在线看| 97色视频在线观看| 亚洲精品三级av在线免费观看| 亚洲国产欧美一区二区三区久久| 亚洲一区av中文字幕在线观看| 亚洲特黄aaaa片| 亚洲特黄aaaa片| 97超碰国语国产97超碰| 亚洲精品精品国产综合| 三级等保密码要求条款| 一区二区三区蜜臀在线| 换爱交换乱高清大片| 久久精品国产999| 美女少妇亚洲精选av| 水蜜桃一区二区三区在线观看视频| 日本一道二三区视频久久 | 成人精品视频99第一页| 国产va在线观看精品| 红杏久久av人妻一区| 天天日天天干天天要| 久久精品国产999| 欧美精品资源在线观看| 大鸡吧插逼逼视频免费看| 欧美视频一区免费在线| 少妇一区二区三区久久久| 91久久精品色伊人6882| 亚洲少妇高潮免费观看| 黄色资源视频网站日韩| 午夜毛片不卡免费观看视频| 熟妇一区二区三区高清版| 白白操白白色在线免费视频| 亚洲成人免费看电影| 亚洲精品精品国产综合| japanese日本熟妇另类| 97欧洲一区二区精品免费| 亚洲人妻av毛片在线| 91久久国产成人免费网站| 一区二区三区蜜臀在线| 少妇高潮一区二区三区| 亚洲国产欧美一区二区三区久久| av成人在线观看一区| 中文字幕av第1页中文字幕| 97人妻无码AV碰碰视频| 国产第一美女一区二区三区四区| 成人资源在线观看免费官网| 亚洲自拍偷拍精品网| 午夜在线观看一区视频| 888欧美视频在线| 日本少妇在线视频大香蕉在线观看| 国产 在线 免费 精品| 国产精品视频资源在线播放 | 亚洲一区二区三区久久午夜 | 九色精品视频在线播放| 久碰精品少妇中文字幕av| 亚洲一区二区三区久久午夜| 中文亚洲欧美日韩无线码| 人妻少妇亚洲精品中文字幕| 久久机热/这里只有| 久久精品久久精品亚洲人| 亚洲av无码成人精品区辽| 91国偷自产一区二区三区精品| 伊人开心婷婷国产av| 人妻少妇精品久久久久久| 一区二区三区av高清免费| 久精品人妻一区二区三区| 中国视频一区二区三区| 亚洲熟女久久久36d| 18禁网站一区二区三区四区| 桃色视频在线观看一区二区| 亚洲av可乐操首页| 超碰在线观看免费在线观看| 二区中出在线观看老师| 成年女人免费播放视频| 2025年人妻中文字幕乱码在线 | gav成人免费播放| 边摸边做超爽毛片18禁色戒| 久久久超爽一二三av| 人妻3p真实偷拍一二区| 男人和女人激情视频| 岛国av高清在线成人在线| 久久久久久97三级| 日韩中文字幕在线播放第二页| 久久久久久久久久久免费女人| 最新国产精品网址在线观看| 在线观看亚洲人成免费网址| 国产一区二区三免费视频 | 国产精品熟女久久久久浪潮| 福利国产视频在线观看| 久久永久免费精品人妻专区| 成人区人妻精品一区二视频| 亚洲日本一区二区三区| 欧美精品激情在线最新观看视频| 天天干天天日天天干天天操| 极品性荡少妇一区二区色欲| 不戴胸罩引我诱的隔壁的人妻| 亚洲在线观看中文字幕av| 日辽宁老肥女在线观看视频| 日本一区二区三区免费小视频| 99精品一区二区三区的区| 三级黄色亚洲成人av| 99一区二区在线观看| 亚洲精品 日韩电影| 中文字幕一区二 区二三区四区| gogo国模私拍视频| 好了av中文字幕在线| 亚洲av日韩精品久久久| 涩爱综合久久五月蜜臀| 啊啊啊想要被插进去视频| 中文乱理伦片在线观看| 中文字幕日韩人妻在线三区| 91桃色成人网络在线观看| 人妻丝袜诱惑我操她视频| 丝袜国产专区在线观看| 成人av在线资源网站| 亚洲成高清a人片在线观看| 夜夜嗨av蜜臀av| 天天干夜夜操天天舔| 久久久久国产成人精品亚洲午夜| 少妇与子乱在线观看| 91www一区二区三区| 青青色国产视频在线| 91超碰青青中文字幕| 欧美一级视频一区二区| 国产不卡av在线免费| 色花堂在线av中文字幕九九| 亚洲成人国产av在线| 视频一区 二区 三区 综合| 中文字幕最新久久久| 欧美亚洲少妇福利视频| 亚国产成人精品久久久| 做爰视频毛片下载蜜桃视频1| 国产午夜激情福利小视频在线| 久久艹在线观看视频| 亚洲成人av在线一区二区| 青青青aaaa免费| 亚洲国产欧美一区二区三区…| 久久亚洲天堂中文对白| 国产之丝袜脚在线一区二区三区| 93视频一区二区三区| 成人在线欧美日韩国产| 老司机午夜精品视频资源| 青青青国产片免费观看视频| 男人天堂最新地址av| 日本一区美女福利视频| 男生舔女生逼逼视频| av完全免费在线观看av| 9久在线视频只有精品| 成人av在线资源网站| 黄片大全在线观看观看| 美味人妻2在线播放| 欧美激情电影免费在线| 一区二区三区精品日本| 一区二区三区四区五区性感视频| 亚洲av天堂在线播放| 最新国产精品网址在线观看| 日日夜夜狠狠干视频| 欧美视频综合第一页| 无忧传媒在线观看视频| av网站色偷偷婷婷网男人的天堂| 特大黑人巨大xxxx| 在线视频这里只有精品自拍| 美女视频福利免费看| 性生活第二下硬不起来| 欧美另类重口味极品在线观看| 亚洲国产在人线放午夜| 青青青爽视频在线播放| 日韩av有码中文字幕| 一区二区三区视频,福利一区二区| 亚洲男人让女人爽的视频| 色婷婷精品大在线观看| 99精品视频之69精品视频| 国产V亚洲V天堂无码欠欠| 久久这里只有精品热视频| 亚洲激情偷拍一区二区| 青青青aaaa免费| 人人妻人人人操人人人爽| 午夜大尺度无码福利视频| 免费岛国喷水视频在线观看| 国语对白xxxx乱大交| 97人妻总资源视频| 日韩一区二区三区三州| av在线shipin| 国产午夜亚洲精品不卡在线观看| 一色桃子久久精品亚洲| 国产欧美日韩在线观看不卡| 一区二区三区欧美日韩高清播放| 大黑人性xxxxbbbb| 日本一区精品视频在线观看| 成人av亚洲一区二区| 毛茸茸的大外阴中国视频| 又色又爽又黄又刺激av网站| 只有精品亚洲视频在线观看| 超碰在线中文字幕一区二区| 都市激情校园春色狠狠| 91国产在线免费播放| 欧美精品亚洲精品日韩在线| 喷水视频在线观看这里只有精品| chinese国产盗摄一区二区 | 青青青青青手机视频| 国产高清精品一区二区三区| 天天日天天摸天天爱| 少妇高潮无套内谢麻豆| 在线观看视频网站麻豆| 国产1区,2区,3区| 天天射夜夜操狠狠干| 亚洲免费va在线播放| 免费黄高清无码国产| 扒开让我视频在线观看| 人人超碰国字幕观看97| 熟妇一区二区三区高清版| 水蜜桃国产一区二区三区| 夜色福利视频在线观看| 国内资源最丰富的网站| 在线免费观看黄页视频| 亚洲熟女女同志女同| 青青尤物在线观看视频网站| 久草视频中文字幕在线观看| 无码国产精品一区二区高潮久久4| 五十路丰满人妻熟妇| 在线免费观看日本伦理| av中文字幕国产在线观看| 91老师蜜桃臀大屁股| 国产黄色片在线收看| 综合色区亚洲熟妇shxstz| 亚洲av香蕉一区区二区三区犇| 1024久久国产精品| 蜜臀av久久久久蜜臀av麻豆| 日日夜夜狠狠干视频| 国产老熟女伦老熟妇ⅹ| 久草视频在线免播放| jiujiure精品视频在线| 日韩在线视频观看有码在线| 亚洲丝袜老师诱惑在线观看| 在线免费视频 自拍| 不戴胸罩引我诱的隔壁的人妻| 亚洲人人妻一区二区三区| 女同互舔一区二区三区| 国产精品久久久久国产三级试频| 啊啊好慢点插舔我逼啊啊啊视频| 久久久久久国产精品| 亚洲成人免费看电影| 欧美日本国产自视大全| 日本女人一级免费片| 亚洲日本一区二区久久久精品| 国产乱子伦精品视频潮优女| 亚洲av一妻不如妾| 国产成人精品一区在线观看| 成人sm视频在线观看| 国产V亚洲V天堂无码欠欠| 熟女妇女老妇一二三区| av在线免费资源站| 99久久99一区二区三区| 国产精品国产三级麻豆| 日本av高清免费网站| 日本一二三区不卡无| 亚洲高清自偷揄拍自拍| 亚洲国产最大av综合| 高清成人av一区三区| 亚洲国产欧美一区二区三区…| 欧美特级特黄a大片免费| 爱爱免费在线观看视频| 婷婷六月天中文字幕| 日本高清在线不卡一区二区| 超碰97人人澡人人| 国产精品人久久久久久| 在线播放国产黄色av| 国产性生活中老年人视频网站| aⅴ五十路av熟女中出| 国产夫妻视频在线观看免费| 国产美女一区在线观看| 四川乱子伦视频国产vip| 国产又粗又硬又猛的毛片视频| 少妇深喉口爆吞精韩国| av老司机精品在线观看| 一级黄片久久久久久久久| 欧美日韩激情啪啪啪 | 亚洲一区二区三区在线高清| 天天干狠狠干天天操| 人妻自拍视频中国大陆| 特级欧美插插插插插bbbbb| nagger可以指黑人吗| 男生用鸡操女生视频动漫| 超碰97人人澡人人| av在线免费中文字幕| 熟女人妻三十路四十路人妻斩| 成熟熟女国产精品一区| 国产精品手机在线看片| 亚洲欧美成人综合视频| 中国熟女@视频91| 亚洲免费在线视频网站| 日韩一区二区电国产精品| 五月色婷婷综合开心网4438| 在线成人日韩av电影| 亚洲午夜电影之麻豆| 欧洲精品第一页欧洲精品亚洲| 国产精品系列在线观看一区二区| 宅男噜噜噜666免费观看| 欧美亚洲中文字幕一区二区三区| av天堂加勒比在线| 偷拍美女一区二区三区| avjpm亚洲伊人久久| 在线播放一区二区三区Av无码| 久久久久久久久久性潮| 女同久久精品秋霞网| 精品美女久久久久久| 国产成人自拍视频播放| 午夜福利资源综合激情午夜福利资| 亚洲综合一区成人在线| 欲乱人妻少妇在线视频裸| 亚洲久久午夜av一区二区| 天天干天天操天天爽天天摸| 国产一线二线三线的区别在哪| 日韩欧美国产精品91| 爱有来生高清在线中文字幕| 亚洲免费国产在线日韩| 喷水视频在线观看这里只有精品| 一区二区三区四区五区性感视频| 999久久久久999| 影音先锋女人av噜噜色| 福利视频一区二区三区筱慧| 绝顶痉挛大潮喷高潮无码| 久久久极品久久蜜桃| 欧美精品一区二区三区xxxx| 狠狠嗨日韩综合久久| 99热这里只有国产精品6| 中文字幕在线乱码一区二区| 国产视频网站一区二区三区| 亚洲天天干 夜夜操| 天天色天天操天天透| 亚洲欧美久久久久久久久| 黄工厂精品视频在线观看| 天天操天天爽天天干| 91精品综合久久久久3d动漫| 啊啊啊想要被插进去视频| 中文字幕在线一区精品| okirakuhuhu在线观看| 大屁股熟女一区二区三区| 激情五月婷婷综合色啪| 亚洲超碰97人人做人人爱| 五月天久久激情视频| 二区中出在线观看老师| 少妇ww搡性bbb91| 一色桃子人妻一区二区三区| 亚洲 图片 欧美 图片| 影音先锋女人av噜噜色| 丝袜肉丝一区二区三区四区在线| 天堂va蜜桃一区入口| 班长撕开乳罩揉我胸好爽| 操人妻嗷嗷叫视频一区二区| 38av一区二区三区| 亚洲自拍偷拍精品网| av中文字幕在线观看第三页| 中文字幕日韩无敌亚洲精品 | 9l人妻人人爽人人爽| 18禁污污污app下载| 一区二区三区综合视频| 国产老熟女伦老熟妇ⅹ| 97人人模人人爽人人喊| 老司机99精品视频在线观看| 热久久只有这里有精品| 日本一二三中文字幕| 97人人妻人人澡人人爽人人精品| 亚洲成高清a人片在线观看| 一二三区在线观看视频| 成人色综合中文字幕| 人妻少妇精品久久久久久| 成人网18免费视频版国产 | 亚洲欧美日韩视频免费观看| 激情内射在线免费观看| 成人av亚洲一区二区| 欧美日韩国产一区二区三区三州| 免费一级黄色av网站| 亚洲视频在线观看高清| 欧美aa一级一区三区四区| 色秀欧美视频第一页| tube69日本少妇| 视频 一区二区在线观看| 久草视频福利在线首页| 97人妻夜夜爽二区欧美极品| 伊人开心婷婷国产av| 国产高清97在线观看视频| 在线观看成人国产电影| 亚洲午夜福利中文乱码字幕| 日本高清撒尿pissing| 日韩av中文在线免费观看| 日日爽天天干夜夜操| 日本后入视频在线观看| 亚洲成人三级在线播放| 大香蕉大香蕉在线看| 成熟熟女国产精品一区| 国产中文精品在线观看| 青青青青青青青青青国产精品视频| 久草视频首页在线观看| 一区二区三区四区视频| 欧美怡红院视频在线观看| 高清一区二区欧美系列| 亚洲卡1卡2卡三卡四老狼| 精品首页在线观看视频| 成人30分钟免费视频| 成人av在线资源网站| 久久久久久cao我的性感人妻| 女警官打开双腿沦为性奴| 91九色porny蝌蚪国产成人| 香港三日本三韩国三欧美三级| 亚洲护士一区二区三区| 大骚逼91抽插出水视频| 女人精品内射国产99| 精品av国产一区二区三区四区| 亚洲视频在线观看高清| 啪啪啪啪啪啪啪啪av| 色综合久久五月色婷婷综合| 2020中文字幕在线播放| av网址国产在线观看| 婷婷五月亚洲综合在线| 青青草人人妻人人妻| 啪啪啪操人视频在线播放| 国产视频一区二区午夜| 中国熟女@视频91| 日韩中文字幕在线播放第二页| 人妻3p真实偷拍一二区| 亚洲精品中文字幕下载| 亚洲天天干 夜夜操| 国产在线观看免费人成短视频| 亚洲1卡2卡三卡4卡在线观看| 大胸性感美女羞爽操逼毛片| 青青青青青手机视频| 一区二区三区av高清免费| 天天日天天透天天操| 啊啊好大好爽啊啊操我啊啊视频 | 欧美地区一二三专区| 午夜成午夜成年片在线观看 | 天堂女人av一区二区| 午夜影院在线观看视频羞羞羞| 大屁股肉感人妻中文字幕在线| yellow在线播放av啊啊啊| 偷青青国产精品青青在线观看| 伊拉克及约旦宣布关闭领空| 亚洲精品午夜aaa久久| 2022国产综合在线干| 天天日夜夜操天天摸| 午夜精品久久久久久99热| 粉嫩av蜜乳av蜜臀| 日本免费午夜视频网站| 国产亚州色婷婷久久99精品| 一区二区三区日韩久久| 动漫av网站18禁| 午夜精品一区二区三区城中村| 亚洲在线观看中文字幕av| 蜜桃专区一区二区在线观看| 亚洲国产最大av综合| 亚洲av黄色在线网站| 国产精品一区二区av国| 二区中出在线观看老师| 国产精品人妻熟女毛片av久| 亚洲一区av中文字幕在线观看| 无套猛戳丰满少妇人妻| 爱爱免费在线观看视频| 19一区二区三区在线播放| 中文字幕在线一区精品| 青青热久免费精品视频在线观看 | 综合页自拍视频在线播放| japanese日本熟妇另类| 国产亚洲四十路五十路| 中文字幕视频一区二区在线观看| 一区二区在线视频中文字幕| 天天日天天爽天天干| 中文字幕av男人天堂| 粗大的内捧猛烈进出爽大牛汉子| 亚洲最大黄了色网站| 性感美女高潮视频久久久| 91极品大一女神正在播放| 水蜜桃国产一区二区三区| 91亚洲手机在线视频播放| 日本裸体熟妇区二区欧美| 亚洲伊人色一综合网| 国产精品久久久久久久久福交| 日本丰满熟妇大屁股久久| 黄网十四区丁香社区激情五月天| 亚洲一区二区三区五区| 天天日天天干天天搡| 亚洲区欧美区另类最新章节| av中文字幕在线导航| 国产实拍勾搭女技师av在线| 国产在线观看黄色视频| 年轻的人妻被夫上司侵犯| 亚洲av日韩精品久久久| 日本后入视频在线观看| 久久麻豆亚洲精品av| 91成人精品亚洲国产| 日韩精品激情在线观看| 青青青青爽手机在线| 热思思国产99re| 国产一区二区在线欧美| 国产欧美日韩第三页| 任你操任你干精品在线视频| 偷拍自拍国产在线视频| 一二三中文乱码亚洲乱码one| 色综合久久久久久久久中文| 亚洲成a人片777777| 国产成人精品午夜福利训2021| 国产免费av一区二区凹凸四季| 91人妻人人做人人爽在线| 久久久精品欧洲亚洲av| 偷拍自拍国产在线视频| 在线观看操大逼视频| 久久精品36亚洲精品束缚| 日韩欧美国产一区ab| 久久久久久97三级| 亚洲国产成人无码麻豆艾秋| 福利一二三在线视频观看| 欧美一区二区三区激情啪啪啪| 超级碰碰在线视频免费观看| 亚洲精品一区二区三区老狼| 天天干天天操天天扣| 亚洲精品av在线观看| 午夜国产免费福利av| 青草亚洲视频在线观看| 日韩成人综艺在线播放| 亚洲另类伦春色综合小| 亚洲综合乱码一区二区| 亚洲一区二区人妻av| 高潮喷水在线视频观看| 福利片区一区二体验区| 大陆av手机在线观看| 日韩美女搞黄视频免费| 欧美在线一二三视频| 亚洲2021av天堂| 亚洲av日韩高清hd| 男人天堂色男人av| 久草视频首页在线观看| av久久精品北条麻妃av观看| 精品91自产拍在线观看一区| 91九色porny蝌蚪国产成人| 天天射夜夜操狠狠干| 国产1区,2区,3区| 日韩精品电影亚洲一区| 久久久久久国产精品| 国产福利小视频二区| 超污视频在线观看污污污 | 亚洲精品无码色午夜福利理论片| 日韩精品一区二区三区在线播放| 最新日韩av传媒在线| 在线免费观看亚洲精品电影| 在线新三级黄伊人网| 日韩熟女av天堂系列| 人妻自拍视频中国大陆| 亚洲国产欧美一区二区三区久久 | 免费观看污视频网站| 亚洲特黄aaaa片| 国产又大又黄免费观看| 欧洲精品第一页欧洲精品亚洲| 2o22av在线视频| 天天操天天弄天天射| 久久久久久久久久性潮| 婷婷久久一区二区字幕网址你懂得| 亚洲av极品精品在线观看| 精品久久久久久久久久久久人妻| 亚洲欧美综合在线探花| 亚洲乱码中文字幕在线| 99视频精品全部15| 欧美精品伦理三区四区| 9色在线视频免费观看| 亚洲av香蕉一区区二区三区犇 | 亚洲国产香蕉视频在线播放| 91人妻人人做人人爽在线| 一个人免费在线观看ww视频| 美女av色播在线播放| 四川五十路熟女av| 老司机在线精品福利视频| 日韩国产乱码中文字幕| 中文 成人 在线 视频| 熟女在线视频一区二区三区| 99热久久极品热亚洲| 视频一区 二区 三区 综合| 亚洲国产成人无码麻豆艾秋| 国产在线免费观看成人| 男人在床上插女人视频| 人人妻人人爽人人澡人人精品| 人妻凌辱欧美丰满熟妇| 亚洲欧美精品综合图片小说| 午夜国产免费福利av| 不卡日韩av在线观看| 青青青青草手机在线视频免费看 | 婷婷色国产黑丝少妇勾搭AV| 黄色大片免费观看网站| 91免费放福利在线观看| 91麻豆精品秘密入口在线观看| 成人综合亚洲欧美一区| 又粗又长 明星操逼小视频 | 狠狠地躁夜夜躁日日躁| 亚洲最大黄 嗯色 操 啊| 精品国产成人亚洲午夜| 成人av亚洲一区二区| 天天操天天操天天碰| 日韩av有码中文字幕| 亚洲人妻30pwc| 中文字幕av男人天堂| 精品亚洲中文字幕av| 在线视频这里只有精品自拍| 精品视频中文字幕在线播放| 人人妻人人澡欧美91精品| 在线新三级黄伊人网| 五十路老熟女码av| 精品乱子伦一区二区三区免费播| 日本少妇的秘密免费视频| 哥哥姐姐综合激情小说| av老司机亚洲一区二区| 日本免费视频午夜福利视频| 久久免看30视频口爆视频| 天天干夜夜操天天舔| 午夜福利人人妻人人澡人人爽| 白白操白白色在线免费视频 | 午夜福利资源综合激情午夜福利资| 亚洲成人激情av在线| 在线观看亚洲人成免费网址| 午夜美女少妇福利视频| 精品久久久久久高潮| 欧美精品亚洲精品日韩在线| 在线观看免费视频网| 欧美地区一二三专区| 狠狠地躁夜夜躁日日躁| 欧亚日韩一区二区三区观看视频| 日韩成人性色生活片| 影音先锋女人av噜噜色| 国产精品久久久久网| 国产一级麻豆精品免费| 亚洲男人在线天堂网| 国产成人精品福利短视频| 国产九色91在线观看精品| 91国内视频在线观看| 日韩美女精品视频在线观看网站 | 亚欧在线视频你懂的| 国产无遮挡裸体免费直播视频| 天天日天天干天天舔天天射| 日本av熟女在线视频| 日韩亚国产欧美三级涩爱| 含骚鸡巴玩逼逼视频| 欧美日本国产自视大全| 五月天色婷婷在线观看视频免费 | 久久亚洲天堂中文对白| 偷拍自拍国产在线视频| 国产又色又刺激在线视频 | av男人天堂狠狠干| 在线国产日韩欧美视频| 国产在线91观看免费观看| 91在线免费观看成人| 男女之间激情网午夜在线| 国产真实灌醉下药美女av福利| 久久亚洲天堂中文对白| 日美女屁股黄邑视频| 任你操任你干精品在线视频| 91免费福利网91麻豆国产精品 | 一区二区在线观看少妇| 大白屁股精品视频国产| 91精品免费久久久久久| 在线免费91激情四射 | 久久一区二区三区人妻欧美| 中文字幕中文字幕人妻| 黄工厂精品视频在线观看| 91综合久久亚洲综合| 欧美在线精品一区二区三区视频| 又大又湿又爽又紧A视频| 欧美国品一二三产区区别| 日韩av有码一区二区三区4| 中文字幕在线观看国产片| 国产男女视频在线播放| 视频久久久久久久人妻| 18禁美女无遮挡免费| 97人妻总资源视频| 久久一区二区三区人妻欧美| 蜜桃色婷婷久久久福利在线| 日韩一区二区三区三州| 美洲精品一二三产区区别| 国产精品欧美日韩区二区| 青青青国产片免费观看视频| 女同互舔一区二区三区| 国产欧美日韩第三页| 伊拉克及约旦宣布关闭领空| 久久机热/这里只有| 久久久久久久99精品| AV无码一区二区三区不卡| 初美沙希中文字幕在线| 久久久久久久一区二区三| 中文字幕日韩人妻在线三区| 激情色图一区二区三区| 日韩一区二区三区三州| 国产精品人妻一区二区三区网站| 日本最新一二三区不卡在线 | 99re久久这里都是精品视频| 97超碰最新免费在线观看| 久草福利电影在线观看| 天天射夜夜操狠狠干| sw137 中文字幕 在线| 天天通天天透天天插| 天天想要天天操天天干| 国产V亚洲V天堂无码欠欠| 日视频免费在线观看| av手机在线免费观看日韩av| 亚洲熟女久久久36d| 欧美国产亚洲中英文字幕| 中文字幕一区二 区二三区四区| 午夜在线观看一区视频| 伊人日日日草夜夜草| 人妻素人精油按摩中出| 白白操白白色在线免费视频 | 成人综合亚洲欧美一区| 在线观看国产免费麻豆| 亚洲av日韩高清hd| 久草视频在线一区二区三区资源站 | 欧美中文字幕一区最新网址| 成人18禁网站在线播放| 熟女妇女老妇一二三区| 国产精品自偷自拍啪啪啪| 中文人妻AV久久人妻水| 2020国产在线不卡视频| 黄色资源视频网站日韩| 免费在线福利小视频| 社区自拍揄拍尻屁你懂的| 可以在线观看的av中文字幕| 日本熟妇丰满厨房55| 日韩熟女av天堂系列| 精品一区二区三区三区88| 青草久久视频在线观看| 中文字幕第一页国产在线| 午夜免费体验区在线观看 | 欧美黑人性猛交xxxxⅹooo| 最新激情中文字幕视频| 成人性黑人一级av| 社区自拍揄拍尻屁你懂的| 亚洲在线免费h观看网站| 国产大学生援交正在播放| av日韩在线观看大全| 日本a级视频老女人| 在线网站你懂得老司机| 美洲精品一二三产区区别| 国产福利小视频大全| 玩弄人妻熟妇性色av少妇| 日本欧美视频在线观看三区| 人人超碰国字幕观看97| 国产高清女主播在线| 青青青视频自偷自拍38碰| 日辽宁老肥女在线观看视频| 亚洲1区2区3区精华液| 亚洲午夜在线视频福利| 成人蜜臀午夜久久一区| 国产精品中文av在线播放 | 93视频一区二区三区| 2018最新中文字幕在线观看| 日韩欧美亚洲熟女人妻| 涩爱综合久久五月蜜臀| 日本少妇高清视频xxxxx| 午夜福利资源综合激情午夜福利资 | 国产成人自拍视频播放| 91九色porny蝌蚪国产成人| 日本性感美女三级视频| 黑人性生活视频免费看| 黑人巨大精品欧美视频| 成人激情文学网人妻| 国产chinesehd精品麻豆| 91自产国产精品视频| 天天色天天操天天舔| 中文字幕综合一区二区| 人妻素人精油按摩中出| 91一区精品在线观看| 伊人成人综合开心网| 欧亚日韩一区二区三区观看视频| 精品亚洲国产中文自在线| 亚洲高清视频在线不卡| 区一区二区三国产中文字幕| 欧美viboss性丰满| 五十路息与子猛烈交尾视频| 日韩av有码一区二区三区4| 人妻另类专区欧美制服| 久久久精品精品视频视频| 国产极品精品免费视频| 亚洲成人午夜电影在线观看| 久久机热/这里只有| 黄色片一级美女黄色片| 国产高清精品极品美女| 摧残蹂躏av一二三区| 老司机深夜免费福利视频在线观看| 19一区二区三区在线播放| 老鸭窝在线观看一区| av在线shipin| 亚洲成人情色电影在线观看| 亚洲一级美女啪啪啪| 男大肉棒猛烈插女免费视频| 婷婷色中文亚洲网68| 天天日天天鲁天天操| 国产密臀av一区二区三| 99一区二区在线观看| 91人妻精品久久久久久久网站| 老鸭窝在线观看一区| 91亚洲精品干熟女蜜桃频道| 2021最新热播中文字幕| 最新的中文字幕 亚洲| 日韩欧美国产一区不卡| 国产va在线观看精品| 大学生A级毛片免费视频| 在线新三级黄伊人网| 成人精品视频99第一页| 熟女91pooyn熟女| 97年大学生大白天操逼| 美日韩在线视频免费看| 亚洲精品中文字幕下载| 日韩视频一区二区免费观看| 91 亚洲视频在线观看| 成年美女黄网站18禁久久| 黄色资源视频网站日韩| 夜夜嗨av一区二区三区中文字幕| 婷婷久久一区二区字幕网址你懂得| 国产va精品免费观看| 搡老熟女一区二区在线观看| 新婚人妻聚会被中出| 狠狠的往里顶撞h百合| 一区二区三区四区五区性感视频| 高清成人av一区三区| 精品久久久久久久久久久久人妻 | 亚洲 色图 偷拍 欧美| 黄色片一级美女黄色片| 在线观看视频网站麻豆| av中文在线天堂精品| 亚洲天天干 夜夜操| 新97超碰在线观看| 含骚鸡巴玩逼逼视频| 成人av在线资源网站| 青青青青青青青青青国产精品视频 | 在线观看av亚洲情色| 绝色少妇高潮3在线观看| heyzo蜜桃熟女人妻| 亚洲av日韩精品久久久久久hd| 边摸边做超爽毛片18禁色戒| 免费男阳茎伸入女阳道视频| lutube在线成人免费看| 日本一道二三区视频久久| 日本三极片中文字幕| 久久久超爽一二三av| 夜色17s精品人妻熟女| 偷偷玩弄新婚人妻h视频| 国产福利在线视频一区| 92福利视频午夜1000看| 又粗又长 明星操逼小视频 | 在线观看的黄色免费网站| 欧美在线精品一区二区三区视频 | 亚洲国产欧美一区二区丝袜黑人| 亚洲成人情色电影在线观看| 91快播视频在线观看| 99久久99久国产黄毛片| 亚洲一区自拍高清免费视频| 自拍偷拍亚洲另类色图| 99热这里只有精品中文| 在线观看av2025| 99精品国产自在现线观看| 欧美黑人巨大性xxxxx猛交| 白白操白白色在线免费视频| h国产小视频福利在线观看| 日曰摸日日碰夜夜爽歪歪 | 亚洲午夜电影之麻豆| 国产乱子伦一二三区| 青青青青草手机在线视频免费看| 一区二区三区日韩久久| 国产日韩欧美美利坚蜜臀懂色| 欧美熟妇一区二区三区仙踪林| 亚洲2021av天堂| 馒头大胆亚洲一区二区| 91精品视频在线观看免费| 青青青国产片免费观看视频| 传媒在线播放国产精品一区| 在线观看成人国产电影| 福利在线视频网址导航| 欧美国品一二三产区区别| 最新国产亚洲精品中文在线| 99av国产精品欲麻豆| 宅男噜噜噜666国产| 久久久久久久久久久免费女人| 91成人精品亚洲国产| 另类av十亚洲av| 亚洲图片偷拍自拍区| 熟妇一区二区三区高清版| 阴茎插到阴道里面的视频| 黄片色呦呦视频免费看| 自拍偷拍亚洲欧美在线视频| 爱爱免费在线观看视频| 亚洲无线观看国产高清在线| 久久www免费人成一看片| 色花堂在线av中文字幕九九 | 麻豆精品成人免费视频| 97年大学生大白天操逼| 欧美日韩一级黄片免费观看| ka0ri在线视频| 国产普通话插插视频| av天堂加勒比在线| 国产一区成人在线观看视频 | 国产卡一卡二卡三乱码手机| 青春草视频在线免费播放| 国产精品国产三级国产午| 久久www免费人成一看片| 日韩美在线观看视频黄| 黄片色呦呦视频免费看| 边摸边做超爽毛片18禁色戒| 日韩美女精品视频在线观看网站| 岛国毛片视频免费在线观看| 国产精品sm调教视频| 亚洲高清自偷揄拍自拍| 搡老妇人老女人老熟女| 91亚洲国产成人精品性色| 被大鸡吧操的好舒服视频免费| 婷婷综合蜜桃av在线| 黄片色呦呦视频免费看| 亚洲 欧美 精品 激情 偷拍| 亚洲激情唯美亚洲激情图片| 人妻最新视频在线免费观看| 天天躁日日躁狠狠躁av麻豆| 亚洲男人在线天堂网| 大香蕉大香蕉在线有码 av| 国产高清在线观看1区2区| 国产精品系列在线观看一区二区| 中国黄片视频一区91| 白白操白白色在线免费视频| 涩爱综合久久五月蜜臀| 日本少妇人妻xxxxx18| 精品老妇女久久9g国产| 黄色片黄色片wyaa| 国产极品精品免费视频| 偷拍自拍国产在线视频| 综合一区二区三区蜜臀| 免费男阳茎伸入女阳道视频| 亚洲综合一区二区精品久久| 中文字幕视频一区二区在线观看| sejizz在线视频| 青青草人人妻人人妻| 韩国女主播精品视频网站| 欧美精产国品一二三区| 一区二区三区在线视频福利| 亚洲精品在线资源站| 国产亚州色婷婷久久99精品| 国产精品自偷自拍啪啪啪| 香蕉片在线观看av| 青青草成人福利电影| 国产aⅴ一线在线观看| 天天插天天狠天天操| 久久丁香婷婷六月天| 亚洲国产免费av一区二区三区| 国产又大又黄免费观看| 天天色天天舔天天射天天爽| 国产内射中出在线观看| 99精品免费观看视频| 亚洲精品午夜aaa久久| 五十路av熟女松本翔子| AV无码一区二区三区不卡| 高潮视频在线快速观看国家快速| 男人靠女人的逼视频| 韩国三级aaaaa高清视频 | 人妻最新视频在线免费观看| 91色秘乱一区二区三区| 在线观看免费岛国av| 18禁免费av网站| 久久农村老妇乱69系列| 国产激情av网站在线观看| 亚洲免费国产在线日韩| 99国内精品永久免费视频| 熟妇一区二区三区高清版| 精品欧美一区二区vr在线观看| av天堂中文免费在线| 国产精品黄大片在线播放| 经典亚洲伊人第一页| 久久农村老妇乱69系列| 绯色av蜜臀vs少妇| 国产麻豆乱子伦午夜视频观看| 极品性荡少妇一区二区色欲| 黄色男人的天堂视频| 国产成人精品亚洲男人的天堂| 久久精品36亚洲精品束缚| 真实国产乱子伦一区二区| 亚洲av可乐操首页| 天天干天天操天天扣| 午夜激情精品福利视频| 久久久精品999精品日本| 国产一区二区火爆视频| 人妻自拍视频中国大陆| 一区二区三区精品日本| 中文字幕av熟女人妻| av大全在线播放免费| 亚洲欧美另类自拍偷拍色图| 黄页网视频在线免费观看 | 亚洲变态另类色图天堂网| 亚洲超碰97人人做人人爱| 99国内小视频在现欢看| 成人免费做爰高潮视频| 中文字幕 亚洲av| 女同久久精品秋霞网| 91 亚洲视频在线观看| 91中文字幕免费在线观看| 大鸡吧插逼逼视频免费看| 日韩亚洲高清在线观看| 在线免费观看靠比视频的网站| 国产福利小视频大全| 九九热99视频在线观看97| 黄色成人在线中文字幕| 久久久久久久99精品| 国产精品中文av在线播放| 国产熟妇人妻ⅹxxxx麻豆| 国产精品视频一区在线播放| 色综合久久五月色婷婷综合| 美女少妇亚洲精选av| 人妻少妇性色欲欧美日韩| 狠狠鲁狠狠操天天晚上干干| 91久久综合男人天堂| 老司机福利精品视频在线| 亚洲图片偷拍自拍区| 精品人妻一二三区久久| 日本少妇人妻xxxxxhd| 性欧美日本大妈母与子| 换爱交换乱高清大片| 女生被男生插的视频网站| 特大黑人巨大xxxx| 北条麻妃肉色丝袜视频| 成人伊人精品色xxxx视频| 欧美少妇性一区二区三区| 黑人借宿ntr人妻的沦陷2| 97精品视频在线观看| 四虎永久在线精品免费区二区| 欧美一区二区三区在线资源 | 久久久精品欧洲亚洲av| 韩国男女黄色在线观看| 人人妻人人爽人人添夜| 欧洲精品第一页欧洲精品亚洲| 国产成人自拍视频播放 | 超污视频在线观看污污污| 中文字幕av一区在线观看| 色偷偷伊人大杳蕉综合网| 在线免费观看黄页视频| 中文字幕一区的人妻欧美日韩| 91精品国产观看免费| 年轻的人妻被夫上司侵犯| 韩国黄色一级二级三级| 日韩欧美制服诱惑一区在线| av日韩在线观看大全| 日韩成人性色生活片| 中文人妻AV久久人妻水| 骚逼被大屌狂草视频免费看| 91精品一区二区三区站长推荐| av手机在线观播放网站| 在线观看欧美黄片一区二区三区| 午夜频道成人在线91| 天天色天天操天天舔| 免费观看理论片完整版| 亚洲福利精品福利精品福利| 成人免费公开视频无毒| 99久久99久国产黄毛片| 日韩av有码一区二区三区4| 国产高清在线观看1区2区| 日韩精品中文字幕在线| 国产chinesehd精品麻豆| 男女第一次视频在线观看| 人妻少妇一区二区三区蜜桃| 91中文字幕免费在线观看| 日辽宁老肥女在线观看视频| 性色av一区二区三区久久久| 青青草原色片网站在线观看| 欧美日本aⅴ免费视频| 老司机深夜免费福利视频在线观看| 欧美一区二区中文字幕电影| 青娱乐蜜桃臀av色| 狠狠地躁夜夜躁日日躁| 狠狠躁狠狠爱网站视频| 成人午夜电影在线观看 久久| 抽查舔水白紧大视频| 日本一区精品视频在线观看| 欧美成人精品欧美一级黄色| 亚洲人妻国产精品综合| 丝袜美腿视频诱惑亚洲无| 久久精品国产999| 偷拍自拍亚洲视频在线观看| 国产av自拍偷拍盛宴| 一区二区三区日本伦理| 夜夜躁狠狠躁日日躁麻豆内射 | 特级无码毛片免费视频播放 | 亚洲女人的天堂av| 成人性黑人一级av| 999九九久久久精品| 久久久久久性虐视频| 含骚鸡巴玩逼逼视频| 91chinese在线视频| aaa久久久久久久久| 国产精品大陆在线2019不卡| 午夜在线观看岛国av,com| 岛国一区二区三区视频在线| 制丝袜业一区二区三区| 国产亚洲视频在线二区| 视频二区在线视频观看| 日韩美在线观看视频黄| 亚洲 欧美 自拍 偷拍 在线| 成人在线欧美日韩国产| 中文字幕午夜免费福利视频| 深田咏美亚洲一区二区| 久久精品久久精品亚洲人| 日本韩国免费一区二区三区视频 | 2022国产精品视频| 国产精品久久久久久久久福交| 999九九久久久精品| 亚洲天堂有码中文字幕视频 | 久久精品美女免费视频| 国产熟妇一区二区三区av| 国产视频一区在线观看| 黄色片年轻人在线观看| 亚洲国产精品免费在线观看| 亚洲欧美综合另类13p| 阴茎插到阴道里面的视频| 搞黄色在线免费观看| 人妻熟女在线一区二区| 亚洲成人午夜电影在线观看| 在线观看免费视频网| 最新国产亚洲精品中文在线| 黄色片黄色片wyaa| 日本熟女50视频免费| 少妇一区二区三区久久久| 99热这里只有精品中文| 2025年人妻中文字幕乱码在线| 五十路息与子猛烈交尾视频| 少妇人妻二三区视频 |