02 . Vue入門基礎之條件渲染,列表渲染,事件處理器,表單控件綁定

              小編:管理員 73閱讀 2022.08.18

              vue基礎前端渲染

              將數據填充到HTML標簽中

              插值表達式
              /*
              		作用:會將綁定的數據實時的顯示出來:
                  通過任何方式修改所綁定的數據,所顯示的數據都會被實時替換
                  {{js表達式、三目運算符、方法調用等}}
                  不能寫 var a = 10; 分支語句 循環語句
              */
              復制

              Example1

              <!DOCTYPE html>
              <html>
              	<head>
              		<meta charset="utf-8">
              		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
              		<title>Examples</title>
              		<meta name="description" content="">
              		<meta name="keywords" content="">
              		<link href="" rel="stylesheet">
              		<script type="text/javascript" src="lib/vue.js"></script>
              	</head>
              	<body>
              		<div id="app">
              			<!-- 插值表達式 -->
              			{{ count }}
              
              			<!-- 三目運算符 -->
              			<p>{{ age > 18 ?'成年' :'未成年' }}</p>
              		</div>
              
              		<script>
              			var vm = new Vue({
              				el: '#app',
              				data: {
              					count: 100,
              					age: 15
              				},
              				methods: {
              				}
              			})
              		</script>
              	</body>
              </html>
              復制指令

              指令 (Directives) 是帶有v-前綴的特殊特性。 指令特性的值預期是單個 JavaScript 表達式(v-for是例外情況,稍后我們再討論)。 指令的職責是,當表達式的值改變時,將其產生的連帶影響,響應式地作用于 DOM。 指令的本質就是自定義屬性

              /*
                  1. Vue框架提供的語法
                  2. 擴展了HTML的能力
                  3. 減少DOM操作
              */
              復制

              Example1

              <!DOCTYPE html>
              <html>
              	<head>
              		<meta charset="utf-8">
              		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
              		<title>Examples</title>
              		<meta name="description" content="">
              		<meta name="keywords" content="">
              		<link href="" rel="stylesheet">
              		<script type="text/javascript" src="lib/vue.js"></script>
              	</head>
              	<body>
              		<!--
              			指令
              				作用:
              					增強了html標簽功能
              					所有指令都是v-開頭
              					所有指令代碼位置,標簽的開始標簽位置
              					所有指令都是取代之前的DOM操作
              		-->
              		<div id="app">
              			<!-- 插值表達式 -->
              			{{ count }}
              			<button v-on:click="fn1()">點我</button>
              			<!-- 三目運算符 -->
              			<p>{{ age > 18 ?'成年' :'未成年' }}</p>
              		</div>
              
              		<script>
              			var vm = new Vue({
              				el: '#app',
              				data: {
              					count: 100,
              					age: 15
              				},
              				methods: {
              					fn1(){
              						console.log(this.count)
              					}
              				}
              			})
              		</script>
              
              	</body>
              </html>
              復制v-clock
              /*
              		1. 插值表達式存在的問題:  "閃動"
              		2. 如何解決該問題:  使用v-cloak指令
              		3. 解決該問題的原理: 先隱藏,替換好值之后再顯示最終的值
              */
              復制

              Example

              <!DOCTYPE html>
              <html>
              	<head>
              		<meta charset="utf-8">
              		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
              		<title>Examples</title>
              		<meta name="description" content="">
              		<meta name="keywords" content="">
              		<link href="" rel="stylesheet">
              		<script type="text/javascript" src="lib/vue.js"></script>
              	</head>
              	<body>
              		<div id="app">
              			<div v-cloak>{{ msg }}</div>
              		</div>
              
              		<script>
              			/*
              				v-clock指令用法
              				1. 提供樣式
              					[v-cloak]{
              						display: none;
              					}
              			
              				2. 在插值表達式所在的標簽中添加v-cloak指令
              					背后的原理:  先通過樣式隱藏內容,然后在內存中進行值的替換,替換好之后再顯示最終的結果.
              			*/
              		   var vm = new Vue({
              			   el: '#app',
              			   data: {
              				   msg: 'hello vue12'
              			   }
              		   });
              		</script>
              
              	</body>
              </html>
              復制數據綁定指令V-text,v-html,v-pre

              很像innerText和innerHTML

              /*
              		v-text  填充純文本
              						相比插值表達式更加簡潔
              						
              		v-html	填充HTML片段
              						1. 存在安全問題
              						2. 本網站內部數據可以使用,來自第三方網站數據不可以用
              						
              		v-pre		填充原始信息
              						1. 顯示原始信息,跳過編譯過程
              */
              復制

              x-html

              更新元素的innerHTML。注意:內容按普通 HTML 插入 - 不會作為 Vue 模板進行編譯。如果試圖使用v-html組合模板,可以重新考慮是否通過使用組件來替代。 在網站上動態渲染任意 HTML 是非常危險的,因為容易導致 XSS 攻擊。只在可信內容上使用v-html,永不用在用戶提交的內容上。 在單文件組件里,scoped的樣式不會應用在v-html內部,因為那部分 HTML 沒有被 Vue 的模板編譯器處理。如果你希望針對v-html的內容設置帶作用域的 CSS,你可以替換為 CSS Modules 或用一個額外的全局<style>元素手動設置類似 BEM 的作用域策略。

              Example

              
              復制自定義指令
              

              內置指令不滿足要求

              Vue.directive('focus' {
              	inserted: function(el) {
              		// 獲取元素的焦點
              		el.focus();
              }
              })
              復制

              Example

              <!DOCTYPE html>
              <html lang="en">
              
              	<head>
              		<meta charset="UTF-8">
              		<title>Document</title>
              	</head>
              
              	<body>
              		<div id="app">
              			<input type="text" v-focus />
              		</div>
              
              		<script type="text/javascript" src="js/vue.js"></script>
              		<script type="text/javascript">
              			/*
              				自定義指令
              					
              			*/
              		   Vue.directive('focus',{
              			   inserted: function(el){
              				   // el表示指令所綁定的元素
              				   el.focus()
              			   }
              		   })
              		   
              			var vm = new Vue({
              				el: '#app',
              				data: {
              
              				},
              				methods: {
              
              				}
              			})
              		</script>
              	</body>
              </html>
              復制

              帶參數的自定義指令

              改變元素背景色

              <!DOCTYPE html>
              <html lang="en">
              
              	<head>
              		<meta charset="UTF-8">
              		<title>Document</title>
              	</head>
              
              	<body>
              		<div id="app">
              			<input type="text" v-color='msg'>
              		</div>
              
              		<script type="text/javascript" src="js/vue.js"></script>
              		<script type="text/javascript">
              			/*
              				自定義指令 - 帶參數
              			*/
              
              			Vue.directive('color', {
              				bind: function(el, binding) {
              					// 根據指令的參數設置背景色
              					// console.log(binding.value.color)
              					el.style.backgroundColor = binding.value.color
              				}
              			})
              
              			var vm = new Vue({
              				el: '#app',
              				data: {
              					msg: {
              						color: 'blue'
              					}
              				},
              				methods: {
              					handle: function() {
              
              					}
              				}
              			})
              		</script>
              	</body>
              </html>
              復制

              局部指令

              如果想注冊局部指令,組件中接受一個directives的選項,位于vue實例參數里面,局部指令只能在本組件使用

              <!DOCTYPE html>
              <html lang="en">
              
              	<head>
              		<meta charset="UTF-8">
              		<title>Document</title>
              	</head>
              
              	<body>
              		<div id="app">
              			<input type="text" v-color='msg'>
              			<input type="text" v-focus />
              		</div>
              
              		<script type="text/javascript" src="js/vue.js"></script>
              		<script type="text/javascript">
              			/*
              				自定義指令 - 帶參數
              			*/
              
              			Vue.directive('color', {
              				bind: function(el, binding) {
              					// 根據指令的參數設置背景色
              					// console.log(binding.value.color)
              					el.style.backgroundColor = binding.value.color
              				}
              			})
              
              			var vm = new Vue({
              				el: '#app',
              				data: {
              					msg: {
              						color: 'blue'
              					}
              				},
              				methods: {
              					handle: function() {
              
              					}
              				},
              				
              				directives: {
              					color: {
              						bind: function(el,binding){
              							el.style.backgroundColor = binding.value.color
              						}
              					},
              					focus: {
              						inserted: function(el){
              							el.focus()
              						}
              					}
              				}
              				
              			})
              		</script>
              	</body>
              </html>
              復制聲明式渲染

              Vue.js 的核心是一個允許采用簡潔的模板語法來聲明式地將數據渲染進 DOM 的系統

              Example1

              <!DOCTYPE html>
              <html>
              <head>
              <meta charset="utf-8">
              <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
              <title>Examples</title>
              <meta name="description" content="">
              <meta name="keywords" content="">
              <link href="" rel="stylesheet">
              <script type="text/javascript" src="lib/vue.js"></script>
              </head>
              <body>
                 <div id="box">
                      {{ 10+203 }}
                      <p>{{ myname }}</p>
                 </div>
              
                 <div>
                      {{ 10+20 }}
                 </div>
                 <script>
                      
                     var vm = new Vue({
                         el:"#box", // vue 渲染開始的地方
                         data:{
                          myname:"kerwin"
                         } // 狀態
                      })
                 </script>
              </body>
              </html>
              復制

              我們已經成功創建了第一個 Vue 應用!看起來這跟渲染一個字符串模板非常類似,但是 Vue 在背后做了大量工作?,F在數據和 DOM 已經被建立了關聯,所有東西都是響應式的。我們要怎么確認呢?打開你的瀏覽器的 JavaScript 控制臺 (就在這個頁面打開),并修改app.message的值,你將看到上例相應地更新。 注意我們不再和 HTML 直接交互了。一個 Vue 應用會將其掛載到一個 DOM 元素上 (對于這個例子是#app) 然后對其進行完全控制。那個 HTML 是我們的入口,但其余都會發生在新創建的 Vue 實例內部。

              除了文本插值,我們還可以像這樣來綁定元素 attribute:

              <div id="app-2">
                <span v-bind:title="message">
                  鼠標懸停幾秒鐘查看此處動態綁定的提示信息!
                </span>
              </div>
              
              
              var app2 = new Vue({
                el: '#app-2',
                data: {
                  message: '頁面加載于 ' + new Date().toLocaleString()
                }
              })
              復制

              這里我們遇到了一點新東西。你看到的v-bindattribute 被稱為指令。指令帶有前綴v-,以表示它們是 Vue 提供的特殊 attribute??赡苣阋呀洸碌搅?,它們會在渲染的 DOM 上應用特殊的響應式行為。在這里,該指令的意思是:“將這個元素節點的titleattribute 和 Vue 實例的messageproperty 保持一致”。 如果你再次打開瀏覽器的 JavaScript 控制臺,輸入app2.message = '新消息',就會再一次看到這個綁定了titleattribute 的 HTML 已經進行了更新。

              數據響應式
              /*
              		如何理解響應式
              				1.html5中的響應式(屏幕尺寸的變化導致樣式的變化)
              				2.數據的響應式(數據的變化導致頁面內容的變化)
              		什么是數據綁定
              				1.數據綁定: 將數據填充到標簽中
                        v-once 只編譯一次
                            顯示之后不再具有響應式功能
              					應用場景:
              							如果顯示的信息后續不需要再修改,可以使用v-once,這樣可以提高性能
              */
              復制條件與循環

              Example1

              <!DOCTYPE html>
              <html lang="en">
              	<head>
              		<meta charset="UTF-8">
              		<title>Document</title>
              	</head>
              	<body>
              		<div id="app">
              			<div v-if="score>=90">優秀</div>
              			<div v-else-if="score<90&&score>=80">良好</div>
              			<div v-else-if="score<80&&score>60">一般</div>
              			<div v-else>差</div>
              
              			<div v-show="flag">測試v-show</div>
              
              			<button v-on:click="handle">按鈕</button>
              		</div>
              
              		<script type="text/javascript" src="js/vue.js"></script>
              		<script type="text/javascript">
              			/*
              				分支結構
              					v-show的原理: 控制元素樣式是否顯示 display: none
              			*/
              
              			var vm = new Vue({
              				el: '#app',
              				data: {
              					score: 9,
              					flag: false
              				},
              				methods: {
              					handle: function() {
              						this.flag = !this.flag
              					}
              				}
              			})
              		</script>
              	</body>
              </html>
              復制

              Example2

              <div id="app-3">
                <p v-if="seen">現在你看到我了</p>
              </div>
              
              var app3 = new Vue({
                el: '#app-3',
                data: {
                  seen: true
                }
              })
              復制

              繼續在控制臺輸入app3.seen = false,你會發現之前顯示的消息消失了。 這個例子演示了我們不僅可以把數據綁定到 DOM 文本或 attribute,還可以綁定到 DOM 結構。此外,Vue 也提供一個強大的過渡效果系統,可以在 Vue 插入/更新/移除元素時自動應用過渡效果。 還有其它很多指令,每個都有特殊的功能。例如,v-for指令可以綁定數組的數據來渲染一個項目列表:

              <!DOCTYPE html>
              <html>
              	<head>
              		<meta charset="utf-8">
              		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
              		<title>Examples</title>
              		<meta name="description" content="">
              		<meta name="keywords" content="">
              		<link href="" rel="stylesheet">
              		<script type="text/javascript" src="lib/vue.js"></script>
              	</head>
              	<body>
              		<div id=app-4>
              			<ol>
              				<li v-for="todo in todos">
              					{{ todo.text }}
              				</li>
              			</ol>
              		</div>
              
              		<script>
              			var app4 = new Vue({
              				el: '#app-4',
              				data: {
              					todos: [{
              							text: '學習js'
              						},
              						{
              							text: '學習vue'
              						},
              						{
              							text: '整個厲害項目'
              						}
              					]
              				}
              			})
              		</script>
              	</body>
              </html>
              復制循環結構
              /*
              		v-for 遍歷數組
              			<li v-for='item in list'>{{ item }}</li>
              			<li v-for='{item,index} in list'>{{ item }}+ '---' + {{ index }}</li>
              			
              		v-for 遍歷對象
              			<div v-for='(value,key,index) in '>
              			
              		key的作用: 幫助vue區分不同的元素,從而提高性能
              			<li :key='item.id' v-for='{ item,index } in list'>{{item}}+'----'{{index}}</li>
              */
              復制

              Example1

              <!DOCTYPE html>
              <html lang="en">
              
              	<head>
              		<meta charset="UTF-8">
              		<title>Document</title>
              	</head>
              
              	<body>
              		<div id="app">
              			<div>水果列表</div>
              			<ul>
              				<li v-for='item in fruits'>{{ item }}</li>
              
              				<li v-for='(item,index) in fruits'>{{ item + '---'+index }}</li>
              
              				<li :key='item.id' v-for="(item,index) in myFruits">
              					<span>{{ item.ename }}</span>
              					---
              					<span>{{ item.cname }}</span>
              				</li>
              			</ul>
              		</div>
              
              		<script type="text/javascript" src="js/vue.js"></script>
              		<script type="text/javascript">
              			var vm = new Vue({
              				el: '#app',
              				data: {
              					fruits: ['apple', 'oragen', 'banana'],
              					myFruits: [{
              						id: 1,
              						ename: 'apple',
              						cname: '蘋果'
              					}, {
              						id: 2,
              						ename: 'orange',
              						cname: '橘子'
              					}, {
              						id: 3,
              						ename: 'banner',
              						cname: '香蕉'
              					}],
              				},
              				methods: {
              
              				}
              			})
              		</script>
              	</body>
              </html>
              復制

              v-if和v-for結合使用

              <div v-if>
                
              </div>
              復制

              Example2

              <!DOCTYPE html>
              <html lang="en">
              	<head>
              		<meta charset="UTF-8">
              		<title>Document</title>
              
              	</head>
              	<body>
              		<div id="app">
              			<div v-if='v==13' v-for='(v,k,i) in obj'>{{v + '---' + k + '---' + i}}</div>
              		</div>
              		<script type="text/javascript" src="js/vue.js"></script>
              		<script type="text/javascript">
              			// 使用原生js遍歷對象
              			var obj = {
              				uname: 'lisi',
              				age: 12,
              				gender: 'male'
              			}
              			for (var key in obj) {
              				console.log(key, obj[key])
              			}
              			/*
              			  循環結構
              			*/
              			var vm = new Vue({
              				el: '#app',
              				data: {
              					obj: {
              						uname: 'zhangsan',
              						age: 13,
              						gender: 'female'
              					}
              				}
              			});
              		</script>
              	</body>
              </html>
              復制處理用戶輸入

              為了讓用戶和你的應用進行交互,我們可以用v-on指令添加一個事件監聽器,通過它調用在 Vue 實例中定義的方法:

              <!DOCTYPE html>
              <html>
              	<head>
              		<meta charset="utf-8">
              		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
              		<title>Examples</title>
              		<meta name="description" content="">
              		<meta name="keywords" content="">
              		<link href="" rel="stylesheet">
              		<script type="text/javascript" src="lib/vue.js"></script>
              	</head>
              	<body>
              		<div id="app-5">
              			<p>{{ message}}</p>
              			<button v-on:click="reverseMessage">反轉消息</button>
              		</div>
              
              		<script>
              			var app5 = new Vue({
              				el: '#app-5',
              				data: {
              					message: 'Hello Vue.js!'
              				},
              				methods: {
              					reverseMessage: function() {
              						this.message = this.message.split('').reverse().join('')
              					}
              				}
              			})
              		</script>
              	</body>
              </html>
              復制雙向數據綁定
              /*
              		什么是雙向數據綁定?
              				1.當數據發生變化的時候,視圖也就發生變化
              				2.當視圖發生變化的是后,數據也會跟著同步變化
              				
              		雙向綁定的使用場景?
              				v-model實現的雙向綁定
              				v-model是一個指令,限制在<input>,<select>,<textarea>,components(組件中使用)
              			
              */
              復制v-model的本質
              <!DOCTYPE html>
              <html lang="en">
              
              	<head>
              		<meta charset="UTF-8">
              		<title>Document</title>
              	</head>
              
              	<body>
              		<div id="app">
              			<div>{{ msg }}</div>
              			<input type="text" v-bind:value="msg" v-on:input="handle" />
              			<input type="text" v-bind:value="msg" v-on:input="msg=$event.target.value" />
                    <!-- 通過v-bind綁定value值,v-on綁定input事件,監聽輸入域有變化就將變化的值傳給msg ->
              			<input type="text" v-model="msg" />
              		</div>
              
              		<script type="text/javascript" src="js/vue.js"></script>
              		<script type="text/javascript">
              			/*
              				v-model的本質
              			*/
              
              			var vm = new Vue({
              				el: '#app',
              				data: {
              					msg: 'hello'
              				},
              				methods: {
              					// 使用輸入域中的最新的數據覆蓋原來的數據
              					handle: function(event) {
              						this.msg = event.target.value
              					}
              				}
              			})
              		</script>
              	</body>
              </html>
              復制模板語法vue插值(v-if和v-show)
              /*
              		文本{{}}
              		純HTML
              			v-html, 防止XSS,csrf (
              					(1)前端過濾
              					(2)后臺轉義(<> &lt; &gt;)
              					(3)給cookie加上屬性http
              			)
              			
              			
              		指令
              			v-html
              			v-show
              			
              		v-if與v-show區別
              			v-if控制元素是否渲染到頁面
              			v-show控制元素是否顯示(已經渲染到了頁面)
              */
              復制

              Example1

              <!DOCTYPE html>
              <html>
              	<head>
              		<meta charset="utf-8">
              		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
              		<title>Examples</title>
              		<meta name="description" content="">
              		<meta name="keywords" content="">
              		<link href="" rel="stylesheet">
              		<script type="text/javascript" src="lib/vue.js"></script>
              	</head>
              	<body>
              
              		<div id="box">
              			{{ 10+20 }}
              			{{ 10>20? 'aaa':'bbb' }}
              			{{ myname}}
              			
              			<!-- 指令 -->
              			{{ myhtml }}
              			<div v-html="myhtml"></div>
              		</div>
              
              		<script type="text/javascript">
                    // console 中可以 vm.isShow=false隱藏
              			new Vue({
              				el: "#box",
              				data: {
              					myname: "youmen",
              					myhtml: "<b>11111</b>"
              				}
              			})
              		</script>
              
              	</body>
              </html>
              復制vue如何動態處理屬性
              /*
              		v-bind指令用法
              		<a v-bind:href='url'>跳轉</a>
              		
              		縮寫形式
              		<a :href='url'>跳轉</a>
              */
              復制

              Example1

              <!DOCTYPE html>
              <html lang="en">
              	<head>
              		<meta charset="UTF-8">
              		<title>Document</title>
              	</head>
              	<body>
              		<div id="app">
              			<a :href="url">百度</a>
              			<button v-on:click="handle">切換</button>
              		</div>
              		<script type="text/javascript" src="js/vue.js"></script>
              		<script type="text/javascript">
              			var vm = new Vue({
              				el: '#app',
              				data: {
              					url: 'http://www.baidu.com'
              				},
              				methods: {
              					handle: function() {
              						// 修改url地址
              						this.url = 'http://www.zcj.net.cn'
              					}
              				}
              			})
              		</script>
              	</body>
              </html>
              復制條件渲染Vue-class綁定
              /*
              		對象語法
              			<div v-bind:class="{ active: isActive }"></div>
              			
              		數組語法
              			<div v-bind:class="[activeClass,errorClass]"></div>
              			
              
              */
              復制

              Example1

              <!DOCTYPE html>
              <html lang="en">
              
              	<head>
              		<meta charset="UTF-8">
              		<title>Document</title>
              		<style type="text/css">
              			.active {
              				border: 1px solid red;
              				width: 100px;
              				height: 100px;
              			}
              
              			.error {
              				background-color: orange;
              			}
              		</style>
              	</head>
              
              	<body>
              		<div id="app">
              			<div v-bind:class="{active: isActive,error: isError}">123</div>
              			<button v-on:click="handle">切換</button>
              		</div>
              
              		<script type="text/javascript" src="js/vue.js"></script>
              		<script type="text/javascript">
              			var vm = new Vue({
              				el: '#app',
              				data: {
              					isActive: true,
              					isError: true
              				},
              				methods: {
              					handle: function() {
              						// 控制isActive的值在true和false進行切換
              						this.isActive = !this.isActive;
              						this.isError = !this.isError;
              					}
              				}
              			})
              		</script>
              	</body>
              </html>
              復制

              Example2

              <!DOCTYPE html>
              <html lang="en">
              
              	<head>
              		<meta charset="UTF-8">
              		<title>Document</title>
              		<style type="text/css">
              			.active {
              				border: 1px solid red;
              				width: 100px;
              				height: 100px;
              			}
              
              			.error {
              				background-color: orange;
              			}
              		</style>
              	</head>
              
              	<body>
              		<div id="app">
              			<div v-bind:class="[activeClass,errorClass]">測試樣式</div>
              			<button v-on:click="handle">切換</button>
              		</div>
              
              		<script type="text/javascript" src="js/vue.js"></script>
              		<script type="text/javascript">
              			var vm = new Vue({
              				el: '#app',
              				data: {
              					activeClass: 'active',
              					errorClass: 'error'
              				},
              				methods: {
              					handle: function() {
              						this.activeClass = '';
              						this.errorClass = '';
              					}
              				}
              			})
              		</script>
              	</body>
              </html>
              復制Vue-style綁定

              Example2

              <!DOCTYPE html>
              <html>
              	<head>
              		<meta charset="utf-8">
              		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
              		<title>Examples</title>
              		<meta name="description" content="">
              		<meta name="keywords" content="">
              		<link href="" rel="stylesheet">
              
              		<script type="text/javascript" src="lib/vue.js"></script>
              
              		<style>
              			.red {
              				background-color: red;
              			}
              			
              			.yellow{
              				background-color: yellow;
              			}
              			.aaa{
              
              			}
              
              			.bbb{
              
              			}
              </style>
              	</head>
              	<body>
              		<div id="box">
              
              			<button @click="handleClick()">click</button>
              			<div :class="isActive?'red':'yellow'">我是動態綁定class-三目寫法</div>
              			<div :class="classobj">我是動態綁定class-對象寫法</div>
              			<div :class="classarr">我是動態綁定class-數組寫法</div>
              
              			<div :style="'background:'+(isActive?'red':'yellow')">我是動態綁定style-三目寫法</div>
              
              			<div :style="styleobj">我是動態綁定style-對象寫法</div>
              			<div :style="stylearr">我是動態綁定style-數組寫法</div>
              		</div>
              
              		<script type="text/javascript">
              			var vm = new Vue({
              				el: "#box",
              				data: {
              					isActive: true,
              					classobj: {
              						a: true,
              						b: true
              						// a b, class名字
              					},
              					classarr: ["a", "b"],
              					styleobj: {
              						backgroundColor: "red"
              					},
              					stylearr: []
              				},
              				methods: {
              					handleClick() {
              						this.isActive = !this.isActive
              					}
              				}
              			})
              		</script>
              	</body>
              </html>
              復制樣式綁定相關語法細節
              /*
              		1. 對象綁定和數組綁定可以結合使用
              		2. class綁定的值可以簡化操作
              		3. 默認的class如何處理? 默認的class可以保留
              */
              復制

              Example1

              <!DOCTYPE html>
              <html lang="en">
              
              	<head>
              		<meta charset="UTF-8">
              		<title>Document</title>
              		<style type="text/css">
              			.active {
              				border: 1px solid red;
              				width: 100px;
              				height: 100px;
              			}
              
              			.error {
              				background-color: orange;
              			}
              			
              			.base {
              				font-size: 28px;
              			}
              		</style>
              	</head>
              
              	<body>
              		<div id="app">
              			<div v-bind:class="[activeClass,errorClass,{test: isTest}]">測試樣式</div>
              			<div v-bind:class="arrClasses"></div>
              			<div v-bind:class="objClasses"></div>
              			<div class="base" v-bind:class="objClasses"></div>
              			<button v-on:click="handle">切換</button>
              		</div>
              
              		<script type="text/javascript" src="js/vue.js"></script>
              		<script type="text/javascript">
              			var vm = new Vue({
              				el: '#app',
              				data: {
              					activeClass: 'active',
              					errorClass: 'error',
              					isTest: true,
              					arrClasses: ['active','error'],
              					objClasses: {
              						active: true,
              						error: true
              					}
              				},
              				methods: {
              					handle: function() {
              						// this.isTest = false
              						this.objClasses.error = false
              					}
              				}
              			})
              		</script>
              	</body>
              </html>
              復制條件渲染

              Example1

              <!DOCTYPE html>
              <html>
              	<head>
              		<meta charset="utf-8">
              		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
              		<title>Examples</title>
              		<meta name="description" content="">
              		<meta name="keywords" content="">
              		<link href="" rel="stylesheet">
              		<script type="text/javascript" src="lib/vue.js"></script>
              	</head>
              	<body>
              		<div id="box">
              			<button @click="handleClick()">click</button>
              			<div v-if="isCreated">動態創建和刪除-1</div>
              			<div v-else>動態創建和刪除-2</div>
              			
              			<ul v-if="datalist.length">
              				<li v-for="data in datalist">
              					{{ data }}
              				</li>
              			</ul>
              			
              			<div v-else>
              				購物車空空如也
              			</div>
              			
              			<div v-if="which==1">
              				111
              			</div>
              			
              			<div v-else-if="which==2">
              				2222
              			</div>
              			
              			
              			<div v-else>
              				3333
              			</div>
              			
              		</div>
              		
              		<script type="text/javascript">
              			var vm = new Vue({
              				el:"#box",
              				data:{
              					isCreated:false,
              					datalist:[],
              					which:1,
              				},
              				methods: {
              					handleClick(){
              						this.isCreated = !this.isCreated
              						this.datalist = ["111","222","333"]
              					}
              				}
              			})
              		</script>
              	</body>
              </html>
              復制列表渲染

              我們可以用v-for指令基于一個數組來渲染一個列表。v-for指令需要使用item in items形式的特殊語法,其中items是源數據數組,而item則是被迭代的數組元素的別名。v-for還支持一個可選的第二個參數,即當前項的索引。 也可以用of代替in作為分隔符,因為她更接近javascript迭代器的語法

              <!DOCTYPE html>
              <html>
              	<head>
              		<meta charset="utf-8">
              		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
              		<title>Examples</title>
              		<meta name="description" content="">
              		<meta name="keywords" content="">
              		<link href="" rel="stylesheet">
              		<script type="text/javascript" src="lib/vue.js"></script>
              		
              		<style>
              			.active{
              				background-color: red;
              			}
              		</style>
              		
              	</head>
              	<body>
              
              	<div id="box">
              		<ul>
              			<li v-for="(data,index) in datalist">
              				{{ data }}--{{ index }}
              			</li>
              		</ul>
              		
              		<ul>
              			<li v-for="(data,key) of obj">
              				{{ data }}--{{key}}
              			</li>
              		</ul>
              		
              		
              	</div>
              
              	<script type="text/javascript">
              		var vm = new Vue({
              			el: "#box",
              			data:{
              				datalist:["111","222","333"],
              				obj:{
              					name:"youmen",
              					age:100,
              					location:"youmen"
              				}
              			}
              		})
              	</script>
              
              	</body>
              </html>
              復制列表key值設置和列表數組檢測
              /*
              		1. v-for(特殊v-for="n in 10")
              				a.in
              				b.of
              		2. key
              				*跟蹤每個節點的身份,從而復用和重新排序現有元素
              				*理想的key值是每項都有且唯一的id,data.id
              		3. 數組更新檢測
              				a. 使用以下方法操作數組,可以檢測變動
              						push() pop() shift() unshift() splice() sort() reverse()
              						
              				b. filter(),concat()和slice(),map(),新數組替換舊數組,并不會導致原數組受到影響并更新
              							vm.datalist.concat(["666","777"])
              
              				c. 不能檢測以下變動的數組
              						vm.items[indexOfitem] = newValue
              						"解決" 
              								1. Vue.set(example1.items,index()fltem,newValue)
              								2. splice
              								vm.datalist.splice(0,1,"youmen")
              */
              復制vue列表過濾應用
              <!DOCTYPE html>
              <html>
              	<head>
              		<meta charset="utf-8">
              		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
              		<title>Examples</title>
              		<meta name="description" content="">
              		<meta name="keywords" content="">
              		<link href="" rel="stylesheet">
              		<script type="text/javascript" src="lib/vue.js"></script>
              	</head>
              	<body>
              		<div id="box">
              			<input type="text" @input="handleInput()" v-model="mytext" />
              			<ul>
              				<li v-for="data in datalist">
              					{{ data }}
              				</li>
              			</ul>
              		</div>
              
              		<script type="text/javascript">
              			var vm = new Vue({
              				el: "#box",
              				data: {
              					mytext: "",
              					datalist: ["aaa", "bbb", "ccc", "ddd", "eee", ],
              					list: ["aaa", "bbb", "ccc", "ddd", "eee", ]
              				},
              
              				methods: {
              					handleInput() {
              						// console.log(this.mytext)
              						// console.log("只要value改變,就會觸發")
              						// 利用輸入框的字符,過濾包含字符的元素
              
              						// filter 過濾
              						var newlist = this.list.filter(item => item.indexOf(this.mytext) > -1)
              						this.datalist = newlist;
              						// 計算屬性
              
              					}
              				}
              			})
              
              			var arr = [1, 2, 3, 4, 5]
              
              			var newlist = arr.filter(item => item >= 3)
              			console.log(newlist)
              
              			console.log(newlist)
              		</script>
              
              	</body>
              </html>
              復制事件處理vue如何處理事件
              /*
              		v-on指令用法
              				<input> type= 'button' v-on:click='num++'/>
              				
              		v-on簡寫形式
              				<input type='button'@click='num++'/> 
              */
              復制事件傳參

              Example1

              <!DOCTYPE html>
              <html lang="en">
              
              	<head>
              		<meta charset="UTF-8">
              		<title>Document</title>
              	</head>
              
              	<body>
              		<div id="app">
              			<div>{{ num }}</div>
              			<button v-on:click='num++'>點擊1</button>
              			<button @click='num++'>點擊2</button>
              
              			<!-- 參數傳遞 
              					1. 如果事件直接綁定函數名稱,那么默認會傳遞對象作為事件函數第一個參數
              					2. 如果事件綁定函數調用,那么事件對象必須作為最后一個參數
              			-->
              			<button @click='handle(1,2,$event)'>點擊2</button>
              		</div>
              
              		<script type="text/javascript" src="js/vue.js"></script>
              		<script type="text/javascript">
              			/*
              				事件綁定
              			*/
              			var vm = new Vue({
              				el: '#app',
              				data: {
              					num: 0
              				},
              				methods: {
              					handle: function(p1, p2, event) {
              						console.log(p1, p2, event.target.innerHTML)
              						this.num++;
              					}
              				}
              			})
              		</script>
              	</body>
              </html>
              復制事件處理器

              可以用v-on指令監聽 DOM 事件,并在觸發時運行一些 JavaScript 代碼

              <!DOCTYPE html>
              <html>
              	<head>
              		<meta charset="utf-8">
              		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
              		<title>Examples</title>
              		<meta name="description" content="">
              		<meta name="keywords" content="">
              		<link href="" rel="stylesheet">
              		<script type="text/javascript" src="lib/vue.js"></script>
              	</head>
              	<body>
              		<div id="box">
              			<button @click="handleClick">click1</button>
              			<button @click="handleClick()">click2</button>
              			<button @click="isShow=!isShow">click3</button>
              			<div v-show="isShow">111</div>
              		</div>
              		
              		<script type="text/javascript">
              			new Vue({
              				el: "#box",
              				data:{
              					isShow:false
              				},
              				methods:{
              					handleClick(){
              						this.isShow=!this.isShow
              					}
              				}
              			})
              		</script>
              
              
              	</body>
              </html>
              復制事件修飾符
              /*
              		1. 監聽事件-直接出發代碼
              		2. 方法事件處理器-寫函數名 handleClick
              		3. 內聯處理器方法-執行函數表達式  handleClick($event)  $event 事件對象
              		
              				.stop 阻止冒泡
              						<a v-on:click.stop="handle">跳轉</a>
              				.prevent阻止默認行為
              						<a v-on:click.prevent="handle>跳轉</a>
              
              */
              復制

              修飾符

              /*
              		.stop - 調用 event.stopPropagation()。
                  .prevent - 調用 event.preventDefault()。
                  .capture - 添加事件偵聽器時使用 capture 模式。
                  .self - 只當事件是從偵聽器綁定的元素本身觸發時才觸發回調。
                  .{keyCode | keyAlias} - 只當事件是從特定鍵觸發時才觸發回調。
                  .native - 監聽組件根元素的原生事件。
                  .once - 只觸發一次回調。
                  .left - (2.2.0) 只當點擊鼠標左鍵時觸發。
                  .right - (2.2.0) 只當點擊鼠標右鍵時觸發。
                  .middle - (2.2.0) 只當點擊鼠標中鍵時觸發。
                  .passive - (2.3.0) 以 { passive: true } 模式添加偵聽器
              */
              復制

              Example1

              阻止冒泡,默認行為

              <!DOCTYPE html>
              <html>
              	<head>
              		<meta charset="utf-8">
              		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
              		<title>Examples</title>
              		<meta name="description" content="">
              		<meta name="keywords" content="">
              		<link href="" rel="stylesheet">
              		<script type="text/javascript" src="lib/vue.js"></script>
              	</head>
              	<body>
              		<div id="box">
              			<button @click="handleClick">click1</button>
              			<button @click="handleClick($event)">click2</button>
              			<button @click="isShow=!isShow">click3</button>
              			<div v-show="isShow">111</div>
              
              
              			<ul @click.self="handleClick()">
              				<li @click.stop="handleClick($event)">111</li>
              				<li @click.stop="handleClick()">222</li>
              				<li @click.once="handleClick()">333</li>
              			</ul>
              
              			<a  @click.prevent="handleChangePage()">changepage</a>
              		</div>
              
              		<script type="text/javascript">
              			new Vue({
              				el: "#box",
              				data: {
              					isShow: false
              				},
              				methods: {
              					handleClick(ev) {
              						console.log(ev.target); // ev就是事件對象
              						this.isShow = !this.isShow
              					},
              					handleClick(ev) {
              						// ev.stopPropagation();
              						console.log("li click")
              					},
              					handleClick() {
              						console.log("ul click")
              					},
              					handleChangePage() {
              						console.log("handleChangePage")
              					}
              				}
              			})
              		</script>
              	</body>
              </html>
              復制

              Example2

              <!DOCTYPE html>
              <html lang="en">
              
              	<head>
              		<meta charset="UTF-8">
              		<title>Document</title>
              	</head>
              
              	<body>
              		<div id="app">
              			<div>{{ num }}</div>
              			<div v-on:click="handle0">
              				<button @click.stop="handle1">點擊1</button>
              			</div>
              
              			<div>
              				<a  @click.prevent="handle2">百度</a>
              			</div>
              		</div>
              
              		<script type="text/javascript" src="js/vue.js"></script>
              		<script type="text/javascript">
              			var vm = new Vue({
              				el: '#app',
              				data: {
              					num: 0
              				},
              				methods: {
              					handle0: function() {
              						this.num++;
              					},
              					handle1: function(event) {
              						// 阻止冒泡
              						// event.stopPropagation()
              						this.num++;
              					},
              					handle2: function(event) {
              						// 阻止默認行為
              						// event.preventDefault();
              					}
              				}
              			})
              		</script>
              	</body>
              </html>
              復制按鍵修飾符
              /*
              		.enter回車鍵
              				<input v-on:keyup.enter='submit'>
              		
              		.delete刪除鍵
              				<input v-on:keyup.delete='handle'>
              */
              復制

              Example1

              <!DOCTYPE html>
              <html>
              	<head>
              		<meta charset="utf-8">
              		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
              		<title>Examples</title>
              		<meta name="description" content="">
              		<meta name="keywords" content="">
              		<link href="" rel="stylesheet">
              		<script type="text/javascript" src="lib/vue.js"></script>
              	</head>
              	<body>
              		<div id="box">
              			<input type="text" @keyup.enter="handleKeyup($event)" />
              		</div>
              
              		<script type="text/javascript">
              			new Vue({
              				el: "#box",
              				methods: {
              					handleKeyup(ev) {
              						console.log("執行todolist 添加成功")
              						// if(ev.keyCode==13){
              						// 	console.log("執行todolist添加成功")
                          // 可以自定義按鍵修飾符,找到每個按鍵對應的數字即可
              						// }
              					}
              				}
              			})
              		</script>
              	</body>
              </html>
              復制

              Example2

              <!DOCTYPE html>
              <html lang="en">
              
              	<head>
              		<meta charset="UTF-8">
              		<title>Document</title>
              	</head>
              
              	<body>
              		<div id="app">
              			<form action="">
              				<div>
              					用戶名:
              					<input type="text" v-on:keyup.delete='clearContent' v-model="uname" />
              				</div>
              
              				<div>
              					密碼:
              					<input type="text" v-model="pwd" />
              				</div>
              
              				<div>
              					<input type="button" v-on:click="handleSubmit" value="提交" />
              				</div>
              			</form>
              		</div>
              
              		<script type="text/javascript" src="js/vue.js"></script>
              		<script type="text/javascript">
              			var vm = new Vue({
              				el: '#app',
              				data: {
              					uname: '',
              					pwd: ''
              				},
              				methods: {
              					handleSubmit: function() {
              						console.log(this.uname, this.pwd)
              					},
              					clearContent: function() {
              						this.uname = ''
              					}
              				}
              			})
              		</script>
              	</body>
              </html>
              復制案例

              計算器

              /*
              		1. 通過v-model指令實現數值a和數值b的綁定
              		2. 給計算按鈕綁定事件,實現計算邏輯
              		3. 將計算結果綁定到對應位置
              */
              復制

              Example1

              <!DOCTYPE html>
              <html lang="en">
              
              	<head>
              		<meta charset="UTF-8">
              		<title>Document</title>
              	</head>
              
              	<body>
              		<div id="app">
              			<h1>計算器</h1>
              			<div>
              				<span>數值A:</span>
              				<span>
              					<input type="text" v-model="a" />
              				</span>
              			</div>
              
              			<div>
              				<span>數值B:</span>
              				<span>
              					<input type="text" v-model="b" />
              				</span>
              			</div>
              
              			<div>
              				<button v-on:click="handle">計算</button>
              			</div>
              
              			<div>
              				<span>計算結果</span>
              				<span>{{ result }}</span>
              			</div>
              
              		</div>
              
              		<script type="text/javascript" src="js/vue.js"></script>
              		<script type="text/javascript">
              			var vm = new Vue({
              				el: '#app',
              				data: {
              					a: '',
              					b: '',
              					result: ''
              				},
              				methods: {
              					handle: function() {
              						// 實現計算邏輯
              						this.result = parseInt(this.a) + parseInt(this.b)
              					}
              				}
              			})
              		</script>
              	</body>
              </html>
              復制

              Tab選項卡

              /*
              		1. 實現靜態UI效果
              				用傳統方式實現標簽結構和樣式
              				
              		2. 基于數據重構UI效果
              				將靜態的結構和樣式重構為基于Vue模板語法的樣式
              				處理事件綁定和js控制邏輯
              */
              復制

              Example

              <!DOCTYPE html>
              <html lang="en">
              	<head>
              		<meta charset="UTF-8">
              		<title>Document</title>
              		<style type="text/css">
              			.tab ul {
              				overflow: hidden;
              				padding: 0;
              				margin: 0;
              			}
              
              			.tab ul li {
              				box-sizing: border-box;
              				padding: 0;
              				float: left;
              				width: 100px;
              				height: 45px;
              				line-height: 45px;
              				list-style: none;
              				text-align: center;
              				border-top: 1px solid blue;
              				border-right: 1px solid blue;
              				cursor: pointer;
              			}
              
              			.tab ul li:first-child {
              				border-left: 1px solid blue;
              			}
              
              			.tab ul li.active {
              				background-color: orange;
              			}
              
              			.tab div {
              				width: 500px;
              				height: 300px;
              				display: none;
              				text-align: center;
              				font-size: 30px;
              				line-height: 300px;
              				border: 1px solid blue;
              				border-top: 0px;
              			}
              
              			.tab div.current {
              				display: block;
              			}
              		</style>
              	</head>
              
              	<body>
              		<div id="app">
              			<div class="tab">
              				<ul>
              					<li v-on:click="change(index)" :class='currentIndex==index?"active":""' :key='item.id' v-for="(item,index) in list">{{ item.title }}</li>
              				</ul>
              
              				<div :class='currentIndex==index?"current":""' :key='item.id' v-for="(item,index) in list">
              					<img :src="item.path" />
              				</div>
              			</div>
              		</div>
              
              		<script type="text/javascript" src="js/vue.js"></script>
              		<script type="text/javascript">
              			var vm = new Vue({
              				el: '#app',
              				data: {
              					currentIndex: 0, // 選項卡當前的索引
              
              					list: [{
              							id: 1,
              							title: 'apple',
              							path: 'img/apple.png'
              						}, {
              							id: 2,
              							title: 'orange',
              							path: 'img/orange.png'
              						}, {
              							id: 3,
              							title: 'lemon',
              							path: 'img/lemon.png'
              						},
              
              					]
              				},
              				methods: {
              					change: function(index) {
              						// 在這里實現選項卡切換操作,本質就是操作類名
              						// 如何操作類名: 通過currentIndex
              						this.currentIndex = index;
              					}
              				}
              			})
              		</script>
              	</body>
              </html>
              復制表單控件綁定

              表單操作

              /*
              		基于vue的表單操作
              				1. input		單行文本
              				2. textarea 多行文本
              				3. select		下拉多選
              				4. radio		單選框
              				5. checkbox 多選框
              */
              復制基礎用法-文本

              你可以用v-model指令在表單<input>、<textarea>及<select>元素上創建雙向數據綁定。它會根據控件類型自動選取正確的方法來更新元素。盡管有些神奇,但v-model本質上不過是語法糖。它負責監聽用戶的輸入事件以更新數據,并對一些極端場景進行一些特殊處理。v-model會忽略所有表單元素的value、checked、selectedattribute 的初始值而總是將 Vue 實例的數據作為數據來源。你應該通過 JavaScript 在組件的data選項中聲明初始值。v-model在內部為不同的輸入元素使用不同的 property 并拋出不同的事件:

              /*
              		text 和 textarea 元素使用 value property 和 input 事件;
                  checkbox 和 radio 使用 checked property 和 change 事件;
                  select 字段將 value 作為 prop 并將 change 作為事件。
              */
              復制

              對于需要使用輸入法 (如中文、日文、韓文等) 的語言,你會發現v-model不會在輸入法組合文字過程中得到更新。如果你也想處理這個過程,請使用input事件。

              文本 Example1

              <input v-model="message" placeholder="edit me">
              <p>Message is: {{ message }}</p>
              復制

              多行文本

              <span>Multiline message is:</span>
              <p style="white-space: pre-line;">{{ message }}</p>
              <br>
              <textarea v-model="message" placeholder="add multiple lines"></textarea>
              復制

              在文本區域插值 ({{text}}) 并不會生效,應用v-model來代替。

              基礎用法-復選框

              單個復選框,綁定到布爾值:

              <input type="checkbox" id="checkbox" v-model="checked">
              <label for="checkbox">{{ checked }}</label>
              復制案例

              Example1

              <!DOCTYPE html>
              <html>
              	<head>
              		<meta charset="utf-8">
              		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
              		<title>Examples</title>
              		<meta name="description" content="">
              		<meta name="keywords" content="">
              		<link href="" rel="stylesheet">
              		<script type="text/javascript" src="lib/vue.js"></script>
              	</head>
              	<body>
              		<div id="box">
              			<input type="text" v-model="mytext" />
              			{{mytext}}
              
              			<textarea v-model="mytext"></textarea>
              
              			<input type="checkbox" v-model="isChecked" />記錄用戶名
              
              			<p>你喜歡的運動?
              				<input type="checkbox" v-model="checkgroup" value="游泳" />游泳
              				<input type="checkbox" v-model="checkgroup" value="滑冰" />滑冰
              				<input type="checkbox" v-model="checkgroup" value="長跑" />長跑
              			</p>
              			{{ checkgroup }}
              
              			<p>你喜歡的開發語言?
              				<input type="radio" v-model="picked" value="Python" />Python
              				<input type="radio" v-model="picked" value="Go" />Go
              				<input type="radio" v-model="picked" value="js" />js
              			</p>
              			{{ picked }}
              		</div>
              
              		<script type="text/javascript">
              			var vm = new Vue({
              				el: "#box",
              				data: {
              					mytext: "",
              					isChecked: true,
              					checkgroup: [],
              					picked: "js",
              				}
              			})
              		</script>
              
              	</body>
              </html>
              復制

              Example2-購物車

              <!DOCTYPE html>
              <html>
              	<head>
              		<meta charset="utf-8">
              		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
              		<title>Examples</title>
              		<meta name="description" content="">
              		<meta name="keywords" content="">
              		<link href="" rel="stylesheet">
              
              		<script type="text/javascript" src="lib/vue.js"></script>
              	</head>
              	<body>
              		<div id="box">
              			<input type="checkbox" @change="handleChange" v-model="isAllChecked" />
              			<ul>
              				<li v-for="data in datalist">
              					<!-- 此處的:value是動態綁定,data后面.是什么就會去取列表里面對應值  -->
              					<input type="checkbox" v-model="checkgroup" :value="data" @change="handleLiChange" />
              					{{data}}
              					<button @click="handleDelClick(data)">del</button>
              
              					{{ data.nuber }}
              					<button @click="data.number++">add</button>
              				</li>
              			</ul>
              			{{ checkgroup }}
              
              			<!-- 函數表達式 -->
              			<p>總金額計算: {{ getSum() }}</p>
              		</div>
              
              		<script type="text/javascript">
              			var vm = new Vue({
              				el: "#box",
              				data: {
              					checkgroup: [],
              					isAllChecked: false,
              					datalist: [{
              							name: "商品1",
              							price: 10,
              							number: 1,
              							id: "1",
              						},
              						{
              							name: "商品2",
              							price: 20,
              							number: 2,
              							id: "2",
              						},
              						{
              							name: "商品3",
              							price: 30,
              							number: 3,
              							id: "3",
              						}
              					]
              				},
              				methods: {
              
              					getSum() {
              						// 函數計算中的狀態改變后,函數會自動執行一次
              						var sum = 0;
              						for (var i in this.checkgroup) {
              							sum += this.checkgroup[i].number * this.checkgroup[i].price
              						}
              						return sum
              					},
              
              					handleChange() {
              						console.log("改變了", this.isAllChecked)
              						if (this.isAllChecked) {
              							this.checkgroup = this.datalist
              						} else {
              							this.checkgroup = []
              						}
              					},
              
              					handleLiChange() {
              						console.log("handleLiChange-判斷是不是都勾選")
              						if (this.checkgroup.length === this.datalist.length) {
              							this.isAllChecked = true
              						} else {
              							this.isAllChecked = false
              						}
              					},
              
              					handleDelClick(data) {
              						// console.log(data)
              						var number = data.number--;
              						if (number == 1) {
              							data.number = 1;
              						}
              
              					}
              				}
              
              			})
              		</script>
              	</body>
              </html>
              復制

              Example3

              <!DOCTYPE html>
              <html lang="en">
              
              	<head>
              		<meta charset="UTF-8">
              		<title>Document</title>
              		<style type="text/css">
              			form div {
              				height: 40px;
              				line-height: 40px;
              			}
              
              			form div:nth-child(4) {
              				height: auto;
              			}
              
              			form div span:first-child {
              				display: inline-block;
              				width: 100px;
              			}
              		</style>
              	</head>
              
              	<body>
              		<div id="app">
              			<form action="http://www.zcj.net.cn">
              				<div>
              					<span>姓名:</span>
              					<span>
              						<input type="text" v-model="uname" />
              					</span>
              				</div>
              
              				<div>
              					<span>性別:</span>
              					<span>
              						<input type="radio" id="male" value="1" v-model="gender" />
              						<label for="male">男</label>
              						<input type="radio" id="female" value="2" v-model="gender" />
              						<label for="female">女</label>
              					</span>
              				</div>
              
              				<div>
              					<span>愛好</span>
              					<input type="checkbox" id=ball value="1" v-model="hobby" />
              					<label for="ball">籃球</label>
              					<input type="checkbox" id=sing value="2" v-model="hobby" />
              					<label for="sing">唱歌</label>
              					<input type="checkbox" id="code" value="3" v-model="hobby" />
              					<label for="code">寫代碼</label>
              				</div>
              
              				<div>
              					<span>職業</span>
              					<!-- multiple加上就是支持多選, 但注意在樣式加入form div:nth-child(4) -->
              					<select v-model="occupation" multiple="true">
              						<option value="0">請選擇職業</option>
              						<option value="1">教師</option>
              						<option value="2">軟件工程師</option>
              						<option value="3">律師</option>
              					</select>
              				</div>
              
              				<div>
              					<span>個人簡介:</span>
              					<textarea v-model="desc"></textarea>
              				</div>
              
              				<div>
              					<input type="submit" value="提交" @click.prevent="handle" />
              				</div>
              			</form>
              		</div>
              
              		<script type="text/javascript" src="js/vue.js"></script>
              		<script type="text/javascript">
              			var vm = new Vue({
              				el: '#app',
              				data: {
              					uname: 'list',
              					gender: 2,
              					hobby: ["2", "3"],
              					occupation: ["1"],
              					desc: "nihao"
              				},
              				methods: {
              					handle: function() {
              						// console.log(this.uname)
              						// console.log(this.gender)
              						// console.log(this.hobby)
              						console.log(this.occupation)
              					}
              				}
              			})
              		</script>
              	</body>
              </html>
              復制表單修飾符

              表單域修飾符

              /*
              		number: 轉化為數值
              		trim:  去掉開始和結尾的空格
              		lazy:  將input事件轉化為change事件
              		
              		<input v-model.number="age" type="number">
              */
              復制

              Example1

              <!DOCTYPE html>
              <html>
              	<head>
              		<meta charset="utf-8">
              		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
              		<title>Examples</title>
              		<meta name="description" content="">
              		<meta name="keywords" content="">
              		<link href="" rel="stylesheet">
              
              		<script type="text/javascript" src="lib/vue.js"></script>
              	</head>
              	<body>
              
              	<div id="box">
              		<!-- v-model.lazy 不會讓瀏覽器實時更新,只有失去焦點才會更新 -->
              		<input type="text" v-model.lazy="mytext" />
              		{{ mytext }}
              		
              		<!-- 限制用戶輸入出去數字外的其他字符 -->
              		<input type="number" v-model.number="mynumber" />
              		{{ mynumber }}
              	
              		<!-- 去除首,尾空格 -->
              		<input type="text" v-model.trim="myusername"/>
              		| {{ myusername }} |
              	</div>
              	
              	<script>
              		new Vue({
              			el: "#box",
              			data: {
              				mytext: "",
              				mynumber: 0,
              				myusername: ""
              			}
              		})
              	</script>
              	</body>
              </html>
              復制

              Example2

              <!DOCTYPE html>
              <html lang="en">
              
              	<head>
              		<meta charset="UTF-8">
              		<title>Document</title>
              	</head>
              
              	<body>
              		<div id="app">
              			<input type="text" v-model.number="age" />number
              			<input type="text" v-model.trim="info" />info
              			<input type="text" v-model.lazy="msg" />change
              			<div>{{ msg}}</div>
              			<button @click="handle">點擊</button>
              		</div>
              
              		<script type="text/javascript" src="js/vue.js"></script>
              		<script type="text/javascript">
              			/*
              				表單域修飾符
              			*/
              			var vm = new Vue({
              				el: '#app',
              				data: {
              					age: "",
              					info: '',
              					msg: ''
              				},
              				methods: {
              					handle: function() {
              						console.log(this.age + 13)
              						console.log(this.info.length)
              					}
              				}
              			})
              		</script>
              	</body>
              </html>
              復制
              關聯標簽:
              秋霞久久老子无码午夜精品,欧洲av成本人在线观看免费,亚洲精品无码国模av