看完还不懂,我就吃x系列,Vue全家桶

目录

第一章、Vue基础

1.1. Vue 简介

1.1.1. 官网

1.1.2. 介绍与描述

1.1.3. Vue 的特点

1.1.4. 与其它 JS 框架的关联

1.1.5. Vue 周边库

1.2. 初识 Vue

1.3. 模板语法

1.4. 数据绑定

1.5. MVVM 模型

1.5.1.el与data的两种写法

1.5.2.Vue中的MVVM

1.5.3.回顾Object.defineProperty方法

​ 

1.5.4.何为数据代理

1.5.5.Vue中的数据代理

1.6. 事件处理

1.7. 计算属性与监视


第一章、Vue基础

1.1. Vue 简介

1.1.1. 官网

1. 英文官网: https://vuejs.org/

2. 中文官网: https://cn.vuejs.org/

1.1.2. 介绍与描述

1. 动态构建用户界面的渐进式 JavaScript 框架

2. 作者: 尤雨溪

1.1.3. Vue 的特点

1. 遵循 MVVM 模式

2. 编码简洁, 体积小, 运行效率高, 适合移动/PC 端开发3. 它本身只关注 UI, 也可以引入其它第三方库开发项目

1.1.4. 与其它 JS 框架的关联

1. 借鉴 Angular 的模板数据绑定技术

2. 借鉴 React 的组件化虚拟 DOM 技术

1.1.5. Vue 周边库

1. vue-cli: vue 脚手架

2. vue-resource

3. axios

4. vue-router: 路由

5. vuex: 状态管理

6. element-ui: 基于 vue 的 UI 组件库(PC 端)

1.2. 初识 Vue

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>初识Vue</title>
		<!-- 引入Vue -->
		<script type="text/javascript" src="../js/vue.js"></script>
	</head>
	<body>
		<!--
			初识Vue:
				1.想让Vue工作,就必须创建一个Vue实例,且要传入一个配置对象;
				2.root容器里的代码依然符合html规范,只不过混入了一些特殊的Vue语法;
				3.root容器里的代码被称为【Vue模板】;
				4.Vue实例和容器是一一对应的;
				5.真实开发中只有一个Vue实例,并且会配合着组件一起使用;
				6.{{xxx}}中的xxx要写js表达式,且xxx可以自动读取到data中的所有属性;
				7.一旦data中的数据发生改变,那么页面中用到该数据的地方也会自动更新;

				注意区分:js表达式 和 js代码(语句)
						1.表达式:一个表达式会产生一个值,可以放在任何一个需要值的地方:
									(1). a
									(2). a+b
									(3). demo(1)
									(4). x === y ? 'a' : 'b'

						2.js代码(语句)
									(1). if(){}
									(2). for(){}
		-->

		<!-- 准备好一个容器 -->
		<div id="demo">
			<h1>Hello,{{name.toUpperCase()}},{{address}}</h1>
		</div>

		<script type="text/javascript" >
			Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

			//创建Vue实例
			new Vue({
				el:'#demo', //el用于指定当前Vue实例为哪个容器服务,值通常为css选择器字符串。
				data:{ //data中用于存储数据,数据供el所指定的容器去使用,值我们暂时先写成一个对象。
					name:'vue',
					address:'广东'
				}
			})

		</script>
	</body>
</html>

1.3. 模板语法

1.3.1. 效果

代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8"/>
    <title>模板语法</title>
    <!-- 引入Vue -->
    <script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
<!--
        Vue模板语法有2大类:
            1.插值语法:
                    功能:用于解析标签体内容。
                    写法:{{xxx}},xxx是js表达式,且可以直接读取到data中的所有属性。
            2.指令语法:
                    功能:用于解析标签(包括:标签属性、标签体内容、绑定事件.....)。
                    举例:v-bind:href="xxx" 或  简写为 :href="xxx",xxx同样要写js表达式,
                             且可以直接读取到data中的所有属性。
                    备注:Vue中有很多的指令,且形式都是:v-????,此处我们只是拿v-bind举个例子。

 -->
<!-- 准备好一个容器-->
<div id="root">
    <h1>插值语法</h1>
    <h3>你好,{{name}}</h3>
    <hr/>
    <h1>指令语法</h1>
    <a v-bind:href="school.url.toUpperCase()" x="hello">点我去{{school.name}}--a便签1</a>
    <a :href="school.url" x="hello">点我去{{school.name}}--a便签1</a>
