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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

前端MVC Vue2学习总结(四)——条件渲染、列表渲染、事件处理器

發布時間:2024/4/13 vue 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 前端MVC Vue2学习总结(四)——条件渲染、列表渲染、事件处理器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、條件渲染

1.1、v-if

在字符串模板中,如 Handlebars ,我們得像這樣寫一個條件塊:

<!-- Handlebars 模板 --> {{#if ok}}<h1>Yes</h1> {{/if}}

在 Vue.js ,我們使用?v-if?指令實現同樣的功能:

<h1 v-if="ok">Yes</h1>

也可以用?v-else?添加一個 “else” 塊:

<h1 v-if="ok">Yes</h1> <h1 v-else>No</h1>

1.1.1、template v-if

因為?v-if?是一個指令,需要將它添加到一個元素上。但是如果我們想切換多個元素呢?此時我們可以把一個?<template>?元素當做包裝元素,并在上面使用?v-if,最終的渲染結果不會包含它。

<template v-if="ok"><h1>Title</h1><p>Paragraph 1</p><p>Paragraph 2</p> </template>

示例:

<!DOCTYPE html> <html><head><meta charset="UTF-8"><title>條件渲染</title></head><body><div id="app1"><p><button type="button" @click="isShow=!isShow">Toggle isShow</button></p><h1 v-if="isShow">Yes</h1><h1 v-else>No</h1><template v-if="!isShow"><p>item1</p><p>item2</p><p>item3</p></template><template v-else><p>item4</p><p>item5</p><p>item6</p></template></div><script src="../js/vue.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript">var app1 = new Vue({el: "#app1",data: {isShow: true}});</script></body></html>

結果:

切換

1.1.2、v-else

可以用?v-else?指令給?v-if?添加一個 “else” 塊:

<div v-if="Math.random() > 0.5">Sorry </div> <div v-else>Not sorry </div>

v-else?元素必須緊跟在?v-if?元素的后面——否則它不能被識別。

1.1.3、v-else-if

2.1.0 新增v-else-if,顧名思義,充當?v-if?的“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-else,v-else-if?也必須緊跟在帶?v-if?或者?v-else-if?的元素之后。

示例:

<!DOCTYPE html> <html><head><meta charset="UTF-8"><title>條件渲染</title></head><body><div id="app1"><div v-if="Math.random() > 0.5">Sorry</div><div v-else>Not sorry</div><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></div><script src="../js/vue.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript">var app1 = new Vue({el: "#app1",data: {type:"C"}});</script></body></html>

?

結果:

1.1.4、用?key?管理可復用的元素

Vue 會盡可能高效地渲染元素,通常會復用已有元素而不是從頭開始渲染。這么做除了使 Vue 變得非常快之外,還有其它一些好處。例如,如果你允許用戶在不同的登錄方式之間切換:

<template v-if="loginType === 'username'"><label>Username</label><input placeholder="Enter your username"> </template> <template v-else><label>Email</label><input placeholder="Enter your email address"> </template>

自己動手試一試,在輸入框中輸入一些文本,然后按下切換按鈕:那么在上面的代碼中切換?loginType?將不會清除用戶已經輸入的內容。因為兩個模板使用了相同的元素,<input>?不會被替換掉——僅僅是替換了它的?placeholder。

示例:

<!DOCTYPE html> <html><head><meta charset="UTF-8"><title>條件渲染</title></head><body><div id="app1"><template v-if="type==='username'"><label>帳號:</label><input placeholder="請輸入您的帳號" /></template><template v-else><label>郵箱:</label><input placeholder="請輸入您的電子郵箱" /></template><p><a href="" @click.prevent="type='username'">用戶名登錄</a> | <a href="" @click.prevent="type='email'">郵箱登錄</a> </p></div><script src="../js/vue.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript">var app1 = new Vue({el: "#app1",data: {isShow: true,type: "username"}});</script></body> </html>

?

結果:

點擊郵箱登錄

這樣也不總是符合實際需求,所以 Vue 為你提供了一種方式來表達“這兩個元素是完全獨立的,不要復用它們”。只需添加一個具有唯一值的?key?屬性即可:

<template v-if="loginType === 'username'"><label>Username</label><input placeholder="Enter your username" key="username-input"> </template> <template v-else><label>Email</label><input placeholder="Enter your email address" key="email-input"> </template>

現在,每次切換時,輸入框都將被重新渲染。

<div id="app1"><template v-if="type==='username'"><label>帳號:</label><input placeholder="請輸入您的帳號" key="username"/></template><template v-else><label>郵箱:</label><input placeholder="請輸入您的電子郵箱" key="email"/></template><p><a href="" @click.prevent="type='username'">用戶名登錄</a> | <a href="" @click.prevent="type='email'">郵箱登錄</a> </p></div>

注意,<label>?元素仍然會被高效地復用,因為它們沒有添加?key?屬性。

1.1.5、v-show

另一個根據條件展示元素的選項是?v-show?指令。用法大體上一樣:

<h1 v-show="ok">Hello!</h1>

不同的是有?v-show?的元素會始終渲染并保持在 DOM 中。v-show?是簡單的切換元素的 CSS 屬性?display?。

注意?v-show?不支持?<template>?語法。

1.2、v-if vs. v-show

v-if?是真實的條件渲染,因為它會確保條件塊在切換當中適當地銷毀與重建條件塊內的事件監聽器和子組件。

v-if?也是惰性的:如果在初始渲染時條件為假,則什么也不做——在條件第一次變為真時才開始局部編譯(編譯會被緩存起來)。

相比之下,?v-show?簡單得多——元素始終被編譯并保留,只是簡單地基于 CSS 切換。

一般來說,?v-if?有更高的切換消耗而?v-show?有更高的初始渲染消耗。因此,如果需要頻繁切換使用?v-show?較好,如果在運行時條件不大可能改變則使用?v-if?較好。

官方文檔: http://vuejs.org/guide/conditional.html

二、列表渲染

2.1、v-for

我們用?v-for?指令根據一組數組的選項列表進行渲染。?v-for?指令需要以item in items?形式的特殊語法,?items?是源數據數組并且?item?是數組元素迭代的別名。

基本用法

<ul id="example-1"><li v-for="item in items">{{ item.message }}</li> </ul> var example1 = new Vue({el: '#example-1',data: {items: [{message: 'foo' },{message: 'Bar' }]} })

結果:

  • Foo
  • Bar

在?v-for?塊中,我們擁有對父作用域屬性的完全訪問權限。?v-for?還支持一個可選的第二個參數為當前項的索引。

<ul id="example-2"><li v-for="(item, index) in items">{{ parentMessage }} - {{ index }} - {{ item.message }}</li> </ul> var example2 = new Vue({el: '#example-2',data: {parentMessage: 'Parent',items: [{ message: 'Foo' },{ message: 'Bar' }]} })

結果:

  • Parent - 0 - Foo
  • Parent - 1 - Bar

你也可以用?of?替代?in?作為分隔符,因為它是最接近 JavaScript 迭代器的語法:

<div v-for="item of items"></div>

2.1.1、Template v-for

如同?v-if?模板,你也可以用帶有?v-for?的?<template>?標簽來渲染多個元素塊。例如:

<ul><template v-for="item in items"><li>{{ item.msg }}</li><li class="divider"></li></template> </ul>

2.1.2、對象迭代 v-for

你也可以用?v-for?通過一個對象的屬性來迭代。

<ul id="repeat-object" class="demo"><li v-for="value in object">{{ value }}</li> </ul> new Vue({el: '#repeat-object',data: {object: {FirstName: 'John',LastName: 'Doe',Age: 30}} })

結果:

  • John
  • Doe
  • 30

你也可以提供第二個的參數為鍵名:

<div v-for="(value, key) in object">{{ key }} : {{ value }} </div>

第三個參數為索引:

<div v-for="(value, key, index) in object">{{ index }}. {{ key }} : {{ value }} </div>

在遍歷對象時,是按 Object.keys() 的結果遍歷,但是不能保證它的結果在不同的 JavaScript 引擎下是一致的。

2.1.3、整數迭代 v-for

v-for?也可以取整數。在這種情況下,它將重復多次模板。

<div><span v-for="n in 10">{{ n }}</span> </div>

結果:

1?2?3?4?5?6?7?8?9?10 示例: <!DOCTYPE html> <html><head><meta charset="UTF-8"><title>列表渲染</title></head><body><div id="app1"><ul><template v-for="(user,index) in users"><li>{{index+1}} - {{user.name}}</li><li><hr/></li></template></ul><h3>遍歷對象中的所有屬性value</h3><p v-for="value in product">{{value}}</p><h3>遍歷對象中的所有屬性value - key</h3><p v-for="(value,key) in product">{{key}} - {{value}}</p><h3>遍歷對象中的所有屬性value - key - index</h3><p v-for="(value,key,index) in product">{{index}} - {{key}} - {{value}}</p><h3>整數迭代 v-for</h3><span v-for="n in 20">{{n}} - </span></div><script src="../js/vue.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript">var app1 = new Vue({el: "#app1",data: {users: [{name: "tom",age: 18},{name: "rose",age: 87},{name: "mark",age: 16}],product: {name: "蘋果",price: 5.8,unit: '千克'}}});</script></body></html> 結果:

2.1.4、組件 和 v-for

了解組件相關知識,查看? 組件?。Feel free to skip it and come back later.

在自定義組件里,你可以像任何普通元素一樣用?v-for?。

<my-component v-for="item in items"></my-component>

然而他不能自動傳遞數據到組件里,因為組件有自己獨立的作用域。為了傳遞迭代數據到組件里,我們要用?props?:

<my-componentv-for="(item, index) in items"v-bind:item="item"v-bind:index="index"> </my-component>

不自動注入?item?到組件里的原因是,因為這使得組件會緊密耦合到?v-for?如何運作。在一些情況下,明確數據的來源可以使組件可重用。

下面是一個簡單的 todo list 完整的例子:

<div id="todo-list-example"><inputv-model="newTodoText"v-on:keyup.enter="addNewTodo"placeholder="Add a todo"><ul><liis="todo-item"v-for="(todo, index) in todos"v-bind:title="todo"v-on:remove="todos.splice(index, 1)"></li></ul> </div> Vue.component('todo-item', {template: '<li>{{ title }}<button v-on:click="$emit(\'remove\')">X</button></li>',props: ['title'] }) new Vue({el: '#todo-list-example',data: {newTodoText: '',todos: ['Do the dishes','Take out the trash','Mow the lawn']},methods: {addNewTodo: function () {this.todos.push(this.newTodoText)this.newTodoText = ''}} })

示例:

<!DOCTYPE html> <html><head><meta charset="UTF-8"><title>列表渲染</title></head><body><div id="app1">任務:<input v-model="newTask" @keyup.enter="addNew" placeholder="請輸入您要完成的任務" /><ul><li is="todoitem" v-for="(task,index) in tasks" :title="task" @remove="removeItem(index)"></li></ul></div><script src="../js/vue.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript">Vue.component("todoitem", {template: "<li>{{title}} <button @click='$emit(\"remove\")'>X</button></li>",props: ['title']});var app1 = new Vue({el: "#app1",data: {newTask: '',tasks: ["買一本書", "給爸媽打電話", "整理自己的硬盤"]},methods: {addNew: function() {this.tasks.unshift(this.newTask);this.newTask = '';},removeItem: function(index) {if(confirm('確定要移除嗎?')) {this.tasks.splice(index, 1);}}}});</script></body> </html>

結果:

2.2、key

當 Vue.js 用?v-for?正在更新已渲染過的元素列表時,它默認用 “就地復用” 策略。如果數據項的順序被改變,而不是移動 DOM 元素來匹配數據項的順序, Vue 將簡單復用此處每個元素,并且確保它在特定索引下顯示已被渲染過的每個元素。這個類似 Vue 1.x 的track-by="$index"?。

這個默認的模式是有效的,但是只適用于不依賴子組件狀態或臨時 DOM 狀態(例如:表單輸入值)的列表渲染輸出。

為了給 Vue 一個提示,以便它能跟蹤每個節點的身份,從而重用和重新排序現有元素,你需要為每項提供一個唯一?key?屬性。理想的?key?值是每項都有唯一 id。這個特殊的屬性相當于 Vue 1.x 的?track-by?,但它的工作方式類似于一個屬性,所以你需要用v-bind?來綁定動態值(在這里使用簡寫):

<div v-for="item in items" :key="item.id"><!-- 內容 --> </div>

建議盡可能使用?v-for?來提供?key?,除非迭代 DOM 內容足夠簡單,或者你是故意要依賴于默認行為來獲得性能提升。

因為它是 Vue 識別節點的一個通用機制,?key?并不特別與?v-for?關聯,key 還具有其他用途,我們將在后面的指南中看到其他用途。

2.3、數組更新檢測

2.3.1、變異方法

Vue 包含一組觀察數組的變異方法,所以它們也將會觸發視圖更新。這些方法如下:

  • push()
  • pop()
  • shift()
  • unshift()
  • splice()
  • sort()
  • reverse()

你打開控制臺,然后用前面例子的?items?數組調用突變方法:example1.items.push({ message: 'Baz' })?。

2.3.2、重塑數組

變異方法(mutation method),顧名思義,會改變被這些方法調用的原始數組。相比之下,也有非變異(non-mutating method)方法,例如:?filter(),?concat(),?slice()?。這些不會改變原始數組,但總是返回一個新數組。當使用非變異方法時,可以用新數組替換舊數組:

example1.items = example1.items.filter(function (item) {return item.message.match(/Foo/) })

你可能認為這將導致 Vue 丟棄現有 DOM 并重新渲染整個列表。幸運的是,事實并非如此。 Vue 實現了一些智能啟發式方法來最大化 DOM 元素重用,所以用一個含有相同元素的數組去替換原來的數組是非常高效的操作。

示例:

<!DOCTYPE html> <html><head><meta charset="UTF-8"><title>列表渲染</title></head><body><div id="app1"><ul><li v-for="n in items"><h2>{{n}}</h2></li></ul><button @click="items.splice(0,3)">修改數組(變異)</button><button @click="items.slice(0,3)">修改數組(不變異)</button></div><script src="../js/vue.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript">var app1 = new Vue({el: "#app1",data: {items:[1,3,5,7,9,2,4,6,8,0]}});</script></body></html>

結果:

如果原數組發生了變化則View也會重新渲染,如果原數組未發生變化只是讀取后返回了新的數組對象則不會渲染。

2.3.3、觸發數組狀態更新

由于 JavaScript 的限制, Vue 不能檢測以下變動的數組:

  • 當你直接設置一個項的索引時,例如:?vm.items[indexOfItem] = newValue
  • 當你修改數組的長度時,例如:?vm.items.length = newLength
  • 為了避免第一種情況,以下兩種方式將達到像?vm.items[indexOfItem] = newValue?的效果, 同時也將觸發狀態更新:

    // Vue.set Vue.set(example1.items, indexOfItem, newValue) // Array.prototype.splice` example1.items.splice(indexOfItem, 1, newValue)

    避免第二種情況,使用?splice:

    example1.items.splice(newLength)

    splice數組詳解:

    splice() 方法向/從數組中添加/刪除項目,然后返回被刪除的項目。注釋:該方法會改變原始數組。語法 arrayObject.splice(index,howmany,item1,.....,itemX)index //規定添加/刪除項目的位置,使用負數可從數組結尾處規定位置。 howmany //要刪除的項目數量。如果設置為 0,則不會刪除項目。 item1, ..., itemX //向數組添加的新項目。 返回值 Array 包含被刪除項目的新數組,如果有的話。說明 //splice() 方法可刪除從 index 處開始的零個或多個元素,并且用參數列表中聲明的一個或多個值來替換那些被刪除的元素。//如果從 arrayObject 中刪除了元素,則返回的是含有被刪除的元素的數組。 View Code

    示例:

    <!DOCTYPE html> <html><head><meta charset="UTF-8"><title>列表渲染</title></head><body><div id="app1"><ul><li v-for="n in items"><h2>{{n}}</h2></li></ul><button @click="items[2]=55">修改第3個元素的值為55(無效)</button><button @click="setValue">Vue.set修改第3個元素的值為55</button><button @click="items.splice(2,1,55)">Vue.set修改第3個元素的值為55</button></div><script src="../js/vue.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript">var app1 = new Vue({el: "#app1",data: {items: [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]},methods: {setValue: function() {Vue.set(this.items, 2, 55);}}});</script></body></html>

    結果:

    2.4、對象更改檢測注意事項

    還是由于 JavaScript 的限制,Vue 不能檢測對象屬性的添加或刪除:

    var vm = new Vue({data: {a: 1} }) // `vm.a` 現在是響應式的 vm.b = 2 // `vm.b` 不是響應式的

    對于已經創建的實例,Vue 不能動態添加根級別的響應式屬性。但是,可以使用?Vue.set(object, key, value)?方法向嵌套對象添加響應式屬性。例如,對于:

    var vm = new Vue({data: {userProfile: {name: 'Anika'}} })

    你可以添加一個新的?age?屬性到嵌套的?userProfile?對象:

    Vue.set(vm.userProfile, 'age', 27)

    你還可以使用?vm.$set?實例方法,它只是全局?Vue.set?的別名:

    vm.$set(this.userProfile, 'age', 27)

    有時你可能需要為已有對象賦予多個新屬性,比如使用?Object.assign()?或?_.extend()。在這種情況下,你應該用兩個對象的屬性創建一個新的對象。所以,如果你想添加新的響應式屬性,不要像這樣:

    Object.assign(this.userProfile, {age: 27,favoriteColor: 'Vue Green' })

    你應該這樣做:

    this.userProfile = Object.assign({}, this.userProfile, {age: 27,favoriteColor: 'Vue Green' })

    示例:

    <!DOCTYPE html> <html><head><meta charset="UTF-8"><title>對象更改檢測注意事項</title></head><body><div id="app1"><h2>對象更改檢測注意事項</h2>{{stu.name}} - {{stu.age}}<p><button @click="setAge">在stu對象中添加age屬性并設置值為100</button></p></div><script src="../js/vue.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript">var app1 = new Vue({el: "#app1",data: {stu:{name:"tom"}},methods:{setAge:function(){Vue.set(this.stu,'age',100);}},beforeUpdate:function(){console.log("更新前"+this.name);},updated:function(){console.log("更新后"+this.name);}});</script></body></html>

    結果:

    注意:

    如果data中數據沒有被綁定到DOM中,則修改后DOM不會更新,updated與beforeUpdate事件也不會執行(Hook function)

    data 的根元素后加入無效,可以使用Vue.set添加元素中的屬性,這樣會變成響應式的成員

    2.5、顯示過濾/排序結果

    有時,我們想要顯示一個數組的過濾或排序副本,而不實際改變或重置原始數據。在這種情況下,可以創建返回過濾或排序數組的計算屬性。

    例如:

    <li v-for="n in evenNumbers">{{ n }}</li> data: {numbers: [ 1, 2, 3, 4, 5 ] }, computed: {evenNumbers: function () {return this.numbers.filter(function (number) {return number % 2 === 0})} }

    或者,您也可以使用在計算屬性是不可行的 method 方法 (例如,在嵌套?v-for?循環中):

    <li v-for="n in even(numbers)">{{ n }}</li> data: {numbers: [ 1, 2, 3, 4, 5 ] }, methods: {even: function (numbers) {return numbers.filter(function (number) {return number % 2 === 0})} }

    示例:

    <!DOCTYPE html> <html><head><meta charset="UTF-8"><title>列表渲染</title></head><body><div id="app1"><p><span v-for="n in items">{{n}}</span></p><p><span v-for="n in even">{{n}}</span></p><p><span v-for="n in odd()">{{n}}</span></p></div><script src="../js/vue.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript">var app1 = new Vue({el: "#app1",data: {items: [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]},computed: {even: function() {return this.items.filter(function(n) {return n % 2 === 0;});}},methods: {odd: function() {return this.items.filter(function(n) {return n % 2 === 1;});}}});</script></body></html>

    ?

    結果:

    官方原文:? http://vuejs.org/guide/list.html

    三、事件處理器

    3.1、監聽事件

    可以用?v-on?指令監聽 DOM 事件來觸發一些 JavaScript 代碼。

    示例:

    <div id="example-1"><button v-on:click="counter += 1">增加 1</button><p>這個按鈕被點擊了 {{ counter }} 次。</p> </div> var example1 = new Vue({el: '#example-1',data: {counter: 0} })

    結果:

    增加 1

    這個按鈕被點擊了 0 次。

    3.2、方法事件處理器

    許多事件處理的邏輯都很復雜,所以直接把 JavaScript 代碼寫在?v-on?指令中是不可行的。因此?v-on?可以接收一個定義的方法來調用。

    示例:

    <div id="example-2"><!-- `greet` 是在下面定義的方法名 --><button v-on:click="greet">Greet</button> </div> var example2 = new Vue({el: '#example-2',data: {name: 'Vue.js'},// 在 `methods` 對象中定義方法 methods: {greet: function (event) {// `this` 在方法里指當前 Vue 實例alert('Hello ' + this.name + '!')// `event` 是原生 DOM 事件 alert(event.target.tagName)}} }) // 也可以用 JavaScript 直接調用方法 example2.greet() // -> 'Hello Vue.js!'

    ?

    示例:

    <!DOCTYPE html> <html><head><meta charset="UTF-8"><title>事件</title></head><body><div id="app1"><button v-on:click="greet">問好</button></div><script src="../js/vue.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript">var app1 = new Vue({el: "#app1",data: {name:"tom"},methods: {greet:function(event){console.log('Hello '+ this.name);console.log('事件對象: '+ event.target.tagName); //從事件對象中獲得標簽名 console.log(event);//在原生的事件中this指向的是當前事件對象,這里是實例 event.target.innerHTML="問好了!";}}});</script></body></html>

    ?

    結果:

    ?

    3.3、內聯處理器方法

    除了直接綁定到一個方法,也可以用內聯 JavaScript 語句:

    <div id="example-3"><button v-on:click="say('hi')">Say hi</button><button v-on:click="say('what')">Say what</button> </div> new Vue({el: '#example-3',methods: {say: function (message) {alert(message)}} })

    結果:

    Say hi?Say what

    有時也需要在內聯語句處理器中訪問原生 DOM 事件。可以用特殊變量?$event?把它傳入方法:

    <button v-on:click="warn('Form cannot be submitted yet.', $event)">Submit</button> // ... methods: {warn: function (message, event) {// 現在我們可以訪問原生事件對象if (event) event.preventDefault()alert(message)} }

    3.4、事件修飾符

    在事件處理程序中調用?event.preventDefault()?或?event.stopPropagation()?是非常常見的需求。盡管我們可以在 methods 中輕松實現這點,但更好的方式是:methods 只有純粹的數據邏輯,而不是去處理 DOM 事件細節。

    為了解決這個問題, Vue.js 為?v-on?提供了?事件修飾符。通過由點(.)表示的指令后綴來調用修飾符。

    • .stop
    • .prevent
    • .capture
    • .self
    <!-- 阻止單擊事件冒泡 --> <a v-on:click.stop="doThis"></a> <!-- 提交事件不再重載頁面 --> <form v-on:submit.prevent="onSubmit"></form> <!-- 修飾符可以串聯 --> <a v-on:click.stop.prevent="doThat"></a> <!-- 只有修飾符 --> <form v-on:submit.prevent></form> <!-- 添加事件偵聽器時使用事件捕獲模式 --> <div v-on:click.capture="doThis">...</div> <!-- 只當事件在該元素本身(而不是子元素)觸發時觸發回調 --> <div v-on:click.self="doThat">...</div>

    3.5、按鍵修飾符

    在監聽鍵盤事件時,我們經常需要監測常見的鍵值。 Vue 允許為?v-on?在監聽鍵盤事件時添加按鍵修飾符:

    <!-- 只有在 keyCode 是 13 時調用 vm.submit() --> <input v-on:keyup.13="submit">

    記住所有的 keyCode 比較困難,所以 Vue 為最常用的按鍵提供了別名:

    <!-- 同上 --> <input v-on:keyup.enter="submit"> <!-- 縮寫語法 --> <input @keyup.enter="submit">

    全部的按鍵別名:

    • enter
    • tab
    • delete (捕獲 “刪除” 和 “退格” 鍵)
    • esc
    • space
    • up
    • down
    • left
    • right

    可以通過全局?config.keyCodes?對象 自定義按鍵修飾符別名:

    // 可以使用 v-on:keyup.f1 Vue.config.keyCodes.f1 = 112

    3.6、為什么在 HTML 中監聽事件?

    你可能注意到這種事件監聽的方式違背了關注點分離(separation of concern)傳統理念。不必擔心,因為所有的 Vue.js 事件處理方法和表達式都嚴格綁定在當前視圖的 ViewModel 上,它不會導致任何維護上的困難。實際上,使用?v-on?有幾個好處:

  • 掃一眼 HTML 模板便能輕松定位在 JavaScript 代碼里對應的方法。

  • 因為你無須在 JavaScript 里手動綁定事件,你的 ViewModel 代碼可以是非常純粹的邏輯,和 DOM 完全解耦,更易于測試。

  • 當一個 ViewModel 被銷毀時,所有的事件處理器都會自動被刪除。你無須擔心如何自己清理它們。

  • 原文: http://vuejs.org/guide/events.html

    四、ES2015新增數組方法

    ECMAScript2015中新增了9個方法,分別是:

  • Array.prototype.indexOf
  • Array.prototype.lastIndexOf
  • Array.prototype.every
  • Array.prototype.some
  • Array.prototype.forEach
  • Array.prototype.map
  • Array.prototype.filter
  • Array.prototype.reduce
  • Array.prototype.reduceRight
  • 4.1、indexOf()找到的元素位置

    indexOf()方法返回在該數組中第一個找到的元素位置,如果它不存在則返回-1。
    不使用indexOf時:

    var arr = ['apple','orange','pear'], found = false; for(var i= 0, l = arr.length; i< l; i++){ if(arr[i] === 'orange'){ found = true; } } console.log("found:",found);

    使用后:

    var arr = ['apple','orange','pear']; console.log("found:", arr.indexOf("orange") != -1);

    4.2、filter()過濾

    該filter()方法創建一個新的匹配過濾條件的數組。
    不用 filter() 時

    var arr = [ {"name":"apple", "count": 2}, {"name":"orange", "count": 5}, {"name":"pear", "count": 3}, {"name":"orange", "count": 16}, ]; var newArr = []; for(var i= 0, l = arr.length; i< l; i++){ if(arr[i].name === "orange" ){ newArr.push(arr[i]); } } console.log("Filter results:",newArr);

    用了 filter():

    var arr = [ {"name":"apple", "count": 2}, {"name":"orange", "count": 5}, {"name":"pear", "count": 3}, {"name":"orange", "count": 16}, ];var newArr = arr.filter(function(item){ return item.name === "orange"; }); console.log("Filter results:",newArr);

    4.3、forEach()迭代

    forEach為每個元素執行對應的方法

    var arr = [1,2,3,4,5,6,7,8];// Uses the usual "for" loop to iterate for(var i= 0, l = arr.length; i< l; i++){ console.log(arr[i]); }console.log("========================");//Uses forEach to iterate arr.forEach(function(item,index){ console.log(item); });

    forEach是用來替換for循環的

    4.4、map()映射

    map()對數組的每個元素進行一定操作(映射)后,會返回一個新的數組

    不使用map:

    var oldArr = [{first_name:"Colin",last_name:"Toh"},{first_name:"Addy",last_name:"Osmani"},{first_name:"Yehuda",last_name:"Katz"}];function getNewArr(){var newArr = [];for(var i= 0, l = oldArr.length; i< l; i++){ var item = oldArr[i]; item.full_name = [item.first_name,item.last_name].join(" "); newArr[i] = item; }return newArr; }console.log(getNewArr());

    使用map后:

    var oldArr = [{first_name:"Colin",last_name:"Toh"},{first_name:"Addy",last_name:"Osmani"},{first_name:"Yehuda",last_name:"Katz"}];function getNewArr(){return oldArr.map(function(item,index){ item.full_name = [item.first_name,item.last_name].join(" "); return item; });}console.log(getNewArr());

    map()是處理服務器返回數據時是一個非常實用的函數。

    4.5、reduce()累加器

    reduce()可以實現一個累加器的功能,將數組的每個值(從左到右)將其降低到一個值。
    說實話剛開始理解這句話有點難度,它太抽象了。
    場景: 統計一個數組中有多少個不重復的單詞
    不使用reduce時:

    var arr = ["apple","orange","apple","orange","pear","orange"];function getWordCnt(){ var obj = {};for(var i= 0, l = arr.length; i< l; i++){ var item = arr[i]; obj[item] = (obj[item] +1 ) || 1; }return obj; }console.log(getWordCnt());

    使用reduce()后

    var arr = ["apple","orange","apple","orange","pear","orange"];function getWordCnt(){ return arr.reduce(function(prev,next){ prev[next] = (prev[next] + 1) || 1; return prev; },{}); }console.log(getWordCnt());

    讓我先解釋一下我自己對reduce的理解。reduce(callback, initialValue)會傳入兩個變量。回調函數(callback)和初始值(initialValue)。假設函數它有個傳入參數,prev和next,index和array。prev和next你是必須要了解的。
    一般來講prev是從數組中第一個元素開始的,next是第二個元素。但是當你傳入初始值(initialValue)后,第一個prev將是initivalValue,next將是數組中的第一個元素。
    比如:

    /* * 二者的區別,在console中運行一下即可知曉 */var arr = ["apple","orange"];function noPassValue(){ return arr.reduce(function(prev,next){ console.log("prev:",prev); console.log("next:",next);return prev + " " +next; }); } function passValue(){ return arr.reduce(function(prev,next){ console.log("prev:",prev); console.log("next:",next);prev[next] = 1; return prev; },{}); }console.log("No Additional parameter:",noPassValue()); console.log("----------------"); console.log("With {} as an additional parameter:",passValue());

    示例:

    <!DOCTYPE html> <html><head><meta charset="UTF-8"><title>列表渲染</title></head><body><div id="app1"><span v-for="n in items">{{n}} </span><button @click="indexOfMethod">indexOf()找到的元素位置</button><button @click="filterMethod">filter()過濾</button><button @click="forEachMethod">forEach()迭代</button><button @click="mapMethod">map()映射</button><button @click="reduceMethod">reduce()累加器</button></div><script src="../js/vue.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript">var app1 = new Vue({el: "#app1",data: {items: [1, 3, 7, 9, 2, 4, 6, 8, 3],fruits: [{"name": "apple","count": 2},{"name": "orange","count": 5},{"name": "pear","count": 3},{"name": "orange","count": 16}],words: ["apple", "orange", "apple", "orange", "pear", "orange"]},methods: {indexOfMethod: function() {console.log("數字3第一次出現的位置是:" + this.items.indexOf(3));console.log("數字5第一次出現的位置是:" + this.items.indexOf(5));},filterMethod: function() {//獲得數量不小于5的水果var arr1 = this.fruits.filter(function(f) {return f.count >= 5;});console.log(JSON.stringify(arr1));//獲得名稱中含有r的水果var arr2 = this.fruits.filter(function(f) {return f.name.match(/r/igm);});console.log(JSON.stringify(arr2));},forEachMethod: function() {this.fruits.forEach(function(obj, index) {console.log(index + "-" + obj.name + "-" + obj.count);});},mapMethod: function() {var arr3 = this.fruits.map(function(obj, index) {obj.showInfo = index + "->水果:" + obj.name + ",數量:" + obj.count;return obj;});console.log(JSON.stringify(arr3));},reduceMethod: function() {var objs = {};for(var i = 0, l = this.words.length; i < l; i++) {var item = this.words[i];objs[item] = (objs[item] + 1) || 1;}console.log(JSON.stringify(objs));var objs2 = this.words.reduce(function(prev, next) {console.log("prev:", JSON.stringify(prev));console.log("next:", JSON.stringify(next));prev[next] = (prev[next] + 1) || 1;return prev;}, {});console.log(JSON.stringify(objs2));}}});</script></body></html>

    結果:

    結果

    4.6、VUE UI框架

    4.6.1、移動端

    1. vonic?一個基于?vue.js?和?ionic?樣式的 UI 框架,用于快速構建移動端單頁應用,很簡約,是我喜歡的風格 star 2.3k

    中文文檔?在線預覽

    2.vux?基于WeUI和Vue(2.x)開發的移動端UI組件庫 star 10k

    基于webpack+vue-loader+vux可以快速開發移動端頁面,配合vux-loader方便你在WeUI的基礎上定制需要的樣式。

    中文文檔?在線預覽

    3.Mint UI 由餓了么前端團隊推出的 Mint UI 是一個基于 Vue.js 的移動端組件庫 star 8.3k

    中文文檔 github地址?在線預覽

    4.MUI ?最接近原生APP體驗的高性能前端框架?star 7.5k?

    中文文檔?github地址

    5.Muse-ui? ?基于 Vue 2.0 和 Material Design 的 UI 組件庫?star 4.9k

    中文文檔?github地址?

    6.Vant是有贊前端團隊基于有贊統一的規范實現的 Vue 組件庫,提供了一整套 UI 基礎組件和業務組件。star 1k

    中文文檔?github地址

    ?

    7.Cube UI?star 3k

    滴滴 WebApp 團隊 實現的 基于 Vue.js 實現的精致移動端組件庫

    github地址?中文文檔

    特性

    • 質量可靠

      由滴滴內部組件庫精簡提煉而來,經歷了業務一年多的考驗,并且每個組件都有充分單元測試,為后續集成提供保障。

    • 體驗極致

      以迅速響應、動畫流暢、接近原生為目標,在交互體驗方面追求極致。

    • 標準規范

      遵循統一的設計交互標準,高度還原設計效果;接口標準化,統一規范使用方式,開發更加簡單高效。

    • 擴展性強

      支持按需引入和后編譯,輕量靈活;擴展性強,可以方便地基于現有組件實現二次開發

    4.6.2、PC端

    1)Element 餓了么 vue 2.0后臺UI框架 (Star:18382)

    https://github.com/ElemeFE/element

    ?

    (2)iview組件庫 (Star:10186)

    ?iView?主要服務于 PC 界面的中后臺業務,很優秀的組件庫,可惜不適合移動端
    https://github.com/iview/iview
    https://iviewui.com/

    ?

    (3)vux 基于Vue和WeUI的移動UI組件 (Star:9762)
    Vux是基于WeUI和Vue(2.x)開發的移動端UI組件庫,主要服務于微信頁面。
    https://github.com/airyland/vux
    https://vux.li/

    ?

    (4)Mint-UI 餓了么移動端組件庫 (Star:8062)
    由餓了么前端團隊推出的 Mint UI 是一個基于 Vue.js 的移動端組件庫
    https://github.com/ElemeFE/mint-ui

    ?

    (5)vue-admin 管理面板UI框架 (Star:6289)
    https://github.com/vue-bulma/vue-admin

    ?

    (6)vue-material為 Vue.js 打造的 Material 風格的組件 (Star:4550)
    https://github.com/vuematerial/vue-material
    https://vuematerial.github.io/#/

    ?

    (7)vue-strap基于 Vue.js 的 Bootstrap 組件 (Star:4400)
    https://github.com/yuche/vue-strap
    http://yuche.github.io/vue-strap/

    ?

    (8)KeenUI 基于Material Design的UI (Star:3041)
    https://josephuspaye.github.io/Keen-UI/

    ?

    (9)vonic (Star:2276)
    https://github.com/wangdahoo/vonic/
    https://wangdahoo.github.io/vonic/docs/#/

    ?

    (10)Radon-ui awe大神最近寫的一套UI (Star:791)
    https://github.com/luojilab/radon-ui

    ?

    (11)N3-components 基于N3ui (Star:781)
    https://github.com/N3-components/N3-components

    ?

    (12)vue-carbon (Star:739)
    https://github.com/myronliu347/vue-carbon

    4.7、數制轉換

    JS中,通過利用js方法,可以很方便的實現2,8,10,16進制之間的相互轉換

    1、2,8,16進制格式的數據轉換到10進制數據

    var num=parseInt(arg1,arg2);

    第一個參數就是需要轉換為10進制的數,arg2就是被轉換數據的進制值,可以是2,8,16等。

    如:將十六進制的數‘d9’轉為十進制數:

    var num=parseInt(d9,16);//num=217

    2、將10進制格式的數據轉為2,8,16進制格式數據

    var num=parseInt(“217”);//如果這個數是字符串格式的,需要執行這一步 var oxNum=num.toString(16);//參數可以是2,8,16.設置轉換10進制數據到對應進制格式,本例是將num轉成16進制數據 oxNum=d9

    3、2,8,10,16任意進制之間轉化

    通過10進制作為媒介,便可以實現任意進制之間相互轉化了

    五、示例下載

    https://git.coding.net/zhangguo5/vue2.git

    小紅書項目要求:

    http://www.cnblogs.com/xsblog/p/8144290.html

    六、視頻

    https://www.bilibili.com/video/av17503637/

    總結

    以上是生活随笔為你收集整理的前端MVC Vue2学习总结(四)——条件渲染、列表渲染、事件处理器的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    国产91国语对白在线 | 亚洲成av人片在线观看www | 国产不卡av在线 | 最近高清中文字幕在线国语5 | 久久久久五月天 | a黄色片| 日韩电影在线一区二区 | 久久99久久99精品中文字幕 | 国产xxxx | 中文字幕网址 | 黄色的片子 | 国产精品久久久久久麻豆一区 | 波多在线视频 | 日韩中文在线观看 | 97国产精品视频 | 在线观看视频在线观看 | 五月婷婷综合网 | 亚洲区另类春色综合小说校园片 | 日韩一三区 | 最新色站 | 一区二区视频在线免费观看 | 久草国产视频 | 四虎www com | 日韩久久精品一区二区 | 99精品电影 | 欧美亚洲成人xxx | 久久久黄视频 | 日韩电影在线观看一区 | 日韩免费视频在线观看 | 99久久超碰中文字幕伊人 | 天天操天天操天天爽 | 久久久国产影院 | 亚洲电影免费 | 九九热在线视频 | 久草免费在线视频观看 | 国产精品中文字幕在线 | 国产精品一区二区精品视频免费看 | 欧美三人交 | 免费久久久久久久 | 丁香婷五月| 一区二区三区久久 | 欧美成天堂网地址 | 午夜资源站| 亚洲精品影院在线观看 | www.色com| 91日韩精品一区 | 国产二级视频 | 黄色成人免费电影 | 久久无码av一区二区三区电影网 | 精品国产乱码久久 | 一 级 黄 色 片免费看的 | 国产精品激情偷乱一区二区∴ | 公与妇乱理三级xxx 在线观看视频在线观看 | 久久亚洲影视 | 久久国产欧美日韩精品 | 亚洲精品毛片一级91精品 | 亚洲综合色激情五月 | 日本三级全黄少妇三2023 | 国产精品久久三 | 国产精品欧美激情在线观看 | 日韩精品一区二区三区电影 | 色a资源在线 | 五月婷婷视频 | 激情婷婷六月 | 99精品欧美一区二区蜜桃免费 | 国偷自产中文字幕亚洲手机在线 | 成人在线免费观看网站 | 在线观看视频 | 中文字幕一区2区3区 | 国产精品久久久久婷婷二区次 | 久久免费国产视频 | 久久免费黄色 | 一级一片免费视频 | 久久综合九色综合欧美就去吻 | .精品久久久麻豆国产精品 亚洲va欧美 | 91自拍视频在线观看 | 五月天激情在线 | 中文字幕一区在线观看视频 | 综合伊人av | 九九热在线视频免费观看 | 久草视频在线免费看 | 97视频在线免费 | 免费一级片在线观看 | 午夜精品在线看 | 人人爽人人av | 性色av免费在线观看 | 九九热在线观看视频 | 美州a亚洲一视本频v色道 | 天天激情综合 | 九色91在线| 特级西西www44高清大胆图片 | 久久一久久 | 国产一区成人在线 | 国产黄色成人 | 国产专区第一页 | 欧美日韩亚洲在线观看 | 午夜 久久 tv| 国产涩图 | 久久国产网 | 久久毛片视频 | 亚洲无线视频 | 国产麻豆电影在线观看 | 久久久久观看 | 久久精品99国产精品 | 91在线色| 日韩av免费在线看 | 免费国产一区二区视频 | 日韩一级黄色大片 | 91精品一区国产高清在线gif | 成年人免费在线看 | 91看国产 | 国产99久| 成人毛片在线观看视频 | 在线观看91av | 午夜性福利 | 天天草天天摸 | 天天色天天色天天色 | 欧美极品xxx | 久久久久久久免费观看 | 国产一级特黄毛片在线毛片 | 天天干天天天 | 激情综合五月婷婷 | 99成人免费视频 | 成人九九视频 | 久久av一区二区三区亚洲 | 国产无吗一区二区三区在线欢 | 69久久99精品久久久久婷婷 | 中文字幕在线日本 | 国产成人av电影 | 日韩特黄av | 国产一二区精品 | 国产精品乱码久久久久久1区2区 | 干av在线 | 天堂视频一区 | 亚洲精品午夜久久久久久久久久久 | 国产不卡视频 | 天天操天天弄 | 日韩免费看 | 亚洲永久精品国产 | 91精品一区二区三区久久久久久 | 国产一级一片免费播放放 | 一区二区网 | 久久国产亚洲精品 | 欧美激情视频一二三区 | 在线播放精品一区二区三区 | 日韩精品一区电影 | 国产精品久久久久久久久久妇女 | 中文字幕综合在线 | 日韩精品不卡 | 亚洲精选在线观看 | 久久久在线免费观看 | 99视频免费观看 | 国产我不卡 | 久草在线资源观看 | 男女精品久久 | 午夜电影久久久 | 国产亚洲精品久久久久久无几年桃 | 国产精品久久久免费 | 国产精品热视频 | 天天射天天爱天天干 | 久久久久成人精品 | 成人午夜影院在线观看 | 免费手机黄色网址 | 日韩a在线 | 亚洲国产精品久久 | 国产精品18久久久 | 国内精品久久久久影院男同志 | 久久免费看 | 99国产精品视频免费观看一公开 | 亚洲精品白浆高清久久久久久 | 国产一区在线视频播放 | 91在线视频免费播放 | 九九免费在线看完整版 | 国产日本亚洲 | 久久国产精品99久久久久久老狼 | 国产一区成人在线 | 特黄特色特刺激视频免费播放 | 免费看的黄色的网站 | 日韩欧美专区 | a黄色片 | 日韩欧美精品免费 | 日韩精品一区二区三区三炮视频 | 久久精品免费观看 | 欧美精选一区二区三区 | 色婷婷视频 | 九九九热精品免费视频观看 | 久久精品男人的天堂 | 色a综合| 精品国产黄色片 | 国产精品久久久久一区 | 在线视频观看国产 | 欧美视频网址 | 国产黄色播放 | 中文字幕在线观看一区 | 日韩三级视频在线观看 | 欧洲精品码一区二区三区免费看 | 久久久久国产精品www | 精品亚洲免费 | 色婷婷国产精品一区在线观看 | 正在播放国产一区二区 | 一区二区三区四区精品 | 91在线视频在线观看 | 中文字幕av电影下载 | 欧美亚洲国产日韩 | 亚洲精品视频一 | 天天综合成人网 | h动漫中文字幕 | 成人在线播放免费观看 | av免费在线观 | 国产999视频 | 日韩久久一区 | 欧美性成人 | www.久久久.com | 免费av免费观看 | 亚洲成a人片综合在线 | 国产黄色片一级三级 | 久草网站 | 米奇影视7777| 色先锋资源网 | 手机在线视频福利 | 黄色av一区二区三区 | 日韩在线观看免费 | 国产视频在线免费 | 久草影视在线 | 98精品国产自产在线观看 | 97免费在线观看视频 | 日韩爱爱片 | 国产免费资源 | 国产午夜在线 | 视频一区二区三区视频 | 成人免费av电影 | 免费av高清 | 天天摸天天干天天操天天射 | 俺要去色综合狠狠 | 天天做天天爱天天爽综合网 | 久久久久久久国产精品 | 欧美肥妇free| 久久久久国产精品视频 | 久久久久五月天 | 国产成人免费精品 | av一本久道久久波多野结衣 | 日韩精品久久久久 | 精品国模一区二区三区 | 国产精品久久久久久久久搜平片 | 国产亚洲精品久 | 欧美一区二区日韩一区二区 | 伊人久久婷婷 | 欧美大片在线看免费观看 | 激情综合五月网 | 伊人天天干 | 麻豆国产在线播放 | 人人爽人人爽人人片av免 | 国产亚洲成av人片在线观看桃 | 欧美 激情 国产 91 在线 | 激情深爱| 国产123区在线观看 国产精品麻豆91 | 婷婷色五 | 永久精品视频 | 高清不卡免费视频 | 一级做a爱片性色毛片www | 欧美日韩视频在线 | 中文字幕在线播放第一页 | 欧美日韩免费在线观看视频 | 韩日视频在线 | a久久免费视频 | 中文字幕在线视频一区 | 日韩在线视频精品 | 久久69精品久久久久久久电影好 | 国产色就色 | 免费在线精品视频 | 五月婷婷另类国产 | 久久一区精品 | 欧美黄色高清 | a资源在线 | 久久人人精品 | 午夜精品一区二区三区免费 | 涩涩网站在线播放 | 韩国三级在线一区 | 91精品视频免费在线观看 | 亚洲国产片 | 91看片在线 | 天天躁日日躁狠狠躁 | 中文字幕乱在线伦视频中文字幕乱码在线 | 久久免费视频播放 | 亚洲午夜久久久久久久久电影网 | 国产精品入口传媒 | 成人在线你懂得 | 91中文字幕 | 免费一区在线 | 国产欧美日韩视频 | 精品国产99 | 黄网站色成年免费观看 | 欧美色图30p| 黄色小说免费在线观看 | 国产韩国日本高清视频 | 天天干天天操天天操 | 日韩高清dvd | 操操日 | 日韩va欧美va亚洲va久久 | 成人午夜剧场在线观看 | 亚洲天堂网在线观看视频 | 综合久久久| 免费看污污视频的网站 | av免费网站 | 日韩亚洲欧美中文字幕 | 亚洲精品国产精品国自产观看 | 97精品一区 | 国产精品综合久久 | 91视频-88av | 91精品国产91热久久久做人人 | av超碰在线 | 波多野结衣在线视频免费观看 | 97精品超碰一区二区三区 | 免费性网站 | 亚州av成人 | 国产成人精品一区二区三区免费 | 亚洲精品久久久久久久蜜桃 | 黄色在线观看www | 九九九热精品免费视频观看网站 | 97国产精品亚洲精品 | 免费黄色在线网址 | 国产91精品看黄网站在线观看动漫 | 一区二区三区av在线 | 亚洲精品美女久久17c | 51久久夜色精品国产麻豆 | 精品国产免费人成在线观看 | 久久网站免费 | 天天撸夜夜操 | 在线国产视频观看 | 黄色影院在线观看 | 天天干天天玩天天操 | 九九视频免费观看视频精品 | 欧美99精品 | 视频在线亚洲 | 欧美日本一区 | 在线韩国电影免费观影完整版 | 成年人免费电影在线观看 | 久久久久久久久久久综合 | 五月天亚洲激情 | 国产精品黄色影片导航在线观看 | 午夜三级在线 | 亚洲资源| 国产一级黄色免费看 | 日产中文字幕 | 国产高清中文字幕 | 国产精品一区二区三区在线播放 | 午夜视频在线观看一区二区三区 | 日韩大片免费观看 | 国产在线97 | 国产日韩精品一区二区三区在线 | 国产女v资源在线观看 | 97精品视频在线播放 | 超碰av在线播放 | 国内三级在线观看 | 六月丁香伊人 | 激情五月五月婷婷 | 欧美日韩视频一区二区三区 | 日本久久电影 | 色瓜| 天天色视频| 又爽又黄又无遮挡网站动态图 | 中文理论片 | 五月婷婷狠狠 | 一区二区三区四区影院 | av在线进入 | 欧洲精品久久久久毛片完整版 | 少妇18xxxx性xxxx片 | 黄色影院在线观看 | 在线观看黄色免费视频 | 人人要人人澡人人爽人人dvd | 人人草在线视频 | 国产高清视频色在线www | 91av免费在线观看 | 高清精品久久 | 亚洲视频高清 | 午夜精品久久久久久久久久久久 | 久草免费在线观看 | 麻豆视频免费在线观看 | 亚洲mv大片欧洲mv大片免费 | 福利片免费看 | 婷婷久久一区二区三区 | 亚洲精品视频在线观看免费视频 | 国产乱码精品一区二区蜜臀 | 欧美精品久久久久久久亚洲调教 | 欧洲精品亚洲精品 | 久久久免费观看完整版 | av网站有哪些 | 亚洲欧美日韩国产一区二区三区 | 99在线高清视频在线播放 | 91精品国产91热久久久做人人 | 久久亚洲二区 | 久久久久久久久福利 | 国产精品嫩草影视久久久 | 中文永久字幕 | 国产欧美在线一区二区三区 | 91精品无人成人www | 国产精品免费一区二区三区 | 又粗又长又大又爽又黄少妇毛片 | 亚洲片在线资源 | 91男人影院 | 人人爱人人添 | 国产在线va| 国产成人精品综合 | 在线免费看片 | 日韩v欧美v日本v亚洲v国产v | 日日爽日日操 | 99精品国产免费久久 | 黄色精品一区二区 | 午夜神马福利 | av不卡网站| 中文字幕123区 | 黄色1级大片 | av一级一片 | 丁香视频五月 | 久久久久国产一区二区三区 | 青青草国产免费 | 欧美激情精品久久久久久免费印度 | 国产r级在线观看 | 久久久午夜精品理论片中文字幕 | 五月天中文字幕mv在线 | 成人黄色在线视频 | 91精品麻豆 | 国产精品自产拍 | 国产日本亚洲 | 亚洲国产中文字幕 | 中文字幕色播 | 久久精品麻豆 | 亚洲午夜精品一区二区三区电影院 | av日韩不卡 | 国产99久久久精品 | 一区中文字幕 | 中文国产在线观看 | 97精品国产手机 | 日日日操 | 亚洲成色777777在线观看影院 | 欧美一级欧美一级 | 亚洲成年人在线播放 | 九九九九九九精品 | 成人在线观看日韩 | 欧美性免费 | 成人av在线资源 | 日韩三级一区 | 丁香色综合 | 亚洲高清91 | 91九色视频网站 | 日本aaaa级毛片在线看 | 精品国产亚洲日本 | 日韩在线高清免费视频 | 波多野结衣视频网址 | 国产精品都在这里 | 久久精品国产99国产 | 国产1级毛片 | 美女精品国产 | 中文在线字幕观看电影 | 91尤物国产尤物福利在线播放 | 国产专区精品视频 | 日韩一区精品 | 69国产盗摄一区二区三区五区 | 欧美激情精品久久久久久变态 | 中文字幕在线观看免费观看 | 激情视频网页 | 欧美成人中文字幕 | 久久精品电影网 | 亚洲日本在线一区 | 日韩69av| 天天舔天天搞 | 亚洲片在线 | 日韩精品视频在线观看网址 | 精品日韩在线一区 | 国产一区二区三区高清播放 | 日韩精品一区不卡 | 国产精品免费在线观看视频 | 国产视频一区精品 | 国产区高清在线 | 91中文在线 | 国产精品99免视看9 国产精品毛片一区视频 | 国产五月| 亚洲成人av片在线观看 | 美州a亚洲一视本频v色道 | 日日夜夜亚洲 | 国产伦理久久精品久久久久_ | 在线草| 日韩欧美不卡 | 最近2019中文免费高清视频观看www99 | 国产欧美日韩精品一区二区免费 | 五月精品| 亚洲国产成人精品久久 | 999一区二区三区 | 精品色999| 国产精品情侣视频 | 99久久99视频| 成人黄色资源 | 久久tv| 99久久久国产精品美女 | 成人久久电影 | 成人免费在线观看入口 | 色网址99 | 开心激情婷婷 | 去干成人网 | 欧美国产三区 | 亚洲精品午夜视频 | 激情五月六月婷婷 | 国产剧情一区二区在线观看 | 国产三级av在线 | 国产成人香蕉 | bbb搡bbb爽爽爽 | 精品免费在线视频 | 欧美一级免费高清 | 久久久午夜视频 | 色综合久久久 | 黄色免费在线看 | 免费看黄在线网站 | 久久久久亚洲精品中文字幕 | 在线中文字幕av观看 | 日韩在线观看视频在线 | 天天干,夜夜操 | av综合av| 免费一级片在线观看 | 4438全国亚洲精品观看视频 | 91精品国产麻豆 | 久久爱资源网 | av福利在线看 | 亚洲无毛专区 | 特黄特黄的视频 | 国产视频一区二区在线观看 | 国产精国产精品 | 久久免费国产 | 久久精品视频4 | 91伊人久久大香线蕉蜜芽人口 | 成人在线观看日韩 | 狠狠色狠狠色合久久伊人 | 天天综合日日夜夜 | 99精品国产一区二区三区不卡 | 久久久精品 | 东方av免费在线观看 | 国产 欧美 日产久久 | 中文字幕网站 | 久久激情片| 99热超碰在线 | 丁香婷婷综合激情五月色 | 亚洲不卡av一区二区三区 | 日韩日韩日韩日韩 | 在线观看91精品视频 | 天天射网站| 激情综合狠狠 | 欧美激情片在线观看 | 中文字幕在线观看你懂的 | 免费视频久久久久久久 | 成年人免费在线观看网站 | 青青草在久久免费久久免费 | 欧美aa级 | 欧美三级高清 | 亚洲一区二区精品3399 | 国产精品密入口果冻 | 亚洲爱爱视频 | 99精品国产aⅴ | 国产一级二级三级在线观看 | 欧美日韩国产精品一区二区三区 | 狠狠色丁香久久婷婷综合丁香 | 欧美一级淫片videoshd | 久久综合毛片 | 成人黄色免费观看 | 久久午夜色播影院免费高清 | 蜜臀久久99精品久久久无需会员 | 国产精品一区二区三区99 | 在线观看成人国产 | 狠狠色丁香久久婷婷综合丁香 | 激情视频在线高清看 | 午夜精品久久久久久99热明星 | 国产 av 日韩| 成人9ⅰ免费影视网站 | 国产精品理论在线观看 | 国产精品日韩在线 | 99免费在线| 日韩r级在线 | 在线观看av中文字幕 | 久插视频| 欧美一区二区三区免费看 | 日本三级吹潮在线 | 免费看在线看www777 | 久久综合欧美精品亚洲一区 | 亚洲免费精品一区二区 | 超级碰碰碰碰 | 亚洲成成品网站 | 怡红院av久久久久久久 | 超碰夜夜 | 成人av资源网站 | 日韩精品一卡 | 亚洲日本欧美 | 日韩欧美在线高清 | 中文字幕在线观看免费高清完整版 | 国产人成精品一区二区三 | 亚洲国产精品成人女人久久 | 国产国产人免费人成免费视频 | 国产精品va在线观看入 | 综合视频在线 | 亚洲欧美视频在线播放 | 天天久久综合 | 久久影院精品 | 日韩欧美一区二区三区视频 | 91c网站色版视频 | 最近更新好看的中文字幕 | 999国产 | 亚洲精品视频在线观看网站 | 欧美日韩久久久 | 日韩在线观看视频网站 | zzijzzij亚洲成熟少妇 | 免费观看丰满少妇做爰 | 日本夜夜草视频网站 | 九九在线国产视频 | 久久69av | 91精品少妇偷拍99 | 欧美日韩国产一区二区在线观看 | www.国产高清 | 日本久久综合视频 | 午夜av在线电影 | 日韩国产在线观看 | 国产传媒中文字幕 | 在线视频免费观看 | 成年人毛片在线观看 | 国产剧情亚洲 | 日韩精品一区二区三区免费观看 | 日韩一区二区三区高清免费看看 | 久久久久久久久久伊人 | 久久精品一二三区白丝高潮 | 久久久久一区 | 欧美性猛片| 亚洲视频网站在线观看 | aaa免费毛片| 97超碰在线免费观看 | 黄色a一级视频 | 丁香五婷 | japanesefreesex中国少妇 | 精品国产99国产精品 | 97色婷婷成人综合在线观看 | a在线免费 | 免费高清在线视频一区· | 欧美激情奇米色 | 五月天婷亚洲天综合网鲁鲁鲁 | 久久激情综合网 | 五月天,com | 丝袜美腿在线视频 | 亚洲男人天堂2018 | 国产高清绿奴videos | 五月色丁香 | 国产精品麻豆99久久久久久 | 顶级bbw搡bbbb搡bbbb | 91毛片在线| 91最新地址永久入口 | 日日操日日干 | 国产精品18久久久 | 中文字幕资源网 | 亚洲人精品午夜 | 色中色综合 | 亚洲精品国产精品国自产观看 | 狠狠干狠狠操 | 亚洲自拍偷拍色图 | 亚洲精品国产精品国自产观看 | 天天草综合网 | 中文字幕一区二区在线观看 | 五月天丁香视频 | 在线观看日韩一区 | 91九色丨porny丨丰满6 | 国产精品久久久久久久久久久久午夜 | 国产亚洲精品bv在线观看 | 午夜精品av | 欧美日韩一区二区三区免费视频 | 国产精品视频免费 | 超碰人人射 | 婷婷色亚洲 | 国产原厂视频在线观看 | 天天弄天天操 | 狠狠的日日 | 欧美五月婷婷 | av韩国在线| 日韩动态视频 | 91色蜜桃| 在线免费观看一区二区三区 | 欧美巨大荫蒂茸毛毛人妖 | 亚洲色图22p| 欧美亚洲国产日韩 | 超碰在线cao | 蜜臀久久99精品久久久酒店新书 | 97超碰人人看 | 高清av免费看 | 婷婷去俺也去六月色 | 97av在线视频免费播放 | 在线观看日韩专区 | 日韩在线一区二区免费 | 色网站在线 | 久久爱导航 | 日韩xxxx视频 | 在线黄色av电影 | 黄色资源在线 | 国产精品久久精品国产 | 欧美一进一出抽搐大尺度视频 | 国产精品99爱 | 深夜免费福利网站 | 在线观看日韩精品 | 不卡电影免费在线播放一区 | 欧美精品中文在线免费观看 | 草久久久久 | 午夜视频在线观看一区二区 | 久久综合狠狠 | 手机在线日韩视频 | 五月天综合婷婷 | 黄色免费网站下载 | 亚洲成人黄色在线 | 日韩激情视频 | 国产精品乱码高清在线看 | 久久久精品午夜 | 精品国产大片 | 国内精品99 | 久草国产精品 | 欧美色综合久久 | 欧美一二三区在线播放 | 人人超碰免费 | 亚洲在线日韩 | 欧美日韩视频在线观看一区二区 | 最近中文字幕免费av | 中文字幕有码在线 | 视频国产 | 天天激情站 | 日韩av电影免费观看 | 伊人电影在线观看 | 波多野结衣日韩 | 国产又粗又硬又爽视频 | 黄色aaa级片 | 天天操夜夜曰 | 久久五月精品 | 久久久久黄| 国产精品久久人 | 亚洲黄色免费在线看 | 免费精品在线视频 | 亚洲成人免费在线 | 欧美日韩不卡在线 | 丁香五婷 | 成年人在线观看 | 亚洲激情五月 | 久草视频精品 | 国语自产偷拍精品视频偷 | 一区二区伦理电影 | 欧美黄色特级片 | 欧美日韩在线精品一区二区 | 色久综合| 国产一级在线观看视频 | 91亚洲视频在线观看 | 99热手机在线观看 | 久久国产女人 | 国产黄视频在线观看 | 日韩高清在线看 | 久久久受www免费人成 | 97成人精品视频在线播放 | 亚洲激情免费 | 国产一二三精品 | 亚洲精品久久久蜜桃直播 | 久久婷婷视频 | 99热日本| 午夜av免费 | 深爱激情站 | 国产黄影院色大全免费 | 狠狠狠干| 日韩小视频 | 国产精品国产精品 | 欧美精品乱码久久久久久 | 91精品网站| av丝袜美腿 | 麻豆小视频在线观看 | 69av国产| 四虎影视8848dvd | 国内精品久久久久久久影视麻豆 | 丝袜美腿av| 91视频免费播放 | av在线等 | 亚洲影院天堂 | 天天综合操 | 中日韩免费视频 | 欧美激情精品久久久久久变态 | 四虎成人精品永久免费av | 色欲综合视频天天天 | 亚洲精品综合一二三区在线观看 | 亚洲狠狠婷婷综合久久久 | 久久尤物电影视频在线观看 | 免费男女羞羞的视频网站中文字幕 | 国产一区在线播放 | 欧美一级片在线免费观看 | 片黄色毛片黄色毛片 | 又黄又爽的视频在线观看网站 | 国产午夜精品久久久久久久久久 | 91porny九色在线播放 | 99精品美女| 日日夜夜噜噜噜 | 国产精品一区二区62 | 婷婷射五月| 亚洲小视频在线观看 | 国产精品成人自产拍在线观看 | av免费网站观看 | 伊人亚洲综合 | 国产精品嫩草影视久久久 | 国产免费又粗又猛又爽 | 婷婷在线色 | 久久九九精品久久 | 一区二区三区免费在线播放 | 欧美日韩国产在线精品 | 99久久久国产精品美女 | 成年人黄色在线观看 | 国内毛片毛片 | 日女人电影 | 日韩av专区| 九九热免费观看 | 狠狠的日日 | 久久久.com| 久久福利国产 | 午夜精品导航 | 亚洲高清不卡av | 91视频 - 114av | 狠狠干天天 | 91视频 - x99av | 伊人天堂久久 | 日韩一区二区免费视频 | 狠狠干夜夜爽 | 九九免费精品视频 | 日韩视频区 | 中文一区在线观看 | 操高跟美女 | 天天草综合网 | 欧美 日韩 久久 | www.亚洲黄色 | 国产亚洲精品久久19p | 成人欧美一区二区三区黑人麻豆 | 一区久久久| 高清不卡毛片 | 婷婷在线精品视频 | 精品视频在线免费观看 | 精品国产伦一区二区三区观看说明 | 久久欧美视频 | 狠狠干在线 | 一区二区三区四区免费视频 | 久久伦理网 | 亚洲欧美日韩在线一区二区 | 国产精品久久久久久久久久久久冷 | 久久久久久久久久久国产精品 | 激情在线免费视频 | 欧美怡红院视频 | 在线免费视 | 精品国产欧美一区二区 | 99精品免费网 | 草久在线播放 | 人人草人 | 最近久乱中文字幕 | 天天干天天射天天插 | 日韩欧美国产激情在线播放 | 99视频久久 | www.福利 | 色偷偷网站视频 | 91丨九色丨高潮丰满 | 91新人在线观看 | 国内精品视频在线 | 黄色大片日本免费大片 | 最近的中文字幕大全免费版 | 国产精品精品视频 | 国产第一福利网 | 一区二区三区影院 | 欧美日韩中文国产 | 夜夜干夜夜 | a在线播放 | 婷婷伊人综合亚洲综合网 | 永久免费精品视频 | 免费在线激情电影 | 最近高清中文字幕 | 精品影院一区二区久久久 | 天天弄天天操 | 免费在线观看国产黄 | 国产精品黄网站在线观看 | 日韩中文字幕电影 | 五月婷婷丁香六月 | 午夜av免费 | 国产精品自产拍在线观看桃花 | 欧美精品久久久久久久久久丰满 | 国产成人福利在线 | 午夜av影院| 精品亚洲免费 | 久草免费看| 色99视频 | 日韩在线视频免费播放 | 国产一区二区三区四区在线 | 欧美日本在线观看视频 | 亚洲黄色在线观看 | 四虎在线免费观看 | 97国产一区二区 | 中文av一区二区 | 久久人操 | 91亚洲免费| 99福利影院| 97操操操 | 久久精品中文字幕一区二区三区 | 日韩av在线网站 | 成人动漫精品一区二区 | 91av亚洲 | 欧美少妇影院 | 黄色av网站在线观看免费 | 欧美一区二区视频97 | 免费成人看片 | 欧美日韩国产综合网 | 成人黄色影片在线 | 丰满少妇一级 | 精品在线观看一区二区 | 日韩一区精品 | 国产护士在线 | 91在线免费视频 | 午夜资源站 | www.av在线.com| 国产99在线播放 | 日本韩国精品一区二区在线观看 | 视频在线99 | 免费视频99| 黄色三级网站 | 欧美在线久久 | 91成人蝌蚪 | www,黄视频 | 成人网在线免费视频 | 国产人成免费视频 | 日韩黄色在线观看 | 国产我不卡 | 999视频精品 | 国产小视频在线观看免费 | 国产99精品在线观看 | 日日夜夜骑| 色视频成人在线观看免 | 五月天,com | 中文字幕丝袜一区二区 | 午夜精品一区二区国产 | 激情网站免费观看 | 911香蕉视频| 最新色视频 | 国产 日韩 欧美 中文 在线播放 | 五月天久久久久久 | 激情视频综合网 | 色中色亚洲 | 午夜丁香网| 日日夜夜免费精品视频 | 中文字幕在线免费 | 黄色大片av | 国产精品高清免费在线观看 | 97在线精品| 在线视频 区| 国产99视频在线观看 | 久草电影网 | 日日干天天爽 | 蜜臀一区二区三区精品免费视频 | 91在线麻豆 | 一级成人在线 | 欧美孕妇与黑人孕交 | 国产美女主播精品一区二区三区 | 日日夜夜天天综合 | av成人在线播放 | 亚洲夜夜爽| 欧美日韩一区二区免费在线观看 | 国产综合在线视频 | 中文在线中文资源 | 亚洲欧洲精品久久 | 天堂av色婷婷一区二区三区 | 天天干天天干天天干天天干天天干天天干 | 美女网站视频免费都是黄 | 免费看网站在线 | 久久久精华网 | 婷婷久久网站 | 国产精品专区一 | 日韩伦理片hd | 久久久91精品国产 | 天天射天天爽 | 中文av网站 | 欧美在线aaa | 欧美日韩视频在线一区 | 久久久久久久久久电影 | 一级c片| 国内视频一区二区 | 国产黄色免费在线观看 | 欧美精品视| 国产综合激情 | 日韩av午夜 | 97精品一区二区三区 | 黄视频色网站 | 欧美午夜性生活 | 国产91区| 在线精品视频免费播放 | 日韩中文字幕免费视频 | 欧美视频一区二 | 在线观看日韩专区 | 美女精品国产 | 最近日韩中文字幕中文 | 人人揉人人揉人人揉人人揉97 | 日日久视频 | 午夜精品久久久久久久99水蜜桃 | 国产精品中文字幕在线 | 伊人精品在线 | 超碰人人在线观看 | 国产精品久久电影网 |