Vue框架学习(一)

一、Vue简介

1.定义

Vue是一个基于JavaScript的渐进式框架。渐进式:可以控制一个页面的一个标签、一系列标签、也可以控制整个页面,甚至控制整个前台项目

2.vue的优势

有指令(分支结构,循环结构),复用页面结构

有实例成员(过滤器、监听),可以对渲染的数据做二次格式化

有组件(模块的复用和组合),可以快速搭建页面

3.三大前端框架
  • Angular (庞大)
  • React (常用于移动端)
  • Vue (吸取两者优势、轻量级)文档是中文

二、Vue环境搭建

"""
1)cdn
<script src="https://cn.vuejs.org/js/vue.js"></script>

2)本地导入
<script src="js/vue.js"></script>
"""

三、挂载点

Vue对象中,el表示挂载点

1.一个挂载点只能控制一个页面结构
2.挂载点挂在的页面标签严格建议使用id属性进行匹配
3.html标签与body标签不能作为挂载点
4.可以选择用变量去接受实例化的vue对象

四、插值表达式

1.空插值表达式 {{ }},需要有空格
2.{{ }}中渲染的变量需要在data中初始化
3.插值表达式可以进行简单运算
4.插值表达式与其他模版语法冲突时,可以用delimiters自定义

可以将delimiters插值表达式改为标识符为[{ }]。

<script src='js/vue.js'></script>
<script>
    let app = new Vue({
        el : '#app',
        data : {
            nums:[1,2,3,4]
        },
        delimiters:['[{','}]']
    })
</script>

插值表达式里可以调用属性、方法

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id='app'>
			<p>{{ nums[3] }}</p>
			<p>{{ }}</p>
			<p>{{ a + b }}</p>
			<p>{{ a + b * 2}}</p>
			<p>{{ msg.length + a }}</p>
			<p>{{ msg.split('') }}</p>
		</div>
	</body>
	<script src='js/vue.js'></script>
	<script>
		let app = new Vue({
			el : '#app',
			data : {
				a : 1,
				b : 2,
				msg : 'hello world',
				nums:[1,2,3,4]
			},
			// delimiters:['[{','}]']
		})
	</script>
</html>

五、过滤器

1.用实例成员filters来定义过滤器
2.在页面结构中,用|来标识并调用过滤器
3.过滤方法的返回值就是过滤器过滤后的结果
4.过滤器可以对1~n个变量进行过滤,同时还可以传入辅助的变量。过滤器方法接收参数时按照传入的位置从左到右。
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id="app">
			<p>{{ a,10|add|mutilply(10,20)}}</p>
		</div>
	</body>
	<script src='js/vue.js'></script>
	<script>
		let app = new Vue({
			el : "#app",
			data : {
				a : 1
			},
			filters:{
				add : function(a,b){
					return a + b
				},
				mutilply : function(a,b){
					return a * b
				}
			}
		})
	</script>
</html>
# 过滤器可以串联使用,从左到右执行。上一个过滤器的结果会当做下一个过滤器的参数传入。如果参数不够,则参数为undefined。如果参数太多,则多余的参数不会被接收。
<p>{{ n1, n2 | fn(99, 77), n1, n2 | fn(100) }}</p>

六、文本指令

1.v-*是vue指令,会被vue解析,v-text="num"中的num表示一个变量,如果在data中未定义num,则会报错。v-text="'num'",则表示字符串。
2.v-text是原样输出渲染内容。
3.v-html可以解析渲染html语法的内容

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id="app">
			<p v-text="msg"></p>
			<p v-text="'msg'"></p>
			<p v-text="true"></p>
			<p v-text="false"></p>
			<p v-text="111"></p>
			<p v-html="msg_html"></p>
		</div>
	</body>
	<script src='js/vue.js'></script>
	<script>
		let app = new Vue({
			el:"#app",
			data:{
				msg : 'hello world',
				msg_html: "<h1>hello world</h1>"
			}
		})
	</script>
</html>

七、js对象内容补充

1.js没有字典类型,只有自定义对象,可以完全替代字典来使用。
2.js中对象的属性名,都采用自字符串类型,所以就可以省略字符串的引号
3.对象中属性值为函数时,称之为方法,方法可以简写为: 方法名(){}
4.如果对象的属性值是一个变量,且变量名与属性名相同,则可以简写{属性,}

let obj = {
    'name' : "Bob",
    'eat' : function(){
    console.log("I'm eating...")
    }
}
console.log(obj.name,obj['name'])
obj.eat()

简写