</div>
</body>

<script type="text/javascript">
    Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

    new Vue({
        el: '#root',
        data: {
            name: 'jack',
            school: {
                name: '百度',
                url: 'http://www.baidu.com',
            }
        }
    })
</script>
</html>

1.3.2. 模板的理解

html 中包含了一些 JS 语法代码,语法分为两种,分别为:
1. 插值语法(双大括号表达式)
2. 指令(以 v-开头)

1.3.3. 插值语法

1. 功能: 用于解析标签体内容
2. 语法: {{xxx}} ,xxxx 会作为 js 表达式解析

1.3.4. 指令语法

1. 功能: 解析标签属性、解析标签体内容、绑定事件
2. 举例:v-bind:href = 'xxxx' ,xxxx 会作为 js 表达式被解析
3. 说明:Vue 中有有很多的指令,此处只是用 v-bind 举个例子

1.4. 数据绑定

1.4.1. 效果

code

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>数据绑定</title>
		<!-- 引入Vue -->
		<script type="text/javascript" src="../js/vue.js"></script>
	</head>
	<body>
		<!--
			Vue中有2种数据绑定的方式:
					1.单向绑定(v-bind):数据只能从data流向页面。
					2.双向绑定(v-model):数据不仅能从data流向页面,还可以从页面流向data。
						备注:
								1.双向绑定一般都应用在表单类元素上(如:input、select等)
								2.v-model:value 可以简写为 v-model,因为v-model默认收集的就是value值。
		 -->
		<!-- 准备好一个容器-->
		<div id="root">
			<!-- 普通写法 -->
			<!-- 单向数据绑定:<input type="text" v-bind:value="name"><br/>
			双向数据绑定:<input type="text" v-model:value="name"><br/> -->

			<!-- 简写 -->
			单向数据绑定:<input type="text" :value="name"><br/>
			双向数据绑定:<input type="text" v-model="name"><br/>

			<!-- 如下代码是错误的,因为v-model只能应用在表单类元素(输入类元素)上 -->
			<!-- <h2 v-model:x="name">你好啊</h2> -->
		</div>
	</body>

	<script type="text/javascript">
		Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

		new Vue({
			el:'#root',
			data:{
				name:'请输入'
			}
		})
	</script>
</html>

1.4.2. 单向数据绑定

1. 语法:v-bind:href ="xxx" 或简写为 :href
2. 特点:数据只能从 data 流向页面

1.4.3. 双向数据绑定

1. 语法:v-mode:value="xxx" 或简写为 v-model="xxx"
2. 特点:数据不仅能从 data 流向页面,还能从页面流向 data

1.5. MVVM 模型

1. M:模型(Model) :对应 data 中的数据
2. V:视图(View) :模板
3. VM:视图模型(ViewModel) : Vue 实例对象

1.5.1.el与data的两种写法

效果
code
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>el与data的两种写法</title>
		<!-- 引入Vue -->
		<script type="text/javascript" src="../js/vue.js"></script>
	</head>
	<body>
		<!--
			data与el的2种写法
					1.el有2种写法
									(1).new Vue时候配置el属性。
									(2).先创建Vue实例,随后再通过vm.$mount('#root')指定el的值。
					2.data有2种写法
									(1).对象式
									(2).函数式
									如何选择:目前哪种写法都可以,以后学习到组件时,data必须使用函数式,否则会报错。
					3.一个重要的原则:
									由Vue管理的函数,一定不要写箭头函数,一旦写了箭头函数,this就不再是Vue实例了。
		-->
		<!-- 准备好一个容器-->
		<div id="root">
			<h1>你好,{{name}}</h1>
		</div>
	</body>

	<script type="text/javascript">
		Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

		//el的两种写法
		/* const v = new Vue({
			//el:'#root', //第一种写法
			data:{
				name:'尚硅谷'
			}
		})
		console.log(v)
		v.$mount('#root') //第二种写法 */

		//data的两种写法
		new Vue({
			el:'#root',
			//data的第一种写法:对象式
			/* data:{
				name:'尚硅谷'
			} */

			//data的第二种写法:函数式
			data(){
				console.log('@@@',this) //此处的this是Vue实例对象
				return{
					name:'VUE'
				}
			}
		})
	</script>
</html>

1.5.2.Vue中的MVVM

 效果

