日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > vue >内容正文

vue

Vue自定义指令原来这么简单

發(fā)布時(shí)間:2023/12/13 vue 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Vue自定义指令原来这么简单 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本篇學(xué)習(xí)目標(biāo)

  • 能夠了解組件進(jìn)階知識(shí)
  • 能夠掌握自定義指令創(chuàng)建和使用
  • 能夠完成tabbar案例的開發(fā)
  • 1. 組件進(jìn)階

    1.0 組件進(jìn)階 - 動(dòng)態(tài)組件

    目標(biāo): 多個(gè)組件使用同一個(gè)掛載點(diǎn),并動(dòng)態(tài)切換,這就是動(dòng)態(tài)組件

    需求: 完成一個(gè)注冊(cè)功能頁面, 2個(gè)按鈕切換, 一個(gè)填寫注冊(cè)信息, 一個(gè)填寫用戶簡(jiǎn)介信息

    效果如下:

  • 準(zhǔn)備被切換的 - UserName.vue / UserInfo.vue 2個(gè)組件

  • 引入到UseDynamic.vue注冊(cè)

  • 準(zhǔn)備變量來承載要顯示的"組件名"

  • 設(shè)置掛載點(diǎn), 使用is屬性來設(shè)置要顯示哪個(gè)組件

  • 點(diǎn)擊按鈕 – 修改comName變量里的"組件名"

  • <template><div><button @click="comName = 'UserName'">賬號(hào)密碼填寫</button><button @click="comName = 'UserInfo'">個(gè)人信息填寫</button><p>下面顯示注冊(cè)組件-動(dòng)態(tài)切換:</p><div style="border: 1px solid red;"><component :is="comName"></component></div></div> </template><script> // 目標(biāo): 動(dòng)態(tài)組件 - 切換組件顯示 // 場(chǎng)景: 同一個(gè)掛載點(diǎn)要切換 不同組件 顯示 // 1. 創(chuàng)建要被切換的組件 - 標(biāo)簽+樣式 // 2. 引入到要展示的vue文件內(nèi), 注冊(cè) // 3. 變量-承載要顯示的組件名 // 4. 設(shè)置掛載點(diǎn)<component :is="變量"></component> // 5. 點(diǎn)擊按鈕-切換comName的值為要顯示的組件名import UserName from '../components/01/UserName' import UserInfo from '../components/01/UserInfo' export default {data(){return {comName: "UserName"}},components: {UserName,UserInfo} } </script>

    在App.vue - 引入01_UseDynamic.vue并使用顯示

    總結(jié): vue內(nèi)置component組件, 配合is屬性, 設(shè)置要顯示的組件名字

    1.1 組件進(jìn)階 - 組件緩存

    目標(biāo): 組件切換會(huì)導(dǎo)致組件被頻繁銷毀和重新創(chuàng)建, 性能不高

    使用Vue內(nèi)置的keep-alive組件, 可以讓包裹的組件保存在內(nèi)存中不被銷毀

    演示1: 可以先給UserName.vue和UserInfo.vue 注冊(cè)created和destroyed生命周期事件, 觀察創(chuàng)建和銷毀過程

    演示2: 使用keep-alive內(nèi)置的vue組件, 讓動(dòng)態(tài)組件緩存而不是銷毀

    語法:

    ? Vue內(nèi)置的keep-alive組件 包起來要頻繁切換的組件

    02_UseDynamic.vue

    <div style="border: 1px solid red;"><!-- Vue內(nèi)置keep-alive組件, 把包起來的組件緩存起來 --><keep-alive><component :is="comName"></component></keep-alive> </div>

    補(bǔ)充生命周期:

    • activated - 激活
    • deactivated - 失去激活狀態(tài)

    總結(jié): keep-alive可以提高組件的性能, 內(nèi)部包裹的標(biāo)簽不會(huì)被銷毀和重新創(chuàng)建, 觸發(fā)激活和非激活的生命周期方法

    1.2 組件進(jìn)階 - 激活和非激活

    目標(biāo): 被緩存的組件不再創(chuàng)建和銷毀, 而是激活和非激活

    補(bǔ)充2個(gè)鉤子方法名:

    ? activated – 激活時(shí)觸發(fā)

    ? deactivated – 失去激活狀態(tài)觸發(fā)

    1.3 組件進(jìn)階 - 組件插槽

    目標(biāo): 用于實(shí)現(xiàn)組件的內(nèi)容分發(fā), 通過 slot 標(biāo)簽, 可以接收到寫在組件標(biāo)簽內(nèi)的內(nèi)容

    vue提供組件插槽能力, 允許開發(fā)者在封裝組件時(shí),把不確定的部分定義為插槽

    插槽例子:

    需求: 以前折疊面板案例, 想要實(shí)現(xiàn)不同內(nèi)容顯示, 我們把折疊面板里的Pannel組件, 添加組件插槽方式

    語法口訣:

  • 組件內(nèi)用占位
  • 使用組件時(shí)夾著的地方, 傳入標(biāo)簽替換slot
  • 03/Pannel.vue - 組件(直接復(fù)制)

    <template><div><!-- 按鈕標(biāo)題 --><div class="title"><h4>芙蓉樓送辛漸</h4><span class="btn" @click="isShow = !isShow">{{ isShow ? "收起" : "展開" }}</span></div><!-- 下拉內(nèi)容 --><div class="container" v-show="isShow"><p>寒雨連江夜入?yún)?</p><p>平明送客楚山孤。</p><p>洛陽親友如相問,</p><p>一片冰心在玉壺。</p></div></div> </template><script> export default {data() {return {isShow: false,};}, }; </script><style scoped> h3 {text-align: center; }.title {display: flex;justify-content: space-between;align-items: center;border: 1px solid #ccc;padding: 0 1em; }.title h4 {line-height: 2;margin: 0; }.container {border: 1px solid #ccc;padding: 0 1em; }.btn {/* 鼠標(biāo)改成手的形狀 */cursor: pointer; }img {width: 50%; } </style>

    views/03_UserSlot.vue - 使用組件(直接復(fù)制)

    框: 在這個(gè)基礎(chǔ)重復(fù)使用組件

    <template><div id="container"><div id="app"><h3>案例:折疊面板</h3></div></div> </template><script> export default { }; </script><style> #app {width: 400px;margin: 20px auto;background-color: #fff;border: 4px solid blueviolet;border-radius: 1em;box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.5);padding: 1em 2em 2em; } </style>

    views/03_UseSlot.vue - 組件插槽使用

    <template><div id="container"><div id="app"><h3>案例:折疊面板</h3><Pannel><img src="../assets/mm.gif" alt=""><span>我是內(nèi)容</span></Pannel><Pannel><p>寒雨連江夜入?yún)?</p><p>平明送客楚山孤。</p><p>洛陽親友如相問,</p><p>一片冰心在玉壺。</p></Pannel><Pannel></Pannel></div></div> </template><script> import Pannel from "../components/03/Pannel"; export default {components: {Pannel,}, }; </script>

    總結(jié): 組件內(nèi)容分發(fā)技術(shù), slot占位, 使用組件時(shí)傳入替換slot位置的標(biāo)簽

    1.4 組件進(jìn)階 - 插槽默認(rèn)內(nèi)容

    目標(biāo): 如果外面不給傳, 想給個(gè)默認(rèn)顯示內(nèi)容

    口訣: 夾著內(nèi)容默認(rèn)顯示內(nèi)容, 如果不給插槽slot傳東西, 則使用夾著的內(nèi)容在原地顯示

    <slot>默認(rèn)內(nèi)容</slot>

    1.5 組件進(jìn)階 - 具名插槽

    目標(biāo): 當(dāng)一個(gè)組件內(nèi)有2處以上需要外部傳入標(biāo)簽的地方

    傳入的標(biāo)簽可以分別派發(fā)給不同的slot位置

    要求: v-slot一般用跟template標(biāo)簽使用 (template是html5新出標(biāo)簽內(nèi)容模板元素, 不會(huì)渲染到頁面上, 一般被vue解析內(nèi)部標(biāo)簽)

    components/04/Pannel.vue - 留下具名slot

    <template><div><!-- 按鈕標(biāo)題 --><div class="title"><slot name="title"></slot><span class="btn" @click="isShow = !isShow">{{ isShow ? "收起" : "展開" }}</span></div><!-- 下拉內(nèi)容 --><div class="container" v-show="isShow"><slot name="content"></slot></div></div> </template>

    views/04_UseSlot.vue使用

    <template><div id="container"><div id="app"><h3>案例:折疊面板</h3><Pannel><template v-slot:title><h4>芙蓉樓送辛漸</h4></template><template v-slot:content><img src="../assets/mm.gif" alt=""><span>我是內(nèi)容</span></template></Pannel><Pannel><template #title><span style="color: red;">我是標(biāo)題</span></template><template #content><p>寒雨連江夜入?yún)?</p><p>平明送客楚山孤。</p><p>洛陽親友如相問,</p><p>一片冰心在玉壺。</p></template></Pannel></div></div> </template><script> import Pannel from "../components/04/Pannel"; export default {components: {Pannel,}, }; </script>

    v-slot可以簡(jiǎn)化成#使用

    v-bind可以省略成: v-on: 可以省略成@ 那么v-slot: 可以簡(jiǎn)化成#

    總結(jié): slot的name屬性起插槽名, 使用組件時(shí), template配合#插槽名傳入具體標(biāo)簽

    1.6 組件進(jìn)階 - 作用域插槽

    目標(biāo): 子組件里值, 在給插槽賦值時(shí)在父組件環(huán)境下使用

    復(fù)習(xí): 插槽內(nèi)slot中顯示默認(rèn)內(nèi)容

    例子: 默認(rèn)內(nèi)容在子組件中, 但是父親在給插槽傳值, 想要改變插槽顯示的默認(rèn)內(nèi)容

    口訣:

  • 子組件, 在slot上綁定屬性和子組件內(nèi)的值
  • 使用組件, 傳入自定義標(biāo)簽, 用template和v-slot=“自定義變量名”
  • scope變量名自動(dòng)綁定slot上所有屬性和值
  • components/05/Pannel.vue - 定義組件, 和具名插槽, 給slot綁定屬性和值

    <template><div><!-- 按鈕標(biāo)題 --><div class="title"><h4>芙蓉樓送辛漸</h4><span class="btn" @click="isShow = !isShow">{{ isShow ? "收起" : "展開" }}</span></div><!-- 下拉內(nèi)容 --><div class="container" v-show="isShow"><slot :row="defaultObj">{{ defaultObj.defaultOne }}</slot></div></div> </template><script> // 目標(biāo): 作用域插槽 // 場(chǎng)景: 使用插槽, 使用組件內(nèi)的變量 // 1. slot標(biāo)簽, 自定義屬性和內(nèi)變量關(guān)聯(lián) // 2. 使用組件, template配合v-slot="變量名" // 變量名會(huì)收集slot身上屬性和值形成對(duì)象 export default {data() {return {isShow: false,defaultObj: {defaultOne: "無名氏",defaultTwo: "小傳同學(xué)"}};}, }; </script>

    views/05_UseSlot.vue

    <template><div id="container"><div id="app"><h3>案例:折疊面板</h3><Pannel><!-- 需求: 插槽時(shí), 使用組件內(nèi)變量 --><!-- scope變量: {row: defaultObj} --><template v-slot="scope"><p>{{ scope.row.defaultTwo }}</p></template></Pannel></div></div> </template><script> import Pannel from "../components/05/Pannel"; export default {components: {Pannel,}, }; </script>

    總結(jié): 組件內(nèi)變量綁定在slot上, 然后使用組件v-slot=“變量” 變量上就會(huì)綁定slot身上屬性和值

    1.7 組件進(jìn)階 - 作用域插槽使用場(chǎng)景

    目標(biāo): 了解作用域插槽使用場(chǎng)景, 自定義組件內(nèi)標(biāo)簽+內(nèi)容

    案例: 封裝一個(gè)表格組件, 在表格組件內(nèi)循環(huán)產(chǎn)生單元格

    準(zhǔn)備MyTable.vue組件 – 內(nèi)置表格, 傳入數(shù)組循環(huán)鋪設(shè)頁面, 把對(duì)象每個(gè)內(nèi)容顯示在單元格里

    準(zhǔn)備UseTable.vue – 準(zhǔn)備數(shù)據(jù)傳入給MyTable.vue使用

    components/06/MyTable.vue - 模板(直接復(fù)制)

    <template><div><table border="1"><thead><tr><th>序號(hào)</th><th>姓名</th><th>年齡</th><th>頭像</th></tr></thead><thead><tr><td></td><td></td><td></td><td></td></tr></thead></table></div> </template><script> export default {} </script>

    views/06_UseTable.vue - 準(zhǔn)備數(shù)據(jù), 傳入給MyTable.vue組件里循環(huán)使用

    list: [{name: "小傳同學(xué)",age: 18,headImgUrl:"http://yun.itheima.com/Upload/./Images/20210303/603f2d2153241.jpg",},{name: "小黑同學(xué)",age: 25,headImgUrl:"http://yun.itheima.com/Upload/./Images/20210304/6040b101a18ef.jpg",},{name: "智慧同學(xué)",age: 21,headImgUrl:"http://yun.itheima.com/Upload/./Images/20210302/603e0142e535f.jpg",}, ],

    例子: 我想要給td內(nèi)顯示圖片, 需要傳入自定義的img標(biāo)簽

    正確做法:

    ? 在MyTable.vue的td中準(zhǔn)備占位, 但是外面需要把圖片地址賦予給src屬性,所以在slot上把obj數(shù)據(jù)綁定

    components/06/MyTable.vue - 正確代碼

    <template><div><table border="1"><thead><tr><th>序號(hào)</th><th>姓名</th><th>年齡</th><th>頭像</th></tr></thead><tbody><tr v-for="(obj, index) in arr" :key="index"><td>{{ index + 1 }}</td><td>{{ obj.name }}</td><td>{{ obj.age }}</td><td><slot :row="obj"><!-- 默認(rèn)值給上,如果使用組件不自定義標(biāo)簽顯示默認(rèn)文字 -->{{ obj.headImgUrl}}</slot></td></tr></tbody></table></div> </template><script> export default {props: {arr: Array} } </script>

    ? 在UseTable使用MyTable的時(shí)候, template上v-slot綁定變量, 傳入img組件設(shè)置圖片地址

    <template><div><MyTable :arr="list"></MyTable><MyTable :arr="list"><!-- scope: {row: obj} --><template v-slot="scope"><a :href="scope.row.headImgUrl">{{ scope.row.headImgUrl }}</a></template></MyTable><MyTable :arr="list"><template v-slot="scope"><img style="width: 100px;" :src="scope.row.headImgUrl" alt=""></template></MyTable></div> </template><script> import MyTable from "../components/06/MyTable"; export default {components: {MyTable,},data() {return {list: [{name: "小傳同學(xué)",age: 18,headImgUrl:"http://yun.itheima.com/Upload/./Images/20210303/603f2d2153241.jpg",},{name: "小黑同學(xué)",age: 25,headImgUrl:"http://yun.itheima.com/Upload/./Images/20210304/6040b101a18ef.jpg",},{name: "智慧同學(xué)",age: 21,headImgUrl:"http://yun.itheima.com/Upload/./Images/20210302/603e0142e535f.jpg",},],};}, }; </script><style> </style>

    總結(jié): 插槽可以自定義標(biāo)簽, 作用域插槽可以把組件內(nèi)的值取出來自定義內(nèi)容

    2. 自定義指令

    自定義指令文檔

    除了核心功能默認(rèn)內(nèi)置的指令 (v-model 和 v-show),Vue 也允許注冊(cè)自定義指令。 v-xxx

    html+css的復(fù)用的主要形式是組件

    你需要對(duì)普通 DOM 元素進(jìn)行底層操作,這時(shí)候就會(huì)用到自定義指令

    2.0 自定義指令-注冊(cè)

    目標(biāo): 獲取標(biāo)簽, 擴(kuò)展額外的功能

    局部注冊(cè)和使用

    07_UseDirective.vue - 只能在當(dāng)前組件.vue文件中使用

    <template><div><!-- <input type="text" v-gfocus> --><input type="text" v-focus></div> </template><script> // 目標(biāo): 創(chuàng)建 "自定義指令", 讓輸入框自動(dòng)聚焦 // 1. 創(chuàng)建自定義指令 // 全局 / 局部 // 2. 在標(biāo)簽上使用自定義指令 v-指令名 // 注意: // inserted方法 - 指令所在標(biāo)簽, 被插入到網(wǎng)頁上觸發(fā)(一次) // update方法 - 指令對(duì)應(yīng)數(shù)據(jù)/標(biāo)簽更新時(shí), 此方法執(zhí)行 export default {data(){return {colorStr: 'red'}},directives: {focus: {inserted(el){el.focus()}}} } </script><style></style>

    全局注冊(cè)

    在main.js用 Vue.directive()方法來進(jìn)行注冊(cè), 以后隨便哪個(gè).vue文件里都可以直接用v-fofo指令

    // 全局指令 - 到處"直接"使用 Vue.directive("gfocus", {inserted(el) {el.focus() // 觸發(fā)標(biāo)簽的事件方法} })

    總結(jié): 全局注冊(cè)自定義指令, 哪里都能用, 局部注冊(cè), 只能在當(dāng)前vue文件里用

    2.1 自定義指令-傳值

    目標(biāo): 使用自定義指令, 傳入一個(gè)值

    需求: 定義color指令-傳入一個(gè)顏色, 給標(biāo)簽設(shè)置文字顏色

    main.js定義處修改一下

    // 目標(biāo): 自定義指令傳值 Vue.directive('color', {inserted(el, binding) {el.style.color = binding.value},update(el, binding) {el.style.color = binding.value} })

    Direct.vue處更改一下

    <p v-color="colorStr" @click="changeColor">修改文字顏色</p><script>data() {return {theColor: "red",};},methods: {changeColor() {this.theColor = 'blue';},}, </script>

    總結(jié): v-xxx, 自定義指令, 獲取原生DOM, 自定義操作

    3. 案例-tabbar

    完成如下案例和各步功能

    知識(shí)點(diǎn):

    • 組件封裝
    • 動(dòng)態(tài)組件
    • keep-alive
    • 作用域插槽
    • 自定義指令

    3.0 案例-tabbar-初始化項(xiàng)目

    目標(biāo): 創(chuàng)建項(xiàng)目文件夾, 引入字體圖標(biāo), 下載bootstrap, less, less-loader@5.0.0 axios, 在App.vue注冊(cè)組件

    • 需求: 從0新建項(xiàng)目, 拆分組件, 創(chuàng)建使用

    組件分析:

    • 組件拆分:

      • MyHeader.vue – 復(fù)用之前的
      • MyTabBar.vue – 底部導(dǎo)航
      • MyTable.vue – 封裝表格
    • 三個(gè)頁面

      • -MyGoodsList.vue – 商品頁
      • MyGoodsSearch.vue – 搜索頁
      • -MyUserInfo.vue – 用戶信息頁

    思路分析:

    ? ①: vue create tabbar-demo

    ? ②: yarn add less less-loader@5.0.0 -D

    ? ③: yarn add bootstrap axios 并在main.js 引入和全局屬性

    ? ④: 根據(jù)需求-創(chuàng)建需要的頁面組件

    ? ⑤: 把昨天購物車案例-封裝的MyHeader.vue文件復(fù)制過來復(fù)用

    ? ⑥: 從App.vue – 引入組織相關(guān)標(biāo)簽

    新建工程:

    vue create tabbar-demo yarn add less less-loader@5.0.0 -D yarn add bootstrap axios

    在main.js中引入bootStrap.css和字體圖標(biāo)樣式

    import "bootstrap/dist/css/bootstrap.css" import "./assets/fonts/iconfont.css"

    創(chuàng)建/復(fù)制如下文件

    從昨天案例中-直接復(fù)制過來components/MyHeader.vue

    components/MyTabBar.vue

    views/MyGoodsList.vue

    views/MyGoodsSearch.vue

    views/MyUserInfo.vue

    components/MyTable.vue

    3.1 案例-tabbar-底部封裝

    目標(biāo): 實(shí)現(xiàn)MyTabBar.vue組件

    • 需求: 把底部導(dǎo)航也靈活封裝起來

    分析:

    ? ①: 基本標(biāo)簽+樣式(md里復(fù)制)

    ? ②: 為tabbar組件指定數(shù)據(jù)源

    ? ③: 數(shù)據(jù)源最少2個(gè), 最多5個(gè)(validator)

    ? ④: 從App.vue給MyTabBar.vue傳入底部導(dǎo)航的數(shù)據(jù)

    ? ⑤: MyTabBar.vue中循環(huán)展示

    App.vue-數(shù)組準(zhǔn)備

    tabList: [{iconText: "icon-shangpinliebiao",text: "商品列表",componentName: "MyGoodsList"},{iconText: "icon-sousuo",text: "商品搜索",componentName: "MyGoodsSearch"},{iconText: "icon-user",text: "我的信息",componentName: "MyUserInfo"} ]

    MyTabBar.vue - 標(biāo)簽?zāi)0?/p> <template><div class="my-tab-bar"><div class="tab-item"><!-- 圖標(biāo) --><span class="iconfont"></span><!-- 文字 --><span></span></div></div> </template><script> export default {} </script><style lang="less" scoped> .my-tab-bar {position: fixed;left: 0;bottom: 0;width: 100%;height: 50px;border-top: 1px solid #ccc;display: flex;justify-content: space-around;align-items: center;background-color: white;.tab-item {display: flex;flex-direction: column;align-items: center;} }.current {color: #1d7bff; } </style>

    MyTabBar.vue正確代碼(不可復(fù)制)

    <template><div class="my-tab-bar"><divclass="tab-item"v-for="(obj, index) in arr":key="index"><!-- 圖標(biāo) --><span class="iconfont" :class="obj.iconText"></span><!-- 文字 --><span>{{ obj.text }}</span></div></div> </template><script> export default {props: {arr: {type: Array,required: true,// 自定義校驗(yàn)規(guī)則validator(value) {// value就是接到數(shù)組if (value.length >= 2 && value.length <= 5) {return true; // 符合條件就return true} else {console.error("數(shù)據(jù)源必須在2-5項(xiàng)");return false;}},},} }; </script>

    不要忘了把tabList數(shù)組從App.vue -> MyTabBar.vue

    3.2 案例-tabbar-底部高亮

    目標(biāo): 點(diǎn)擊底部導(dǎo)航實(shí)現(xiàn)高亮效果

    • 需求: 點(diǎn)擊底部實(shí)現(xiàn)高亮效果

    分析:

    ? ①: 綁定點(diǎn)擊事件, 獲取點(diǎn)擊的索引

    ? ②: 循環(huán)的標(biāo)簽設(shè)置動(dòng)態(tài)class, 遍歷的索引, 和點(diǎn)擊保存的索引比較, 相同則高亮

    效果演示:

    MyTabBar.vue(正確代碼)

    <template><div class="my-tab-bar"><div class="tab-item" v-for="(obj, index) in arr" :key="index":class="{current: activeIndex === index}"@click="activeIndex = index"><!-- 圖標(biāo) --><span class="iconfont" :class="obj.iconText"></span><!-- 文字 --><span>{{ obj.text }}</span></div></div> </template><script> export default {data(){return {activeIndex: 0 // 高亮元素下標(biāo)}},// ....其他代碼 }; </script>

    3.3 案例-tabbar-組件切換

    目的: 點(diǎn)擊底部導(dǎo)航, 切換頁面組件顯示

    需求: 點(diǎn)擊底部切換組件

    分析:

    ? ①: 底部導(dǎo)航傳出動(dòng)態(tài)組件名字符串到App.vue

    ? ②: 切換動(dòng)態(tài)組件is屬性的值為要顯示的組件名

    效果演示:

    補(bǔ)充: 給內(nèi)容div.app- 設(shè)置上下內(nèi)邊距

    App.vue - 引入并注冊(cè)

    <template><div><MyHeader:background="'blue'":fontColor="'white'"title="TabBar案例"></MyHeader><div class="main"><component :is="comName"></component></div><MyTabBar :arr="tabList"@changeCom="changeComFn"></MyTabBar></div> </template><script> import MyHeader from "./components/MyHeader"; // 目標(biāo): 完成底部封裝 // 1. MyTabBar.vue 組件標(biāo)簽+樣式 準(zhǔn)備 // 2. 字體圖標(biāo)引入 // 3. 準(zhǔn)備底部數(shù)據(jù) // 4. 使用MyTabBar組件, 傳入數(shù)據(jù)(父->子), 循環(huán)產(chǎn)生底部導(dǎo)航 // 5. 子組件內(nèi)props自定義檢驗(yàn)規(guī)則(2-5項(xiàng)) // 6. 子組件內(nèi)循環(huán)產(chǎn)生底部導(dǎo)航 import MyTabBar from './components/MyTabBar'// 目標(biāo): 切換組件顯示 // 1. 創(chuàng)建組件 - 編寫內(nèi)容 // 2. 引入App.vue注冊(cè) // 3. 掛載點(diǎn)設(shè)置is // 4. 切換comName的值(重要) // 5. 底部導(dǎo)航點(diǎn)擊- MyTabBar.vue里 // 子 -> 父技術(shù) (傳要切換的組件名出來)import MyGoodsList from './views/MyGoodsList' import MyGoodsSearch from './views/MyGoodsSearch' import MyUserInfo from './views/MyUserInfo' export default {data() {return {comName: "MyGoodsList", // 默認(rèn)顯示的組件tabList: [ // 底部導(dǎo)航的數(shù)據(jù){iconText: "icon-shangpinliebiao",text: "商品列表",componentName: "MyGoodsList",},{iconText: "icon-sousuo",text: "商品搜索",componentName: "MyGoodsSearch",},{iconText: "icon-user",text: "我的信息",componentName: "MyUserInfo",},],};},components: {MyHeader,MyTabBar,MyGoodsList,MyGoodsSearch,MyUserInfo},methods: {changeComFn(cName){this.comName = cName; // MyTabBar里選出來的組件名賦予給is屬性的comName// 導(dǎo)致組件的切換}} }; </script><style scoped> .main{padding-top: 45px;padding-bottom: 51px; } </style>

    MyTabBar.vue - 點(diǎn)擊傳遞過來組件名

    methods: {btn(index, theObj) {this.selIndex = index; // 點(diǎn)誰, 就把誰的索引值保存起來this.$emit("changeCom", theObj.componentName); // 要切換的組件名傳App.vue},},

    3.4 案例-tabbar-商品列表

    目標(biāo): 為MyGoodsList頁面, 準(zhǔn)備表格組件MyTable.vue-鋪設(shè)展示數(shù)據(jù)

    • 需求: 商品列表鋪設(shè)頁面

    分析:

    ? ①: 封裝MyTable.vue – 準(zhǔn)備標(biāo)簽和樣式

    ? ②: axios在MyGoodsList.vue請(qǐng)求數(shù)據(jù)回來

    ? ③: 請(qǐng)求地址: https://www.escook.cn/api/goods

    ? ④: 傳入MyTable.vue中循環(huán)數(shù)據(jù)顯示

    ? ⑤: 給刪除按鈕添加bootstrap的樣式: btn btn-danger btn-sm

    效果演示:

    MyTable.vue - 準(zhǔn)備table整個(gè)表格標(biāo)簽和樣式(可復(fù)制)

    <template><table class="table table-bordered table-stripped"><!-- 表格標(biāo)題區(qū)域 --><thead><tr><th>#</th><th>商品名稱</th><th>價(jià)格</th><th>標(biāo)簽</th><th>操作</th></tr></thead><!-- 表格主體區(qū)域 --><tbody><tr ><td>1</td><td>商品</td><td>998</td><td>xxx</td><td>xxx</td></tr></tbody></table> </template><script> export default {name: 'MyTable' } </script><style scoped lang="less"> .my-goods-list {.badge {margin-right: 5px;} } </style>

    使用axios請(qǐng)求數(shù)據(jù), 把表格頁面鋪設(shè)出來

    main.js - 注冊(cè)axios配置默認(rèn)地址

    import axios from "axios"; axios.defaults.baseURL = "https://www.escook.cn";

    MyGoodsList.vue - 使用axios請(qǐng)求數(shù)據(jù), 把數(shù)據(jù)傳入給MyTable.vue里循環(huán)鋪設(shè)

    <template><div><MyTable :arr="list"></MyTable></div> </template><script> import MyTable from "../components/MyTable"; import axios from "axios"; axios.defaults.baseURL = "https://www.escook.cn"; // 目標(biāo): 循環(huán)商品列表表格 // 1. 封裝MyTable.vue 整體表格組件-一套標(biāo)簽和樣式 // 2. axios請(qǐng)求數(shù)據(jù) // 3. 傳入MyTable組件里循環(huán)tr顯示數(shù)據(jù)// 目標(biāo): 展示tags標(biāo)簽 // 1. tags數(shù)組 - 某個(gè)td循環(huán)span使用文字 // 2. span設(shè)置bs的樣式// 目標(biāo): 刪除數(shù)據(jù) // 1. 刪除按鈕 - 點(diǎn)擊事件 // 2. 作用域插槽把索引值關(guān)聯(lián)出來了 // scope身上就有row和index // 3. 刪除中使用scope.index的索引值 // 4. 刪除事件里刪除數(shù)組里對(duì)應(yīng)索引值的數(shù)據(jù) export default {components: {MyTable,},data() {return {list: [] // 所有數(shù)據(jù)};},created() {axios({url: "/api/goods",}).then((res) => {console.log(res);this.list = res.data.data;});} }; </script>

    MyTable.vue里正確代碼(不可復(fù)制)

    <template><table class="table table-bordered table-stripped"><!-- 表格標(biāo)題區(qū)域 --><thead><tr><th>#</th><th>商品名稱</th><th>價(jià)格</th><th>標(biāo)簽</th><th>操作</th></tr></thead><!-- 表格主體區(qū)域 --><tbody><tr v-for="(obj, index) in arr":key="obj.id"><td>{{ obj.id }}</td><td>{{ obj.goods_name }}</td><td>{{ obj.goods_price }}</td><td>{{ obj.tags }}</td><td><button class="btn btn-danger btn-sm">刪除</button></td></tr></tbody></table> </template><script> export default {name: 'MyTable',props: {arr: Array} } </script><style scoped lang="less"> .my-goods-list {.badge {margin-right: 5px;} } </style>

    3.5_案例-tabbar-商品表格-插槽

    目標(biāo): 使用插槽技術(shù), 和作用域插槽技術(shù), 給MyTable.vue組件, 自定義列標(biāo)題, 自定義表格內(nèi)容

    • 需求: 允許用戶自定義表格頭和表格單元格內(nèi)容

    分析:

    ? ①: 把MyTable.vue里準(zhǔn)備slot

    ? ②: 使用MyTable組件時(shí)傳入具體標(biāo)簽

    步驟:

  • 提高組件復(fù)用性和靈活性, 把表格列標(biāo)題thead部分預(yù)留標(biāo)簽, 設(shè)置name屬性
  • 使用MyTable.vue時(shí), 傳入列標(biāo)題標(biāo)簽
  • 表格內(nèi)容td部分也可以讓組件使用者自定義, 也給tbody下tr內(nèi)留好標(biāo)簽和name屬性名
  • 使用插槽需要用到插槽內(nèi)的obj對(duì)象上的數(shù)據(jù), 使用作用域插槽技術(shù)
  • MyTable.vue - 留好具名插槽

    <template><table class="table table-bordered table-stripped"><!-- 表格標(biāo)題區(qū)域 --><thead><tr><!-- <th>#</th><th>商品名稱</th><th>價(jià)格</th><th>標(biāo)簽</th><th>操作</th> --><slot name="header"></slot></tr></thead><!-- 表格主體區(qū)域 --><tbody><tr v-for="(obj, index) in arr":key="obj.id"><!-- <td>{{ obj.id }}</td><td>{{ obj.goods_name }}</td><td>{{ obj.goods_price }}</td><td>{{ obj.tags }}</td><td><button class="btn btn-danger btn-sm">刪除</button></td> --><slot name="body" :row="obj" :index="index"></slot></tr></tbody></table> </template><script> export default {name: 'MyTable',props: {arr: Array} } </script>

    MyGoodsList.vue 使用

    <template><div><MyTable :arr="list"><template #header><th>#</th><th>商品名稱</th><th>價(jià)格</th><th>標(biāo)簽</th><th>操作</th></template><!-- scope的值: {row: obj, index: 索引值} --><template #body="scope"><td>{{ scope.row.id }}</td><td>{{ scope.row.goods_name }}</td><td>{{ scope.row.goods_price }}</td><td>{{ scope.row.tags }}</td><td><button class="btn btn-danger btn-sm">刪除</button></td></template></MyTable></div> </template><script> import MyTable from "../components/MyTable"; import axios from "axios"; axios.defaults.baseURL = "https://www.escook.cn"; // 目標(biāo): 循環(huán)商品列表表格 // 1. 封裝MyTable.vue 整體表格組件-一套標(biāo)簽和樣式 // 2. axios請(qǐng)求數(shù)據(jù) // 3. 傳入MyTable組件里循環(huán)tr顯示數(shù)據(jù)// 目標(biāo): 展示tags標(biāo)簽 // 1. tags數(shù)組 - 某個(gè)td循環(huán)span使用文字 // 2. span設(shè)置bs的樣式// 目標(biāo): 刪除數(shù)據(jù) // 1. 刪除按鈕 - 點(diǎn)擊事件 // 2. 作用域插槽把索引值關(guān)聯(lián)出來了 // scope身上就有row和index // 3. 刪除中使用scope.index的索引值 // 4. 刪除事件里刪除數(shù)組里對(duì)應(yīng)索引值的數(shù)據(jù) export default {components: {MyTable,},data() {return {list: [] // 所有數(shù)據(jù)};},created() {axios({url: "/api/goods",}).then((res) => {console.log(res);this.list = res.data.data;});} }; </script><style> </style>

    3.6 案例-tabbar-商品表格-tags微標(biāo)

    目標(biāo): 把單元格里的標(biāo)簽, tags徽章鋪設(shè)下

    • 需求: 標(biāo)簽列自定義顯示

    分析:

    ? ①: 插槽里傳入的td單元格

    ? ②: 自定義span標(biāo)簽的循環(huán)展示-給予樣式

    效果演示:

    bootstrap徽章: https://v4.bootcss.com/docs/components/badge/

    MyGoodsList.vue - 插槽

    <span v-for="(str, ind) in scope.row.tags" :key="ind"class="badge badge-warning">{{ str }} </span>

    下面額外添加樣式

    <style lang="less" scoped> .my-goods-list {.badge {margin-right: 5px;} } </style>

    3.7 案例-tabbar-商品表格-刪除功能

    目標(biāo): 點(diǎn)擊刪除對(duì)應(yīng)這條數(shù)據(jù)

    • 需求: 點(diǎn)擊刪除按鈕刪除數(shù)據(jù)

    分析:

    ? ①: 刪除按鈕綁定點(diǎn)擊事件

    ? ②: 作用域插槽綁定id值出來

    ? ③: 傳給刪除方法, 刪除MyGoodsList.vue里數(shù)組里數(shù)據(jù)

    效果演示

    提示: id在MyTable.vue里, 但是MyGoodsList.vue里要使用, 而且在插槽位置, 使用作用域插槽已經(jīng)把整個(gè)obj對(duì)象(包含id)帶出來了

    MyTable.vue

    <slot name="body" :row="obj"></slot>
  • MyGoodsList.vue - 注冊(cè)點(diǎn)擊事件
  • <button class="btn btn-danger btn-sm"@click="removeBtn(scope.row.id)">刪除</button>

    ? 2. my-goods-list.vue 根據(jù) id 刪除

    removeBtn(id){let index = this.list.findIndex(obj => obj.id === id)this.list.splice(index, 1) },

    3.8 案例-tabbar-添加tab

    目標(biāo): 實(shí)現(xiàn)點(diǎn)擊tab按鈕, 出現(xiàn)輸入框自動(dòng)獲取焦點(diǎn), 失去焦點(diǎn)關(guān)閉input, 回車新增tag, esc清空內(nèi)容

    • 需求1: 點(diǎn)擊Tab, 按鈕消失, 輸入框出現(xiàn)
    • 需求2: 輸入框自動(dòng)聚焦
    • 需求3: 失去焦點(diǎn), 輸入框消失, 按鈕出
    • 需求4: 監(jiān)測(cè)input回車, 無數(shù)據(jù)攔截
    • 需求5: 監(jiān)測(cè)input取消, 清空數(shù)據(jù)
    • 需求6: 監(jiān)測(cè)input回車, 有數(shù)據(jù)添加

    效果目標(biāo):

    3.8.0 點(diǎn)擊按鈕消失, 輸入框出現(xiàn)

    MyGoodsList.vue - 標(biāo)簽位置添加

    注意: 每個(gè)tab按鈕和input都是獨(dú)立變量控制, 那么直接在row身上的屬性控制即可

    <inputclass="tag-input form-control"style="width: 100px;"type="text"v-if="scope.row.inputVisible"/><button v-else style="display: block;" class="btn btn-primary btn-sm add-tag"@click="scope.row.inputVisible = true">+Tag</button>

    3.8.1 input自動(dòng)獲取焦點(diǎn)

    main.js - 定義全局自定義指令

    // 全局指令 Vue.directive("focus", {inserted(el){el.focus()} })

    MyGoodsList.vue - 使用 v-focus指令

    3.8.2 input失去焦點(diǎn)關(guān)閉input

    監(jiān)聽input失去焦點(diǎn)事件, 讓input消失

    @blur="scope.row.inputVisible = false"

    3.8.3 input回車新增tag

    監(jiān)聽input的回車事件, 如果無數(shù)據(jù)攔截代碼

    @keydown.enter="enterFn(scope.row)"

    事件處理函數(shù)

    enterFn(obj){ // 回車// console.log(obj.inputValue);if (obj.inputValue.trim().length === 0) {alert('請(qǐng)輸入數(shù)據(jù)')return}obj.tags.push(obj.inputValue) // 表單里的字符串狀態(tài)tags數(shù)組obj.inputValue = "" }

    3.8.4 input框esc清空內(nèi)容

    @keydown.esc="scope.row.inputValue = ''"

    今日總結(jié)

  • 動(dòng)態(tài)組件的使用步驟
  • 組件緩存使用步驟和作用
  • 組件插槽默認(rèn)使用
  • 插槽默認(rèn)顯示的內(nèi)容
  • 多個(gè)插槽時(shí), 具名插槽如何使用
  • 作用域插槽如何使用以及目的
  • 自定義命令如何使用
  • 跟隨視頻完成tabbar案例
  • 面試題

    1. vue中solt的使用方式,以及solt作用域插槽的用法

    使用方式:當(dāng)組件當(dāng)做標(biāo)簽進(jìn)行使用的時(shí)候,用slot可以用來接受組件標(biāo)簽包裹的內(nèi)容,當(dāng)給solt標(biāo)簽添加name屬性的 時(shí)候,可以調(diào)換響應(yīng)的位置
    (高級(jí)用法) 插槽作用域: 當(dāng)傳遞的不是單一的標(biāo)簽, 例如需要循環(huán)時(shí), 把要循環(huán)的標(biāo)簽傳入, 組件內(nèi)使用v-for在slot標(biāo)簽上, 內(nèi)部可以v-bind:把值傳出來, 再外面把值賦予進(jìn)去, 看示例

    <current-user><template v-slot:default="slotProps">{{ slotProps.user.firstName }}</template> </current-user>// current-user組件, user屬性和值, 綁定給slotProps上 <span><slot v-bind:user="user">{{ user.lastName }}</slot> </span>

    擴(kuò)展閱讀: https://cn.vuejs.org/v2/guide/components-slots.html (了解即可, 一般用不上)

    2. 跟keep-alive有關(guān)的生命周期是哪些?(必會(huì))

    ? 1**)前言:**在開發(fā)Vue項(xiàng)目的時(shí)候,大部分組件是沒必要多次渲染的,所以Vue提供了一個(gè)內(nèi)置組件keep-alive來緩存組件內(nèi)部狀態(tài),避免重新渲染,在開發(fā)Vue項(xiàng)目的時(shí)候,大部分組件是沒必要多次渲染的,所以Vue提供了一個(gè)內(nèi)置組件keep-alive來緩存組件內(nèi)部狀態(tài),避免重新渲染

    ? 2**)生命周期函數(shù):**在被keep-alive包含的組件/路由中,會(huì)多出兩個(gè)生命周期的鉤子:activated 與 deactivated。

    ? 1**、activated鉤子:**在在組件第一次渲染時(shí)會(huì)被調(diào)用,之后在每次緩存組件被激活時(shí)調(diào)用。

    ? 2**、Activated鉤子調(diào)用時(shí)機(jī):** 第一次進(jìn)入緩存路由/組件,在mounted后面,beforeRouteEnter守衛(wèi)傳給 next 的回調(diào)函數(shù)之前調(diào)用,并且給因?yàn)榻M件被緩存了,再次進(jìn)入緩存路由、組件時(shí),不會(huì)觸發(fā)這些鉤子函數(shù),beforeCreate created beforeMount mounted 都不會(huì)觸發(fā)

    ? 1**、deactivated鉤子:**組件被停用(離開路由)時(shí)調(diào)用。

    ? 2**、deactivated鉤子調(diào)用時(shí)機(jī)**:使用keep-alive就不會(huì)調(diào)用beforeDestroy(組件銷毀前鉤子)和destroyed(組件銷毀),因?yàn)榻M件沒被銷毀,被緩存起來了,這個(gè)鉤子可以看作beforeDestroy的替代,如果你緩存了組件,要在組件銷毀的的時(shí)候做一些事情,可以放在這個(gè)鉤子里,組件內(nèi)的離開當(dāng)前路由鉤子beforeRouteLeave => 路由前置守衛(wèi) beforeEach =>全局后置鉤子afterEach => deactivated 離開緩存組件 => activated 進(jìn)入緩存組件(如果你進(jìn)入的也是緩存路由)

    3. 自定義指令(v-check、v-focus)的方法有哪些?它有哪些鉤子函數(shù)?還有哪些鉤子函數(shù)參數(shù)?(必會(huì))

    ? 全局定義指令:在vue對(duì)象的directive方法里面有兩個(gè)參數(shù),一個(gè)是指令名稱,另外一個(gè)是函數(shù)。組件內(nèi)定義指令:directives

    ? 鉤子函數(shù):bind(綁定事件觸發(fā))、inserted(節(jié)點(diǎn)插入的時(shí)候觸發(fā))、update(組件內(nèi)相關(guān)更新)

    ? 鉤子函數(shù)參數(shù):el、binding

    4. is這個(gè)特性你有用過嗎?主要用在哪些方面?(高薪常問)

    ? 1**)動(dòng)態(tài)組件**

    ? , componentName可以是在本頁面已經(jīng)注冊(cè)的局部組件名和全局組件名,也可以是一個(gè)組件的選項(xiàng)對(duì)象。 當(dāng)控制componentName改變時(shí)就可以動(dòng)態(tài)切換選擇組件。

    ? 2**)is的用法**

    ? 有些HTML元素,諸如 <ul><ol><table><select>,對(duì)于哪些元素可以出現(xiàn)在其內(nèi)部是有嚴(yán)格限制的。? 而有些HTML元素,諸如 <li><tr><option>,只能出現(xiàn)在其它某些特定的元素內(nèi)部。 ? <ul>? <card-list></card-list>? </ul>

    ? 所以上面會(huì)被作為無效的內(nèi)容提升到外部,并導(dǎo)致最終渲染結(jié)果出錯(cuò)。應(yīng)該這么寫:

    ? <ul>? <li is="cardList"></li>? </ul>

    總結(jié)

    以上是生活随笔為你收集整理的Vue自定义指令原来这么简单的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    99re视频在线观看 | 国产精品一区二区久久国产 | 久久精品国产第一区二区三区 | 国产在线播放一区二区三区 | 福利视频第一页 | 成人久久精品 | 91九色网站 | 成人少妇影院yyyy | 国产精品欧美久久久久久 | 久久久国产精品视频 | 亚洲综合在线发布 | 久久久一本精品99久久精品 | 亚洲人人av | 最新av在线播放 | 国产精品久久久电影 | 日韩精品一区二区三区第95 | 精品久久久久久亚洲综合网 | 久久久久久久久久久免费视频 | 91麻豆精品国产91久久久无限制版 | 色播五月激情五月 | 国产主播大尺度精品福利免费 | 欧美激情在线看 | 亚洲黄色在线观看 | 精品国产免费观看 | 国语麻豆| 久草在线高清视频 | 樱空桃av| 国产精品美女久久久久久 | 亚洲永久精品国产 | 精品国产精品久久一区免费式 | 国产精品嫩草影院9 | 九九在线高清精品视频 | 激情婷婷欧美 | 一 级 黄 色 片免费看的 | 久久久久中文 | 91视频免费观看 | 中文字幕av一区二区三区四区 | 日韩二区在线播放 | 九九九热精品免费视频观看 | 97超碰在线久草超碰在线观看 | 久久都是精品 | av中文字幕av | 欧美亚洲国产精品久久高清浪潮 | 国产视频中文字幕在线观看 | 91综合视频在线观看 | 不卡的av电影在线观看 | 久视频在线| 亚洲国产黄色片 | 国产一区视频免费在线观看 | 久久99深爱久久99精品 | 国产糖心vlog在线观看 | 综合伊人久久 | 成人精品一区二区三区电影免费 | 免费网站看v片在线a | 精品国产免费看 | 在线观看视频色 | 黄色小网站免费看 | 中文av一区二区 | 99精品乱码国产在线观看 | 国产白浆视频 | 日韩二级毛片 | 婷婷丁香五 | 91传媒免费在线观看 | 欧美孕妇与黑人孕交 | 国产日韩在线看 | 69av网| 美女在线免费观看视频 | 夜夜躁狠狠燥 | 在线日韩精品视频 | 天天插天天爱 | 亚洲国产小视频在线观看 | 免费一级特黄录像 | 18久久久| 欧美性做爰猛烈叫床潮 | 在线观看岛国av | 国产一区二区不卡视频 | 亚洲激情小视频 | 国产在线va | 国产福利在线 | 欧美片一区二区三区 | 不卡的一区二区三区 | 日韩av三区 | 亚洲国产一区二区精品专区 | 毛片网站观看 | 激情欧美一区二区三区免费看 | 国产一区二区三区四区在线 | 伊人色**天天综合婷婷 | 久久久久久久久久国产精品 | 久久专区| 久久国产经典 | 99久久久国产精品免费99 | 又黄又刺激的视频 | 91麻豆免费视频 | 四虎免费av | 国产一区欧美一区 | 四虎影视成人永久免费观看视频 | 日韩欧美国产免费播放 | 欧美成人xxxx | 在线看国产日韩 | 中文字幕不卡在线88 | 激情网综合 | 夜夜夜影院 | 青草草在线 | 麻豆一级视频 | 国产成人精品一区二区三区在线观看 | 91毛片在线观看 | 超碰在线97免费 | 国产一区二区三区免费观看视频 | 五月婷婷激情 | 国产精品资源在线 | a天堂中文在线 | 91桃色在线免费观看 | 激情综合久久 | 免费碰碰 | 成人久久久久久久久久 | 成人午夜电影网 | 人人要人人澡人人爽人人dvd | 丝袜美女在线观看 | 国语精品久久 | 久久99精品视频 | 日韩精品在线一区 | 午夜999| 久久国产精品免费视频 | 国产一线天在线观看 | 国产精品久久久久久欧美 | www.久久com | 色av色av色av | 精品久久久久久久久久久久久久久久久久 | 国产69久久 | 国产精品一区二区免费看 | 欧美日韩破处 | 国产精品成人aaaaa网站 | 欧美不卡在线 | 国产99久久久久 | 日本久久成人 | 一级性视频 | 天天爱天天操天天干 | 日韩二区三区 | 成年人看片 | 欧美日韩二区在线 | 亚洲 综合 专区 | 综合激情| 在线观看91精品国产网站 | 久久电影网站中文字幕 | 97在线视频观看 | 亚洲午夜久久久久久久久久久 | 99热手机在线 | 中文字幕高清在线播放 | 国内久久久久 | 丰满少妇在线观看网站 | 欧美一级淫片videoshd | 一区中文字幕在线观看 | 国产精品毛片一区视频播 | 国产欧美高清 | 久久成人精品电影 | www.久久99| 亚洲成年片 | 久久怡红院 | 国产精品久久 | 亚洲日韩精品欧美一区二区 | 亚洲人精品午夜 | 免费色视频网址 | av黄色在线观看 | 欧美爽爽爽 | 色狠狠综合 | 怡红院av久久久久久久 | 欧美日韩一区三区 | 性色在线视频 | 不卡电影免费在线播放一区 | 国产91影视| 国产无套精品久久久久久 | 亚洲最大在线视频 | 亚洲综合在 | 精油按摩av| 亚洲涩涩涩涩涩涩 | 婷婷丁香自拍 | 九九影视理伦片 | 亚洲一级影院 | 亚州性色| 97视频免费在线 | 日韩在线观看第一页 | 欧美日韩一区三区 | 亚洲日韩中文字幕 | 十八岁免进欧美 | 最近日本中文字幕a | 国产九九九视频 | 久久国产精品网站 | 曰韩精品| 国际精品久久 | 久草在线高清 | 毛片网在线播放 | 欧美日视频| 在线观看国产日韩 | 免费av在线播放 | 激情深爱 | 中文资源在线播放 | 在线观看中文字幕一区二区 | 国产精品久久久久久久av大片 | 亚洲国产丝袜在线观看 | 麻豆网站免费观看 | avsex| 亚洲精品男人的天堂 | 日韩精品播放 | 91在线精品视频 | 偷拍视频一区 | 激情婷婷六月 | 亚洲精品视频大全 | 国产黄视频在线观看 | 国产成人精品一区二区三区 | 欧美精品黑人性xxxx | 91亚洲夫妻| 国产不卡在线视频 | 在线看污网站 | 日韩一区二区三区观看 | 成人免费大片黄在线播放 | 日韩色一区二区三区 | 欧美日韩一区二区三区在线观看视频 | 久久综合国产伦精品免费 | 国产1级毛片 | 久久都是精品 | 在线免费视频a | 欧美日韩精品在线免费观看 | 日韩三级免费 | 成人av一区二区兰花在线播放 | 久久尤物电影视频在线观看 | 欧美另类重口 | 中文乱幕日产无线码1区 | 亚洲综合成人专区片 | 日韩性色| av电影av在线 | 国产这里只有精品 | 国内精品久久久久影院一蜜桃 | 最近日本中文字幕a | 天天操网址 | 日韩免费在线播放 | 91免费在线视频 | 99精品免费久久久久久久久日本 | 三级av在线播放 | 日韩欧美电影 | 色婷婷激情电影 | 国产一级做a爱片久久毛片a | 亚洲高清国产视频 | 日韩理论在线播放 | 日韩大片在线免费观看 | 99热精品在线观看 | 久久久999免费视频 日韩网站在线 | 国产资源免费 | 久久综合九色综合欧美狠狠 | 香蕉久久久久久久 | 99久久精品免费看国产一区二区三区 | 国产亚洲欧美精品久久久久久 | 亚洲欧美视频在线 | 色鬼综合网 | 中文字幕91视频 | 天天射天天干天天操 | 精品福利av | 91精品国产福利 | 高清不卡毛片 | 992tv成人免费看片 | 99国产在线 | 国内揄拍国内精品 | 免费麻豆网站 | 成人午夜电影在线播放 | 中文字幕亚洲综合久久五月天色无吗'' | 99精品国产免费久久久久久下载 | 97色婷婷人人爽人人 | 亚洲精品五月天 | 国产不卡视频在线播放 | 欧美成人日韩 | 久久久久久久久久伊人 | 99色在线观看视频 | 伊人色播| 日韩一级电影在线 | 最近日本中文字幕a | 黄色网址a | 色婷婷电影网 | 91麻豆精品国产91 | 欧美中文字幕第一页 | 97超视频 | 国产在线免费观看 | 一区二区中文字幕在线观看 | 免费合欢视频成人app | 国产99久久久精品 | 中文在线字幕观看电影 | 久久经典国产 | 亚洲精品免费在线视频 | 久久免费视频在线观看30 | 国产免费又粗又猛又爽 | 国产精品久久久久久久久久久久午夜 | 国产精品中文字幕在线播放 | 碰天天操天天 | 亚洲精品视频免费在线 | 亚洲国产网址 | 国际精品网 | 日本最新高清不卡中文字幕 | 国产最新在线 | 久久久精品久久日韩一区综合 | 99久久99久久免费精品蜜臀 | 久久欧美精品 | 91免费版成人 | 美女久久久久久久久久久 | 99视频+国产日韩欧美 | 伊人热| 久久久精品福利视频 | av色网站 | 国产精品久久久久三级 | 六月色播| 一级黄色在线免费观看 | 白丝av在线 | 五月天久久狠狠 | 婷婷丁香花 | 97免费在线观看视频 | 国产精品ⅴa有声小说 | 狠狠亚洲 | 亚洲国产精品电影在线观看 | 国产成人精品一区二区三区网站观看 | 蜜桃av人人夜夜澡人人爽 | 天天操天天插 | 天天射天天舔天天干 | 日韩在线观看一区二区三区 | avove黑丝 | 亚洲在线激情 | av成人免费在线看 | 911精品美国片911久久久 | 99久精品视频 | 亚洲精品www久久久久久 | 国产亚洲免费的视频看 | 久久草在线精品 | 亚洲最大av网站 | 美女久久视频 | 国产精品成久久久久三级 | 国产精品在线看 | 免费日韩三级 | 狠狠ri | 国产96在线视频 | 色网站国产精品 | 精品国自产在线观看 | wwwwww黄| 日韩高清免费在线 | 欧美精品乱码99久久影院 | 成人午夜影院在线观看 | 91传媒免费观看 | 国产中年夫妇高潮精品视频 | 国产一级大片在线观看 | 97电影院在线观看 | 久久久久伊人 | 日韩经典一区二区三区 | 黄色片视频免费 | 亚洲狠狠干| www日韩在线观看 | 黄色美女免费网站 | 日av免费| 精品国产一区二区三区四区vr | 日韩有码专区 | 精品国产免费看 | 日本久久久影视 | 国产精品久久久久久久毛片 | 808电影| 午夜精品av在线 | www.午夜视频 | 欧美日韩精品电影 | 黄色日本片 | 国内精品久久久久久中文字幕 | 最新国产精品亚洲 | www.99av| 91精选在线观看 | 国内精品久久久久影院男同志 | 久久精品一区二区三区中文字幕 | 久久夜视频 | www.久久免费 | 天天干.com| 成人福利在线 | 欧美黑人猛交 | 91成人蝌蚪 | 99久久精品网 | 精品视频一区在线观看 | 国内成人av| 国产成人精品综合久久久久99 | www.神马久久 | 免费看一级一片 | 中文字幕一区二区三区四区 | 国产日产欧美在线观看 | 国产精品扒开做爽爽的视频 | 亚洲精品国产区 | av片中文字幕 | 成人a在线| 网站在线观看你们懂的 | 日本久热 | 日韩精品在线免费播放 | 在线观看免费日韩 | 久久国产一区二区三区 | 精品福利网 | 国产一级电影在线 | 在线免费观看视频一区二区三区 | 国产永久免费 | av在观看 | 成人午夜剧场在线观看 | 99热99热| 激情喷水 | 免费看黄在线看 | 欧美极品裸体 | 国产一级二级在线观看 | 亚洲女同ⅹxx女同tv | 天天色综合1 | 国产成人免费高清 | 欧美日韩国产一区二 | 国产在线视频一区二区三区 | 日韩在线观看影院 | 日本三级全黄少妇三2023 | 久久精品99国产精品日本 | 人人干免费 | 99久久99久久精品国产片果冰 | 久草久草久草久草 | 色天天久久 | 91香蕉久久 | 91精品久久久久久 | 高清中文字幕 | 成年人在线观看视频免费 | av电影一区二区三区 | 久久国产精品色婷婷 | 日韩精品免费在线 | 黄色免费网站 | 天天操天天摸天天爽 | 午夜精品中文字幕 | 成人va在线观看 | 免费国产在线视频 | 欧美天天干| 五月天天色 | bbbbb女女女女女bbbbb国产 | 国内精品视频免费 | 亚洲婷婷综合色高清在线 | 99看视频在线观看 | 精品久久久一区二区 | 精品美女国产在线 | 在线观看成人av | 五月花激情| 超碰97人人干 | 色永久免费视频 | 色停停五月天 | 夜夜躁天天躁很躁波 | 日韩二区三区在线观看 | 国产成人精品区 | 中文字幕一区二区三区精华液 | 久操视频在线免费看 | av成人在线网站 | 国产美女在线观看 | 日韩欧美在线一区二区 | 亚洲国产高清在线观看视频 | 正在播放五月婷婷狠狠干 | 色999五月色| 欧美九九九 | 国产中文字幕国产 | 国产免费又爽又刺激在线观看 | 99精品国产在热久久下载 | 婷婷色吧 | 色婷丁香 | 激情丁香在线 | 国产 日韩 在线 亚洲 字幕 中文 | 91视频免费国产 | 久久精彩视频 | av先锋影音少妇 | 91亚洲精品久久久蜜桃 | 亚洲国产中文字幕在线观看 | 成人av片免费观看app下载 | 欧美91精品久久久久国产性生爱 | 国产一区影院 | 国产成人三级在线播放 | 国产精品在线看 | 久艹视频在线观看 | www在线免费观看 | 中文字幕丝袜制服 | 久久爱导航 | 91人人澡人人爽人人精品 | 欧美日韩裸体免费视频 | 二区中文字幕 | 国产伦精品一区二区三区在线 | 在线观看国产v片 | 午夜精品久久久久久久久久久久久久 | 日韩中文字幕亚洲一区二区va在线 | 最新精品国产 | 五月婷久 | 国产在线更新 | 国产黄色av | 婷婷开心久久网 | 亚洲丁香日韩 | 国产精品二区在线观看 | 亚洲精品玖玖玖av在线看 | 国产手机在线 | www.色的 | 久久视频免费在线观看 | 欧美在线视频一区二区 | 99精品视频在线免费观看 | 亚洲精品一区二区三区四区高清 | 一区二区三区免费在线观看 | 久久综合九色综合97_ 久久久 | 精品久久久久久久久久久久久 | 免费电影一区二区三区 | 国产日韩精品一区二区三区在线 | 精品免费观看 | 国产一区二区免费看 | 2019中文在线观看 | 国产一区二区在线播放 | 91大神在线观看视频 | 久久大片网站 | 91桃色在线观看视频 | 国产精品入口66mio女同 | 日日干天天插 | 999免费视频 | www久久久久 | 超碰在线官网 | 色偷偷网站视频 | 国产黄色av影视 | 911免费视频| 手机看片中文字幕 | 国产精品一区二区麻豆 | 美女视频黄在线观看 | av动图| 91在线看视频免费 | 婷婷午夜激情 | 国产精品99久久久久人中文网介绍 | 国产一级黄| 免费观看黄色av | 一区二区三区四区精品视频 | 狠狠色丁香| 99视频在线精品国自产拍免费观看 | 久久欧美综合 | 日韩欧美一区视频 | 成人久久久久久久久 | 日韩精品久久久久久久电影竹菊 | 人人爽人人爽人人片av | 精品国产伦一区二区三区 | 欧美精品久久久久久久久老牛影院 | 中文字幕久久精品 | 日韩午夜剧场 | 午夜视频不卡 | 3d黄动漫免费看 | 国产精品中文字幕av | 碰天天操天天 | 中文字幕在线免费观看视频 | 久久一及片 | 最新av在线网址 | 国产成人综合图片 | 91av中文字幕 | 成人小视频在线观看免费 | 国产成人精品一区二三区 | 欧美激情视频久久 | 欧美国产日韩激情 | 久久久亚洲国产精品麻豆综合天堂 | 一区二区精品在线 | 亚洲国产成人久久综合 | 色的网站在线观看 | 国产成人三级在线播放 | 精品久久久成人 | 91视频下载| 亚洲精品综合一区二区 | 成人av资源在线 | 亚洲精品国产精品国自产 | 成人av在线一区二区 | 中文字幕人成不卡一区 | 久久综合爱 | 又黄又爽的视频在线观看网站 | 亚洲 欧美 精品 | 亚洲专区欧美专区 | 91九色自拍 | 久久影院亚洲 | 9幺看片| 欧美一级性生活视频 | 日韩av在线一区二区 | 黄色一级片视频 | 91免费在线看片 | 国产精品一区二区久久精品爱涩 | 99久e精品热线免费 99国产精品久久久久久久久久 | 黄色软件视频大全免费下载 | 伊人天天| 蜜桃av综合网| 日韩成人高清在线 | 国产成人精品一区二 | 亚洲国产高清视频 | 国产精品一区二区久久精品爱微奶 | 久久久久久麻豆 | 97理论片| 成人在线黄色电影 | 日本三级吹潮在线 | 蜜臀av夜夜澡人人爽人人桃色 | 免费日韩 精品中文字幕视频在线 | 少妇性xxx| 999久久久免费视频 午夜国产在线观看 | 久久国产亚洲视频 | 天天添夜夜操 | 久久久久久久久久久福利 | 碰超在线观看 | 免费在线观看国产黄 | 在线观av | 亚洲欧美日韩精品久久奇米一区 | 日本中文字幕在线看 | 色婷婷视频在线 | 丁香花五月 | 激情综合亚洲精品 | 国产日韩欧美网站 | 久久久久久久网 | 一级黄色免费网站 | 久久综合偷偷噜噜噜色 | 97超在线 | www色| 五月丁香 | 超碰久热| 中文字幕在线观看完整 | 色黄视频免费观看 | 国产在线精品一区二区 | 欧美少妇xxx| 91福利视频免费 | 国产女人40精品一区毛片视频 | 操高跟美女| 精品91视频 | 亚洲视频一区二区三区在线观看 | 久久影视一区 | 国产一区欧美在线 | 国产成人精品亚洲日本在线观看 | 美女网站在线 | 日韩91精品 | 久久久久国产a免费观看rela | 综合视频在线 | 91精品国产亚洲 | 久久久视频在线 | 国产精品久久网 | 国产中文字幕三区 | 一级片免费视频 | 久久精品激情 | 日韩视频免费观看高清 | 国产精品美乳一区二区免费 | 欧洲av不卡| 亚洲japanese制服美女 | 500部大龄熟乱视频 欧美日本三级 | 国产美女精品久久久 | 天天操天天摸天天干 | 亚洲在线视频免费观看 | 欧美日韩电影在线播放 | 国产精品18久久久久久不卡孕妇 | 久久精品这里精品 | 午夜在线观看影院 | 国产最新福利 | 中文 一区二区 | 国产一区二区三区免费在线观看 | 久久亚洲福利 | 色婷婷激情电影 | 久久精品电影 | 日日夜夜爱 | 亚洲精品自拍视频在线观看 | 欧美日韩性视频 | 国产免费成人av | 日本中文字幕观看 | 亚洲无吗av| 欧美a级片免费看 | 国产小视频91 | 色.com| 黄色免费在线视频 | 色欧美88888久久久久久影院 | 人人爽人人乐 | 97电影网站 | 国产伦精品一区二区三区免费 | 夜夜狠狠 | 97超碰人人在线 | 91精品视频免费看 | 2023国产精品自产拍在线观看 | 九九热有精品 | 日韩精选在线观看 | 91麻豆传媒 | 国内一区二区视频 | 久久久久人人 | 一区二区三区四区不卡 | 久久久国产成人 | www.99在线观看 | 久久久2o19精品 | 免费欧美| 国产免费一区二区三区网站免费 | 99久久夜色精品国产亚洲 | 欧美一级激情 | 91爱爱电影 | 456免费视频 | www.日日操.com| 中文字幕丝袜美腿 | 91热在线 | 91香蕉久久| 欧美日韩中文字幕在线视频 | 久草a在线| 99精品在线看 | 最新中文字幕在线观看视频 | 天天色综合天天 | 国产区高清在线 | 婷婷丁香社区 | 精品人人爽 | 国内精品久久久久久久久久久 | 日日夜夜精品视频 | 欧美 日韩精品 | 成人羞羞视频在线观看免费 | 亚洲禁18久人片 | 亚洲春色综合另类校园电影 | 欧美一级视频一区 | 在线视频日韩一区 | 亚州精品一二三区 | 五月色综合 | 女人18片毛片90分钟 | 免费高清在线视频一区· | 色婷婷福利 | 日韩影视在线观看 | 国产成人性色生活片 | 青青久草在线视频 | 午夜天使 | av一区二区在线观看中文字幕 | 麻豆国产精品永久免费视频 | www.久热| 视频一区二区在线 | 人人精品 | 波多野结衣网址 | 免费观看黄色av | 欧美 日韩 国产 中文字幕 | 久久久久国产精品厨房 | 亚洲成人软件 | 久久视影| 黄色一级网 | 国产美女网站在线观看 | 黄色小说网站在线 | 国产国语在线 | 久久在线免费观看 | 久久婷婷激情 | 就要干b| 久久999精品| 日韩在线免费 | 国产特级毛片aaaaaa高清 | 久色免费视频 | 婷婷丁香激情网 | 综合天天网 | 国产在线精品一区 | 国产在线 一区二区三区 | 久久女教师 | 欧美日韩国产二区 | 日韩在线免费看 | 久久免费精品国产 | 久久夜色精品国产欧美乱极品 | 国产精品一区二区免费 | 久久久久久久久久影院 | 精品久久久影院 | 色资源二区在线视频 | 亚洲资源在线 | 日韩精品五月天 | av爱干 | 国内精自线一二区永久 | 久久成人资源 | 91麻豆操 | 日韩美女高潮 | 欧美日韩精品免费观看 | 人人射人人澡 | 美女视频永久黄网站免费观看国产 | 日本性生活一级片 | 狠狠色丁香婷婷综合久小说久 | 国产精品资源网 | 日日夜精品| 欧美日韩免费观看一区二区三区 | 色99导航 | 成人a在线观看 | 最近乱久中文字幕 | 久久永久免费 | 国产精品一区二区三区在线播放 | 成人国产精品电影 | 在线精品视频免费播放 | 亚洲精品乱码久久 | 在线观看91网站 | 区一区二区三区中文字幕 | 国产 一区二区三区 在线 | 日韩av播放在线 | 日韩精品一区二区三区电影 | 免费av网站在线看 | 午夜精品一区二区三区四区 | 国产精品免费在线播放 | 日韩精品视频在线观看网址 | 久久99热国产 | 精品一区二区免费在线观看 | 草久久av| av激情五月 | 日韩av高潮 | 欧美另类v | 国产成人一区二区精品非洲 | 国产精品久久久久久久久久直播 | 97操操操| 久久国语 | 成人播放器 | 国产视频97 | 日韩夜夜爽 | h动漫中文字幕 | 2019天天干天天色 | 亚洲精品国内 | 久久精精品| 亚洲天堂网在线播放 | 99久久99久久精品国产片果冰 | 国产精品观看在线亚洲人成网 | 麻豆视频在线观看 | 人人玩人人添人人澡97 | 人人涩| 国产精品白丝jk白祙 | 成年人视频在线观看免费 | 九九涩涩av台湾日本热热 | 91av资源在线 | 四虎在线视频免费观看 | 天天射色综合 | av一区二区三区在线播放 | 中文字幕欲求不满 | 天天色天天射天天操 | 中文字幕观看视频 | 国产成人精品不卡 | 国产传媒中文字幕 | 91精品婷婷国产综合久久蝌蚪 | 小草av在线播放 | 久久日韩精品 | 久久精品美女 | 美女视频黄,久久 | 国产小视频在线免费观看 | 国产精品高潮久久av | 欧美性生爱 | 开心色激情网 | 天干啦夜天干天干在线线 | 五月婷婷免费 | 伊人久久一区 | 91成人黄色| 在线91视频 | 日韩精品免费 | 97色综合 | 日韩av不卡播放 | 成人a级网站 | 91成人观看| 碰超在线观看 | 日韩久久久久 | 亚洲综合在线视频 | av在线专区| a特级毛片 | 久草免费在线观看视频 | 久久超级碰视频 | 精品视频网站 | 国产精品一区二区av日韩在线 | 国产丝袜网站 | 亚洲欧美日韩在线一区二区 | 久久艹免费 | 99国产视频在线 | 欧美99精品 | 亚洲自拍自偷 | 久久精品www人人爽人人 | 99re国产视频 | 日韩成人邪恶影片 | 亚洲黄色在线免费观看 | 天天草视频 | 国产四虎在线 | 丁香视频 | 91久久电影| 日韩和的一区二在线 | 免费看片成人 | 超碰官网 | 日韩精品一区二区在线观看 | 久久99精品一区二区三区三区 | 在线黄av | 日韩一级精品 | 91在线最新 | av高清不卡 | 久久久久久久久免费视频 | 欧美 亚洲 另类 激情 另类 | 爱情影院aqdy鲁丝片二区 | 午夜精品一区二区三区可下载 | 伊人色综合久久天天 | 国产天天爽 | 99精品视频在线观看免费 | 亚洲桃花综合 | 黄色网址a | 97免费公开视频 | 免费在线观看av电影 | 亚洲精品乱码久久久久久蜜桃欧美 | 国产精品久久久久久久av电影 | 草久在线 | 正在播放国产精品 | 最近在线中文字幕 | 51久久成人国产精品麻豆 | 日本最新中文字幕 | 日韩中文字幕第一页 | 国产91精品久久久久久 | 亚洲一区二区精品在线 | 91视频91蝌蚪| 在线观看日本高清mv视频 | 色狠狠狠 | 麻豆国产网站入口 | 国产精品美女在线观看 | a√资源在线 | 人人天天夜夜 | 伊人天天狠天天添日日拍 | 在线观看视频一区二区 | 青青草国产在线 | av免费电影网站 | 精品91久久久久 | 嫩小bbbb摸bbb摸bbb | 国产视频九色蝌蚪 | 色婷婷激情网 | 日韩av美女| 国产v在线观看 | 天天做天天爱夜夜爽 | 91系列在线 | 国产精品入口麻豆www | 日韩高清免费无专码区 | 久久久久久久看片 | 国产精品一区欧美 | 国产成人精品一区二三区 | 亚洲成人二区 | 99在线视频免费观看 | 免费观看9x视频网站在线观看 | 一区国产精品 | 久久久久夜色 | 色综合天天综合 | 欧女人精69xxxxxx | 日韩视频免费 | 91av免费看 | 国产99久久九九精品免费 | www.国产精品| 国产午夜视频在线观看 | 精品一区在线 | 97视频在线观看播放 | 激情影音先锋 | 天天操天天操一操 | 天天干天天上 | 国产精品久久久久久69 | 久久小视频 | 三级av在线播放 | 亚洲不卡av一区二区三区 | 最近更新中文字幕 | 国产精品18久久久久久vr | 丁香综合五月 | 人人网av | 99精品国产成人一区二区 | 丁香影院在线 | 成人在线黄色 | av网站在线观看播放 | 9999精品| 四虎影视成人精品国库在线观看 | 91精品在线免费观看 | 国产高清小视频 | 黄色的视频 | 特级毛片在线 | 在线观看国产高清视频 | 免费黄色在线网址 | 18久久久| 久久九九影视 | www.xxxx欧美 | 日韩激情一二三区 | 91视频 - x99av| 成年人免费看的视频 | 免费在线激情视频 | 狠狠的日| 中文字幕一区二区三区四区视频 | 99999精品| 国产一区二区三区 在线 | 黄色成人在线观看 | 亚洲精品一区二区网址 | 97久久久免费福利网址 | www黄在线| 国产美女主播精品一区二区三区 | 欧美精品在线观看免费 | 激情欧美丁香 | 91麻豆精品国产91久久久久久久久 | 国产成人精品国内自产拍免费看 | 国产91成人在在线播放 | 中文字幕在线观看你懂的 | 毛片网在线播放 | 97在线观看视频国产 | 日韩大片免费观看 | 久久免费99 | 亚洲免费av片 | 久久久久国产一区二区三区 | 国产亚洲精品久久久久动 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 91少妇精拍在线播放 | 国产精品久久久久久一二三四五 | 2021av在线| 欧美日韩国产精品爽爽 | 99精品在线播放 | 大片网站久久 | 中文在线中文资源 | 日韩av一区二区在线播放 | 国产高清视频免费最新在线 | 久久国产精品一区二区三区 | 看片一区二区三区 | 五月激情视频 | 精品一区二区综合 | 中文字幕一区二区在线观看 | 久草视频在线免费播放 | 国产一级片毛片 | av网站在线免费观看 | 亚洲欧美视频在线播放 | 国模吧一区 | 国产一级在线 | 91日韩免费 | 青草视频网 | 美女福利视频在线 | 天天操天天操天天操天天操 | 欧美成年黄网站色视频 |