美年旅游项目自记录Day02

一、前段框架Vue.js学习

工具: HBuilderX iDE

MVVM模式:模型、视图、视图模型

可通过官网快速入门进行上手vue官网

常规HelloWorld练习

		<!--View 视图-->
		<div id="app">
			{
   
   {message}}
		</div>
	
		<script type="text/javascript">
			// viewmodel 视图模型
			var vm = new Vue({
				el:'#app',
				data:{ //model 模型
					message:'hellow,Vue...'
				}		
			})
		</script>

MVVM本质是MVC的改进,viewmodel作为model与view的中间层,将view的状态和行为抽象化,实现视图、模型的双向数据绑定,达到M、V的分离解耦。

1、常用系统指令(重点)

  • v-on事件(等同于@)

        v-on:click(等同于@click)

		<div id="app">
			{
   
   {message}}
			<br>
			<!-- <button v-on:click="fun('good')" >赋值</button> -->
			<button @click="fun('good')">赋值2</button>
		</div>
		
		<script type="text/javascript">
			var vm = new Vue({ 
				el: '#app',
				data: {
					message: 'hello, vue'
				},
				methods: {
					fun:function(msg){
						this.message = msg
					}
				}	
			})
		</script>

        v-on:keydown(等同于@keydown)

		<div id="app">
			输入:<input v-on:keydown="fun($event)" />
		</div>
		
		<script type="text/javascript">
			var vm = new Vue({
				
				el: '#app',
				data: {

				},
				methods: {
					fun:function(e) {
						var keyCode = e.keyCode
						if (!(keyCode >= 48 && keyCode <= 57)){
							e.preventDefault()
						}
					}
				}
			})
		</script>

        v-on:mouseouver

		<div id="app">
			<div class='father' @mouseover="alert('father')">
				<div class="son" @mouseover.stop="alert('son')">
						
				</div>
			</div>
		</div>

        还有更多操作,此处不一一演示

  • v-text与v-html:文本
		<div id="app">
			<div v-text="message"></div>
			<div v-html="message"></div>

		</div>
		
		<script type="text/javascript">
			var vm = new Vue({
				
				el: '#app',
				data: {
					message: '<h1>你好啊</h1>'
				},
				methods: {
						
				}
			})
		</script>
  • v-bind:属性

        v-bind可省略,但要:开头

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="./js/vue.min.js" type="text/javascript" charset="utf-8"></script>
		<style>
			.red{
				color: red;
			}
			.big{
				font-size: 30px;
			}
		</style>

	</head>
	<body>

		<div id="app">
			<p >Fionn</p>
			<p class="red big">Fionn</p>
			<p :class="{red:isRed,big:isBig}">Fionn</p>
			<!-- 在数组中使用三元表达式 -->
			<p :class="[ok?'red':'','big']">Fionn</p>
			<!-- 直接传递一个数组,注意: 这里的 class 需要使用  v-bind 做数据绑定 -->
			<p :class="[showred,'big']">Fionn</p>
			<a :href="url">Fionn</a>
		</div>

		<script type="text/javascript">
			var vm = new Vue({

				el: '#app',
				data: {
					isRed: true,
					isBig: true,
					ok: true,
					showred: 'red',
					url: "http://www.niubi.com"
				},
				methods: {

				}
			})
		</script>
	</body>
</html>
  • v-model:

        用于读取视图数据(表单回显)

<!DOCTYPE html>
<html lang="en">

    <head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta http-equiv="X-UA-Compatible" content="ie=edge">
	<title>Document</title>
	<script type="text/javascript" src="js/vue.min.js"></script>
    </head>

    <body>
	<div id="app">			
	<p>
		<label>用户名:</label>{
   
   {username}}<br>
		<input type="text" v-model="username" />
		<input type="button" value="改变值" @click="fnChange" />
	</p>
			
	    <select v-model="sel">
		<option value="0">大班</option>
		<option value="1">中班</option>
		<option value="2">小班</option>
	    </select>
	    {
   
   {sel}}
	    <br />
	    <input type="checkbox" v-model="danCheck"/>同意用户协议<br />
	    <h1>{
   
   {danCheck}}</h1>
	    <input type="checkbox" value="西瓜" v-model="duoCheck" />西瓜
	    <input type="checkbox" value="苹果" v-model="duoCheck" />苹果
	    <input type="checkbox" value="黄瓜" v-model="duoCheck" />黄瓜
	    <h1>{
   
   {duoCheck}}</h1>
	    <input type="radio" value="男" v-model="sex"/>男
	    <input type="radio" value="女" v-model="sex" />女
			
	    <hr />
	    <textarea v-model="tarea"></textarea>
	    <h1>{
   
   {tarea}}</h1>
	</div>
    </body>
    <script type="text/javascript">
	var vm = new Vue({
		el: "#app",
		data: {
			sel:'0',
			username: "",
			danCheck:true,
			duoCheck:[],
			sex:'男',
			tarea:'',
		},
		methods: {
			fnChange: function() {
				this.username += 'haha'
			}
		}
	})
    </script>