code

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>理解MVVM</title>
		<!-- 引入Vue -->
		<script type="text/javascript" src="../js/vue.js"></script>
	</head>
	<body>
		<!--
			MVVM模型
						1. M:模型(Model) :data中的数据
						2. V:视图(View) :模板代码
						3. VM:视图模型(ViewModel):Vue实例
			观察发现:
						1.data中所有的属性,最后都出现在了vm身上。
						2.vm身上所有的属性 及 Vue原型上所有属性,在Vue模板中都可以直接使用。
		-->
		<!-- 准备好一个容器-->
		<div id="root">
			<h1>名称:{{name}}</h1>
			<h1>地址:{{address}}</h1>
			<!-- <h1>测试一下1:{{1+1}}</h1>
			<h1>测试一下2:{{$options}}</h1>
			<h1>测试一下3:{{$emit}}</h1>
			<h1>测试一下4:{{_c}}</h1> -->
		</div>
	</body>

	<script type="text/javascript">
		Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

		const vm = new Vue({
			el:'#root',
			data:{
				name:'Vue',
				address:'北京',
			}
		})
		console.log(vm)
	</script>
</html>

1.5.3.回顾Object.defineProperty方法

 

code

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>回顾Object.defineproperty方法</title>
	</head>
	<body>
		<script type="text/javascript" >
			let number = 18
			let person = {
				name:'张三',
				sex:'男',
			}
        //给person这个实例子添加了age这个成员属性,并且设置其get和set方法
			Object.defineProperty(person,'age',{
				// value:18,
				// enumerable:true, //控制属性是否可以枚举,默认值是false
				// writable:true, //控制属性是否可以被修改,默认值是false
				// configurable:true //控制属性是否可以被删除,默认值是false

				//当有人读取person的age属性时,get函数(getter)就会被调用,且返回值就是age的值
				get(){
					console.log('有人读取age属性了')
					return number
				},

				//当有人修改person的age属性时,set函数(setter)就会被调用,且会收到修改的具体值
				set(value){
					console.log('有人修改了age属性,且值是',value)
					number = value
				}

			})

			// console.log(Object.keys(person))

			console.log(person)
			console.log(person.age)
            person.age=20
		</script>
	</body>
</html>

1.5.4.何为数据代理

效果

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>何为数据代理</title>
	</head>
	<body>
		<!-- 数据代理:通过一个对象代理对另一个对象中属性的操作(读/写)
		-->
		<script type="text/javascript" >
			let obj = {x:100}
			let obj2 = {y:200}

			Object.defineProperty(obj2,'x',{
				get(){
				    console.log('进入logj2的x获取方法get()')
					console.log('其值为obj的x')
					return obj.x
				},
				set(value){
                    console.log('设置logj2的x的值')
                    console.log('修改obj对象的x值')
					obj.x = value
				}
			})
			console.log(obj2.x)

		</script>
	</body>
</html>

 效果2

 

code

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>何为数据代理</title>
	</head>
	<body>
		<!-- 数据代理:通过一个对象代理对另一个对象中属性的操作(读/写)
            例如
                obj2对obj1中属性的操作
		-->
		<script type="text/javascript" >
			let obj = {x:100}
			let obj2 = {y:200}

			Object.defineProperty(obj2,'x',{
				get(){
				    console.log('进入logj2的x获取方法get()')
					console.log('其值为obj的x')
					return obj.x
				},
				set(value){
                    console.log('设置logj2的x的值')
                    console.log('修改obj对象的x值')
					obj.x = value
				}
			})
			console.log('obj.x='+obj.x)
			console.log('设置obj2的x的值为2,obj2.x=2')
            obj2.x=2
            console.log('获取obj2.x')
			console.log(obj2.x)

		</script>
	</body>
</html>


1.5.5.Vue中的数据代理

 

可以看到原生vue的对象vm中已经有了name和address两个属性,该属性为data上的属性,即vm代理data做get和set操作

 code

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8"/>
    <title>Vue中的数据代理</title>
    <!-- 引入Vue -->
    <script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
<!--
        1.Vue中的数据代理:
                    通过vm对象来代理data对象中属性的操作(读/写)
        2.Vue中数据代理的好处:
                    更加方便的操作data中的数据
        3.基本原理:
                    通过Object.defineProperty()把data对象中所有属性添加到vm上。
                    为每一个添加到vm上的属性,都指定一个getter/setter。
                    在getter/setter内部去操作(读/写)data中对应的属性。
 -->
