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


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 在背后做了大量工作。現在數據和 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-bind attribute 被稱為指令。指令帶有前綴 v-,以表示它們是 Vue 提供的特殊 attribute。可能你已經猜到了,它們會在渲染的 DOM 上應用特殊的響應式行為。在這里,該指令的意思是:“將這個元素節點的 title attribute 和 Vue 實例的 message property 保持一致”。

如果你再次打開瀏覽器的 JavaScript 控制台,輸入 app2.message = '新消息',就會再一次看到這個綁定了 title attribute 的 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 href="http://www.baidu.com" @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 href="http://www.baidu.com" @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 會忽略所有表單元素的 valuecheckedselected attribute 的初始值而總是將 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>

在文本區域插值 () 並不會生效,應用 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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM