Vue基础

表单指令

语法:
- v-model="变量",变量与value值有关
- 与input框value值紧密相连
- 指的是输入框和变量绑定在一起,变量变,浏览器上的值也变,浏览器输入框的值变,变量的值也变。

<div id="app">
	<form action="">
		<p>input框数据双向绑定</p>
		<p>请输入:<input type="text" v-model="v1"></p>
		<p>请输入:<input type="password" v-model="v1"></p>
		<p>输入的值是:{{ v1 }}</p>
		<hr>
		<br>
		
		<p>input框单选数据双向绑定</p>
		<span>男:<input type="radio" v-model="v2" value="nan"><span>
		<span>女:<input type="radio" v-model="v2" value="nv"><span>
		<p>选择的值是:{{ v2 }}</p>
		<hr>
		<br>

		<p>input框单一复选框选数据双向绑定</p>
		<p><input type="checkbox" v-model="v3">阅读条款并同意协议</p>
		<p>选择的值是:{{ v3 }}</p>
		<hr>
		<br>

		<p>input框多选复选框数据双向绑定</p>
		<p>爱好:</p>
		<span>篮球:<input type="checkbox" value="篮球" v-model="v4"><span>
		<span>乒乓球:<input type="checkbox" value="乒乓球" v-model="v4"></span>
		<span>上网:<input type="checkbox" value="上网" v-model="v4"></span>
		<p>选择的值是:{{ v4 }}</p>
		<hr>
		<br>
		
		<button type="submit">提交</button>
	</form>
</div>

条件指令

  • v-show="布尔值变量" 如果为false,会加display:none属性
  • v-if="布尔值变量" 如果为false,不会渲染此标签
  • v-if | v-else-if | v-else
<div class="box r" v-show="is_show"></div>
<div class="box b" v-if="is_if"></div>


<div>
	<div>
		<button @click="page='r_page'" :class="{active:page === 'r_page'}">红</button>
		<button @click="page='b_page'" :class="{active:page === 'b_page'}">蓝</button>
		<button @click="page='g_page'" :class="{active:page === 'g_page'}">绿</button>
	</div>

	<div v-if="page === 'r_page'" class="box r"></div>
	<div v-else-if="page === 'b_page'" class="box b" ></div>
	<div v-else class="box g"></div>
</div>


<script>
let app = new Vue({
	el: '#app',
	data: {
		is_show:true,
		is_if:true,
		page:'r_page',
	}
})

循环指令

<p v-for="v,i in str">
	{{ i }}-{{ v }}
</p>

<hr>

<!-- 按key循环出每个key的值, -->
<p v-for="v in dic">	
	{{ v }}
</p>
<hr>

<!-- 按key循环出每个key的值,可增加其他如 显示key -->
<p v-for="v,k in dic">
	{{ k }}-{{ v }}
</p>
<hr>

循环指令使用小例子

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			li:hover {
				color: red;
				cursor: pointer;
			}
		</style>
	</head>
	<body>
		<div id="app">
			<input type="text" v-model="msg">
			<button type="button" @click="send_msg">留言</button>
			<ul>
				<li v-for="v,i in content" @click="delete_msg(i)">{{ i }}-{{ v }}</li>
			</ul>
		</div>

		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
		<script>
			let app = new Vue({
				el:'#app',
				data:{
					msg:'',
					// 利用三元表达式获取前端浏览器的数据库的数据。
					content:localStorage.msg ? JSON.parse(localStorage.msg) : [],
				},
				methods:{
					send_msg(){
						// 判断用户是否输入内容
						if (!this.msg){
							alert('请输入内容')
							// 如果进入判断了就停止运行下面的代码
							return false;
						}
						// 将用户输入的内容添加到数组对象中,
						// for循环只要对content数组对象for循环展示即可。
						this.content.push(this.msg)
						// 用户输入 完毕之后清空输入框。
						this.msg = ""
						
						// 保存到前端浏览器数据库中
						localStorage.msg = JSON.stringify(this.content)
					},
					delete_msg(i){
						console.log(i)
						// 数组操作方法
						// splice 三个参数说明:从什么索引开始,操作几个,是否删除
						this.content.splice(i,1)
						localStorage.msg = JSON.stringify(this.content)
					}
				}
			})
		</script>
	</body>