<!-- 准备好一个容器-->
<div id="root">
    <h2>Vue中的数据代理name:{{name}}</h2>
    <h2>Vue中的数据代理address:{{address}}</h2>
</div>
</body>

<script type="text/javascript">
    Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

    const vm = new Vue({
        el: '#root',
        data: {
            name: 'Vue',
            address: 'beijin'
        }
    })
    console.log(vm)
</script>
<script type="text/javascript">
    //模拟通过vm对象来代理data对象中属性的操作(读/写) 更别用vmTest,dataTest来代替二者
    //在控制台中对比vm和vmTest的值
    let dataTest = {
        name: 'Vue',
        address: 'beijin'
    }
    let vmTest = {y: 200}

    Object.defineProperty(vmTest, 'name', {
        get() {
            return dataTest.name
        },
        set(value) {
            dataTest.name = value
        }
    })
    Object.defineProperty(vmTest, 'address', {
        get() {
            return dataTest.address
        },
        set(value) {
            dataTest.address = value
        }
    })
    console.log(vmTest)


</script>


</html>

 

 

1.6. 事件处理

1.6.1. 效果

1.6.2. 绑定监听

1. v-on:xxx="fun"
2. @xxx="fun"
3. @xxx="fun(参数)"
4. 默认事件形参: event
5. 隐含属性对象: $event

1.6.3. 事件修饰符

1. .prevent : 阻止事件的默认行为 event.preventDefault()
2. .stop : 停止事件冒泡 event.stopPropagation()

1.6.4. 按键修饰符

1. keycode : 操作的是某个 keycode 值的键
2. .keyName : 操作的某个按键名的键(少部分)

1.7. 计算属性与监视

1.7.1. 效果

1.7.2. 计算属性-computed

1. 要显示的数据不存在,要通过计算得来。
2. 在 computed 对象中定义计算属性。
3. 在页面中使用{{方法名}}来显示计算的结果。

1.7.3. 监视属性-watch

1. 通过通过 vm 对象的$watch()或 watch 配置来监视指定的属性
2. 当属性变化时, 回调函数自动调用, 在函数内部进行计算

1.8. class 与 style 绑定

1.8.1. 理解

1. 在应用界面中, 某个(些)元素的样式是变化的

2. class/style 绑定就是专门用来实现动态样式效果的技术

1.8.2. class 绑定

1. :class='xxx'

2. 表达式是字符串: 'classA'

3. 表达式是对象: {classA:isA, classB: isB}4. 表达式是数组: ['classA', 'classB']

1.8.3. style 绑定

1. :style="{ color: activeColor, fontSize: fontSize + 'px' }"

2. 其中 activeColor/fontSize 是 data 属性

1.9. 条件渲染

1.9.1. 条件渲染指令

1. v-if 与 v-else

2. v-show

1.9.2. 比较 v-if 与 v-show

1. 如果需要频繁切换 v-show 较好

2. 当条件不成立时, v-if 的所有子节点不会解析(项目中使用)1.10. 列表渲染

1.10.1. 效果

1.10.2. 列表显示指令

遍历数组: v-for / index

遍历对象: v-for / key1.11. 收集表单数据

1.12. 过滤器

1.12.1. 效果1.12.2. 理解过滤器

1.

功能: 对要显示的数据进行特定格式化后再显示

2.

注意: 并没有改变原本的数据, 是产生新的对应的数据

1.13. 内置指令与自定义指令

1.13.1. 常用内置指令

1. v-text : 更新元素的 textContent

2. v-html : 更新元素的 innerHTML

3. v-if : 如果为 true, 当前标签才会输出到页面

4. v-else: 如果为 false, 当前标签才会输出到页面

5. v-show : 通过控制 display 样式来控制显示/隐藏

6. v-for : 遍历数组/对象

7. v-on : 绑定事件监听, 一般简写为@

8. v-bind : 绑定解析表达式, 可以省略 v-bind

9. v-model : 双向数据绑定

10. v-cloak : 防止闪现, 与 css 配合: [v-cloak] { display: none }1.13.2. 自定义指令

1. 注册全局指令

Vue.directive('my-directive', function(el, binding){

el.innerHTML = binding.value.toupperCase()

})

2. 注册局部指令

directives : {

'my-directive' : {

bind (el, binding) {

el.innerHTML = binding.value.toupperCase()

}

}

}

1) 使用指令

v-my-directive='xxx'

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Spider Cat 蜘蛛猫

你的鼓励将会是我最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值