</html>
  • v-for

        用于操作array/集合的遍历

        其中参数顺序不能变

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="./js/vue.min.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<div id="app">
			<p v-for="item in list">
				{
   
   {item}}
			</p>

			<p v-for="(obj, index) in list2">
				{
   
   {index}} --- {
   
   {obj.id}} --- {
   
   {obj.name}}
			</p>

			<p v-for="(val, key, idx) in user">
				{
   
   {idx}} -- {
   
   {key}} -- {
   
   {val}} 
			</p>

            <p v-for="cnt in 10">
                第几次循环{
   
   {cnt}}
            </p>
		</div>

		<script type="text/javascript">
			var vm = new Vue({
				el: '#app',
				data: {
					//数组
					list: [1, 2, 3, 4, 5, 6],
					//对象数组
					list2: [
						{id: 1, name: 'nb1'},
						{id: 2, name: 'nb2'},
						{id: 2, name: 'nb3'},
						{id: 2, name: 'nb4'}
					],
					user: {
						id: 1,
						name: '马牛逼',
						skill: 'eat shit'
					}
				},
				methods: {

				}
			})

		</script>
	</body>
</html>
  •  v-if与v-show

        v-if可对比jq核心标签<c:if>

        v-show 类似input标签的hidden类型 visibility

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="./js/vue.min.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<div id="app">
			<p v-if="ok">这是使用了v-if的p标签</p>
			<p v-else>这是使用了v-else的p标签</p>

			<p v-show="ok">这是使用v-show的p标签</p>

			<div v-if="code=='A'">A</div>
			<div v-else-if="code=='B'">B</div>
			<div v-else-if="code=='C'">C</div>
			<div v-else>NOT A/B/C</div>
		</div>

		<script type="text/javascript">
			var vm = new Vue({
				el: '#app',
				data: {
					ok: true,
					code: 'D'
				},
				methods: {

				}
			})
		</script>

	</body>
</html>

简单小结:v-on(事件处理)、v-text/v-html(文本处理)、v-bind(属性绑定)、v-model(表单回显)、v-for(循环数据)、v-if(判断)、v-show(是否显示)

2.Vuejs的生命周期

vue对象的创建、赋值、显示、改值、销毁的全过程

创建对象前,模型数据、el视图元素,不可获取,差值表达式未解析,视图区域不能显示

创建对象后, 模型数据可以获取,el视图元素不可获取,差值表达式未解析,视图区域不能显示

Dom对象挂载前,模型数据,el视图元素可获取,差值表达式未解析,视图区域不能显示

Dom对象挂载后,模型数据,el视图元素可获取,差值表达式解析,视图区域可以显示

更新数据前,模型数据发生改变,但是视图(view)并未改变

更新数据后,view改变

对象销毁前后,所有的东西都可获取

3.Vuejs ajax(异步请求处理)

  • vue-resource(不在更新)
  • axios
		<script type="text/javascript">
			//通过给定的ID来发送请求
			//then表示请求成功的回调处理,与jquery ajax()函数的success属性是等价的
			//catch()表示请求失败的回调处理,与jquery ajax()函数的error属性是等价的
			//finally()与java异常处理类似
			axios.get('/user?ID=12345').then(function(response) {
				console.log(response);
			}).catch(function(err) {
				console.log(err);
			}).finally(function() {

			});


            //另一种写法
			axios.get('/user', {
				params: {
					ID: 12345
				}
			}).then(function(response) {
				console.log(response);
			}).catch(function(err) {
				console.log(err);
			}).finally(function() {

			});

            //Post请求
			axios.post('/user',{
				name:'张三',
				age:'22'
			}).then(function(res){
				console.log(res);
			}).catch(function(err){
				console.log(err);
			}).finally(function(){
			
			});
  
		</script>

Guess you like

Origin blog.csdn.net/m0_49575554/article/details/121532316