</html>

前端数据库

前端数据库:
// 前台数据库
// localStorage: 永久存储
// sessionStorage:临时存储(所属页面标签被关闭后,清空)

// 存
// localStorage.n1 = 10;
// sessionStorage.n2 = 20;

// 取
// console.log(localStorage.n1);
// console.log(sessionStorage.n2);

// 数组等类型需要先序列化成JSON
// localStorage.arr = JSON.stringify([1, 2, 3]);
// console.log(JSON.parse(localStorage.arr));

// 清空数据库
// localStorage.clear();

分隔符(了解)

修改插值表达式的符号
delimiters:['[{','}]']

<div id="app">
	{{ msg }}
	[{ msg }]
</div>


<script>
	let app = new Vue({
		el:'#app',
		data:{
			msg:'msg',
		},
		// 修改插值表达式的符号
		delimiters:['[{','}]']
	})
</script>

过滤器

关键字:
filters:{函数}

<div id='app'>
		<p>
			{{ num | f1 }}
		</p>
		
		<p>
			{{ a,b | f2(10,20) | f3 }}
		</p>
	
</div>


<script>
	let app = new Vue({
		el: '#app',
		data: {
			num:1,
			a:10,
			b:20,
		},
		// 传入所有需要过滤的条件,使用flters关键字定义过滤器
		filters:{
			// 如果多接收参数 则没有值
			f1(num,a,b){
				console.log(num,a,b);
				return num * 10;
			},
			// 如果在{{}} 中调用函数的时候传入多余的参数,则接收多余的参数
			f2(a,b,c,d){
				console.log(a,b,c,d);
				return a + b + c + d; 
			},
			// 可以对过滤的结果进行再次过滤(过滤串联)
			f3(num) {
				return num * num
			}
		}
	})
</script>

计算属性

关键字:computed
主要用于一个方法的属性值依赖于多个变量,处理多个变量的作用

<div id="app">
	<input type="number" min="0" max="100" v-model="n1">
	+
	<input type="number" min="0" max="100" v-model="n2">
	=
	<input type="button">{{ result }}
</div>

<script>
	let app = new Vue({
		el:'#app',
		data:{
			n1:'',
			n2:''
		},
		computed:{
			result(){
				console.log('被调用了');
				n1 = +this.n1;
				n2 = +this.n2;
				return n1 +n2;
			}
		}
	})
</script>

监听属性

关键字:watch
处理统一个变量,与计算属性相反


<div id="app">
	<p>姓名:<input type="text" v-model="full_name"></p>
	<p>姓:{{ first_name }}</p>
	<p>名:{{ last_name }}</p>
</div>

<script>
	let app = new Vue({
		el:'#app',
		data:{
			full_name:'',
			first_name:'未知',
			last_name:'未知'
		},
		watch:{
			full_name(n,o){
				// 可以接收两个参数
				// 第一个是当前的输入的值,第二个是上一次输入的值
				name_arr = n.split('');
				console.log(name_arr[0])
				this.first_name = name_arr[0];
				this.last_name = name_arr[1];
		}
		}
	})
</script>

冒泡排序



<script>
	let a = [4,2,5,7,2,3]
	// 4.2.5.6.7.8
	
	// 推导步骤
	// 2,4,5,7,2,3
	// 2,4,5,2,7,3
	// 2,4,5,2,3,7
	// 2,4,2,5,3,7
	// 2,4,2,3,5,7
	// 2,2,4,3,5,7
	// 2,2,3,4,5,7
	
	for (let i=0;i<a.length-1;i++){
		for (j=0;j<a.length-1-i;j++){
			if (a[j] > a[j+1]){
				let tmp = a[j]
				a[j] = a[j+1]
				a[j+1] = tmp
			}
			
		}
	}
	console.log(a)
</script>

posted @ 2019-12-17 20:06  GeminiMp  阅读(137)  评论(0编辑  收藏  举报