let obj1 = {
    name:'Bob',
    eat(){
        console.log("I'm eating")
    }
}
console.log(obj1.name,obj1['name'])
obj1.eat()

属性简写

let height = 180
let obj2 = {
    height,
    name:'Bob',
}
console.log(obj2.height,obj2.name)

JS中类的声明

prototype为类属性赋值

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		
	</body>
	<script>
		let obj = {
			'name' : "Bob",
			'eat' : function(){
				console.log("I'm eating...")
			}
		}
		console.log(obj.name,obj['name'])
		obj.eat()
        
		// 方法简写 
		let obj1 = {
			name:'Bob',
			eat(){
				console.log("I'm eating")
			}
		}
		console.log(obj1.name,obj1['name'])
		obj1.eat()
		// 属性简写
		let height = 180
		let obj2 = {
			height,
			name:'Bob',
		}
		console.log(obj2.height,obj2.name)
		
		
		// js中声明一个类
		class People{
			constructor(name) {
			    this.name = name
			}
			eat(){
				console.log(this.name + " is eating...")
			}
		}
		let obj3 = new People('Kimmy')
		let obj4 = new People('David')
		console.log(obj3.name,obj3.school)
		console.log(obj4.name,obj4.school)
		obj3.eat()
		obj4.eat()
		People.prototype.school = 'OldBoy'
		console.log(obj3.name,obj3.school)
		console.log(obj4.name,obj4.school)
		
		// 第二种声明方式
		function Student(name){
			this.age =18
			this.name = name
			this.fly = function(){
				console.log(this.name + ' is flying')
			}
		}
		let obj5 = new Student('Amy')
		let obj6 = new Student('Daming')
		console.log(obj5.name,obj5.age)
		console.log(obj6.name,obj6.age)
		obj5.fly()
		obj6.fly()
		
	</script>
</html>

八、js函数内容补充

函数的形参和调用时传入的实参关系:传入和接收的参数个数不需要一致,按位置进行赋值,不存在关键字参数,多余的实参不会被接收,没有被赋值的形参会被赋值为undefined。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		
	</body>
	<script src="js/vue.js"></script>
	<script type="text/javascript">
		// 函数定义1
		function fn1(a,b){
			console.log(a+b)
			return a + b 
		}
		fn1(1,10)
		
		// 函数定义2
		let fn2 = function(a,b){
			console.log(a+b)
			return a + b 
		}
		fn2(1,10)
		
		// 箭头函数
		let fn3 = (a,b)=>{
			console.log(a+b)
			return a + b
		}
		fn3(1,10)
		
		
		// 箭头函数只有一条语句时可以省去{}
		let fn4 = (a,b)=>console.log(a*b +10)
		fn4(1,10)
		
		// 当形参只有一个时,可省略()
		let fn5 = a => console.log(a*a)
		fn5(10)
		
		console.log(5)
		console.log(10+ '5')
		console.log('55555')
		// 快速类型转换 字符串 ---> 数字类型
		console.log(+'55555')
	</script>
</html>

九、事件指令

* 一、数据驱动
*  1)操作是一个功能,使用需要一个方法来控制 2)方法名是变量,所以控制变量就可以控制该方法
*
*
* 二、事件指令
*  1)在实例成员methods中声明事件方法
*  2)标签通过事件指令绑定声明的方法: v-on:事件名="事件方法名"   eg: <button v-on:click="btnClick">按钮</button>

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id="app">
			<!-- 直接绑定事件名默认传入事件对象 -->
			<button v-on:click="my_click">{{ btn }}</button>
			
			<!-- 加括号手动传入参数,$event可传入事件对象-->
			
			<p>{{ num }}</p>
			<p v-text="msg"></p>
			<button v-on:click="increase(btn1,$event)">{{ btn1 }}</button>
			<button v-on:click="decrease(btn2,$event)">{{ btn2 }}</button>
			<hr>

		</div>
		
	</body>
	<script src="js/vue.js"></script>
	<script>
		let app = new Vue({
			el:'#app',
			data:{
				num: 0,
				btn:'点我',
				btn1:'增加',
				btn2:'减少',
				msg:'',
			},
			methods:{
				my_click(ev){
					console.log(ev)
				},
				increase(btn,ev){
					this.num++
					this.msg = '你点击了' + btn
					console.log(ev.clientX,ev.clientY)
				},
				decrease(btn){
					this.num--
					this.msg = '你点击了' + btn
				}
			}
		})
	</script>
</html>

posted @ 2020-02-16 14:55  GhostAnt  阅读(1212)  评论(0编辑  收藏  举报