VUE基础知识一(基本的知识回顾)

HELLO WORLD VUE:

参看链接vue

vue -cli 构建vue 工程,对于开发版本和生产版本不同在于,开发版本中包中文件没有经过压缩,方便进行调试和查看对应的脚本信息

1. npm install -g @vue/cli
2. vue create my-project-name

let : 定义变量,const 定义常量一旦初始化,无法重新定义

  1.对于原始jS中与Vue 区别:传统方式采用命令式编程,vue采用生命式编程(实例管理,只需要声明的变量)
   1). 创建div 元素,设置id 属性
    2). 定义一个变量叫message
    3). 将message 变量放到前面div 元素中显示
    声明方式将数据和界面进行分类,只需要嵌套一些东西,vue中变量数据放生变化,界面数据会发生变化, vue 的响应式非常强大

vue 计数器:

思路:定义一个变量,通过按钮让变量值发生变化,增加或者减少。v-on:click 指令进行监听

<!DOCTYPE html>
<html>
   <head>
   	<meta charset="utf-8">
   	<title></title>
   </head>
   <body>
   	<div id = "app">
   		
   		<h2>当前技术: {{counter}}</h2>
   		<!--通过添加函数-->
   		<button v-on:click= "add">+</button>
   		<button v-on:click="subtraction">-</button>
   	</div>
   	
   	<script src ="../js/vue.js"></script>
   	<script>
   		// let/const 在ES6 中 
   		const app = new Vue({
   			el: "#app", // 用于挂载需要管理元素
   			data: {
   				counter: 0
   			},
   			methods:{
   				add: function(){
   					//不能直接写counter 认为是全局变量,app/this,
   					// 里面做了一层代理
   					this.counter ++;
   				},
   				subtraction: function(){
   					this.counter --;
   				}
   			}
   		})
   	</script>
   </body>
</html>

Vue 中mvvm

mvvm: model viewModel view:
model view model 模型

  • 1.viewmodel 将 model中数据直接绑定view中,支持即刻响应模式,一旦model中数据发生修改,DOM中值也会进行修改。
  • 2.view 中如果发生一些事件或者监控操作,通过路径将数据传输给model , 在这里插入图片描述
    1. vue基础的类型, 组件中必须是函数在这里插入图片描述
      开发中什么叫方法什么是函数:本质区别:定义在类中叫方法与某个实例相关联的,函数独立的不在某个类中

vue的生命周期:

当vue中执行某个阶段中,vue源代码中进行回调,某个时期执行这个回调周期,里面通过callHook 进行回调,在运行到某个阶段,进行钩子设置,vue 实例,同样也是在组件中,组件会被销毁,mounted , update等生命周期
在这里插入图片描述

vue mustache 语法

形成简单的代码规范,缩进2个空格,更加规范
mustache 也就是{{}},mustache 可以包含简单的表达式

v-once

v-once: 只会保存一次值,之后不会进行及时响应变化
v-once: 无需添加命令:

<div id = "app">
			<h2 v-once>{{message}}</h2>			
		</div>
		

v-html

解决服务器返回的格式是标签方式,采用v-html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id = "app">
			<h2 v-html = "url"></h2>			
		</div>
		
		<script src ="../js/vue.js"></script>
		<script>
			// let/const 在ES6 中 
			const app = new Vue({
				el: "#app", // 用于挂载需要管理元素
				data: {
					message: 'hello world',
					url: '<a href = "www.baidu.com">百度一下</a>'
				}
			})
		</script>
	</body>
</html>

V-text

v-test 使用并不是很灵活,没有mustache 效果,v-test 会把后面拼接字符串文本覆盖掉

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id = "app">
			<h2>{{message}}, 我是谁</h2>
			<h2 v-text = "message">, 我是谁</h2>
		</div>
		
		<script src ="../js/vue.js"></script>
		<script>
			// let/const 在ES6 中 
			const app = new Vue({
				el: "#app", // 用于挂载需要管理元素
				data: {
					message: 'hello world',
					url: '<a href = "www.baidu.com">百度一下</a>'
				}
			})
		</script>
	</body>
</html>

v-pre

用来跳过元素和子元素的编译,将里面内容不进行编译,直接显示出来,不需要进行解析

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id="app">
			<h2 v-pre>{{message}}</h2>
		</div>

		<script src="../js/vue.js"></script>
		<script>
			// let/const 在ES6 中 
			const app = new Vue({
				el: "#app", // 用于挂载需要管理元素
				data: {
					message: 'hello world',
					url: '<a href = "www.baidu.com">百度一下</a>'
				}
			})
		</script>
	</body>
</html>

v-cloak

解决浏览器显示出没有编译代码,cloak 斗篷用来进行遮挡,解决浏览器在运行过程中出现卡顿过程。
在vue 解析之前,div 中有一个属性v-cloak,在vue 解析后,div 没有一个属性v-cloak 和CSS样式结合使用,后面使用虚拟DOM

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			[v-cloak] {
				display: none;
			}
		</style>
	</head>
	<body>
		<div id="app" v-cloak>
			<h2 v-pre>{{message}}</h2>
		</div>

		<script src="../js/vue.js"></script>
		<script>
			// let/const 在ES6 中 
			const app = new Vue({
				el: "#app", // 用于挂载需要管理元素
				data: {
					message: 'hello world',
					url: '<a href = "www.baidu.com">百度一下</a>'
				}
			})
		</script>
	</body>
</html>

v-bind

动态绑定,比较重要,有对应缩写::
基础动态绑定url

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id = "app">
			<img v-bind:src = "imageUrl" alt=""/>
		</div>
		
		<script src ="../js/vue.js"></script>
		<script>
			// let/const 在ES6 中 
			const app = new Vue({
				el: "#app", // 用于挂载需要管理元素
				data: {
					message: 'hello world',
					imageUrl: 'https://m.360buyimg.com/babel/jfs/t1/56015/5/10346/150886/5d78e9ddEf7d2c431/8e8d54aa37eb47e4.jpg'
				}
			})
		</script>
	</body>
</html>

v-bind 绑定动态class对象
给列表 选中就显示谁,其他给其删除:绑定一个对象语法

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			.active {
				color: red;
			}
		</style>
	</head>
	<body>
		<div id = "app">
			<!-- 控制bool 动态显示哪个class -->
			<h2 v-bind:class = "{active: isActive, line: isLine}">{{message}}</h2>
			<button v-on:click="btnClick">按钮</button>
		</div>
		
		<script src ="../js/vue.js"></script>
		<script>
			// let/const 在ES6 中 
			const app = new Vue({
				el: "#app", // 用于挂载需要管理元素
				data: {
					message: 'hello world',
					isActive: true,
					isLine: true
				},
				methods:{
					btnClick : function(){
						this.isActive = !this.isActive
					}
				}
			})
		</script>
	</body>
</html>

v-bind绑定样式

  • CSS属性名称时候,比如font-size
    • 使用驼峰命名方式fontSize
    • 短横线分割kebao-case font-size
  • 绑定class有两种语法:
    • 对象语法
    • 数组语法
      动态绑定样式,在组件化开发时候需要绑定对应的样式
      将导航栏单独封装成为一个组件,后续过程中使用这个组件,封装单独组件可以进行复用,
      v-for and v-bind 做一个小东西:点击列表哪一项,哪一项就会文件变成红色
      在这里插入图片描述
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id = "app">
			<!-- vue 没有添加'' 会将其当成一个变量 简单绑定 -->
			<h2 :style="getStyle()">{{message}}</h2>
			<ul>
				<li v-for="item in movies">
					{{item}}
				</li>
			</ul>
		</div>
		
		<script src ="../js/vue.js"></script>
		<script>
			// let/const 在ES6 中 
			const app = new Vue({
				el: "#app", // 用于挂载需要管理元素
				data: {
					message: 'hello world',
					movies: ['海王','速度与激情'],
					finalSize: '50px',
					finalColor: 'red'
				},
				methods:{
					getStyle: function(){
						return {fontSize: this.finalSize, color: this.finalColor }
					}
				}
			})
		</script>
	</body>
</html>

vue 中computed 复杂计算属性

计算属性和函数调用最大区别在于: 计算属性具有缓存值,函数调用没有,对于不需要频繁计算属性,使用计算属性

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id = "app">
			<!-- 计算属性 直接写属性名称,不需要添加小括号 -->
			<h2>总价格{{totalPrice}}</h2>
		</div>
		
		<script src ="../js/vue.js"></script>
		<script>
			// let/const 在ES6 中 
			const app = new Vue({
				el: "#app", // 用于挂载需要管理元素
				data: {
					message: 'hello world',
					books : [
						{id: 110, name: 'Unix编程', price: 119}
					]
				},
				// 计算属性,按照属性方式
				computed:{
					// 定义函数,进行复杂逻辑计算
					fullName: function(){
						return this.message
					},
					totalPrice: function(){
						return this.books.reduce(function(pre,cur){
							return cur.price + pre;
						}, 0)
					}
				}
			})
		</script>
	</body>
</html>

计算属性中setter 和 getter

如果计算属性中没有setter 方法,只有只读属性
在这里插入图片描述
计算属性如果只有getter方法,直接化简单方式
在这里插入图片描述
直接使用setter方法中,注意其中应该带有参数
在这里插入图片描述
在这里插入图片描述

vue 的事件监听 v-on

特别是事件监听,用来与鼠标和键盘事件的监听
在这里插入图片描述

  • v-on 中参数传递问题:·语法糖 @
    在点击按钮过程中需要传递一些参数:
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id="app">
			<button @click="btn1Click(123)"></button>
			<!-- 如何获取浏览器参数event, 传入$event 不会把event当中变量 -->
			<button @click="btn2Click(123, $event)"></button>
		</div>

		<script src="../js/vue.js"></script>
		<script>
			// let/const 在ES6 中 
			const app = new Vue({
				el: "#app", // 用于挂载需要管理元素
				data: {
					message: 'hello world',
					movies: ['海王', '速度与激情']
				},
				methods: {
					btn1Click(param) {
						console.log(param);
					},
					btn2Click(param1, event){
						console.log('----', param1, e)
					}
				}
			})
		</script>
	</body>
</html>

高级应用

v-model 表单绑定

v-model 对表单进行双向绑定,在用户的消息交互过程中 实现表单元素和数据的双向绑定,监控用户输入,对用户输入进行检测
在这里插入图片描述

  • v-mode 基础使用
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id = "app">
			<!-- 将message绑定到DOM message中及时响应 -->
			<input type="text" v-model = "message" />
			{{message}}
		</div>
		
		<script src ="../js/vue.js"></script>
		<script>
			// let/const 在ES6 中 
			const app = new Vue({
				el: "#app", // 用于挂载需要管理元素
				data: {
					message: 'hello world',
					movies: ['海王','速度与激情']
				}
			})
		</script>
	</body>
</html>

v-model 使用 v-bind,v-on 组合实现相同功能:本质操作包含两个 v-bind 和v-on

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id = "app">
			<!-- 将message绑定到DOM message中及时响应 监听用户输入-->
			<input type="text" :value = "message" v-on:input="valueChange"  />
			<h2>{{message}}</h2>
		</div>
		
		<script src ="../../js/vue.js"></script>
		<script>
			// let/const 在ES6 中 
			const app = new Vue({
				el: "#app", // 用于挂载需要管理元素
				data: {
					message: 'hello world'
				},
				methods:{
					// 一旦产生事假后,浏览器产生一个event对象
					valueChange(event){
						this.message = event.target.value;
					}
				}
			})
		</script>
	</body>
</html>

在这里插入图片描述

v-mode 和 radio 绑定

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id = "app">
			<!-- v-model radio 结合 name 保证唯一性-->
			<label for = "male">
				<input type = "radio" id = 'male' name = 'sex' value = '男' v-model = 'sex'/> 男
			</label>
			<!-- v-model 绑定同一个变量,保持互斥 -->
			<!-- v-model 默认选中男 -->
			<label for = "female">
				<input type = "radio" id = 'female' name = "sex" value = '女' v-model = 'sex'/> 女
			</label>
			<h2>您选择性别: {{sex}}</h2>
		</div>
		
		<script src ="../../js/vue.js"></script>
		<script>
			// let/const 在ES6 中 
			const app = new Vue({
				el: "#app", // 用于挂载需要管理元素
				data: {
					message: 'hello world',
					sex: '男'
				},
				methods:{
				
				}
			})
		</script>
	</body>
</html>

v-model 与checkbox 联合使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id="app">
			<label for="">
				<!-- 单选或者复选 label 点击文字可以选中 -->
				<input type="checkbox" id="license" v-model="isAgree" /> 同意协议
			</label>
			<br />
			<button :disabled="!isAgree">下一步</button>
			<br>
			<label for="">
				<!-- 单选或者复选 label 点击文字可以选中 -->
				<input type="checkbox" id="license" value="足球" v-model="hobbies" /> 足球
			</label>
			<br />
			<label for="">
				<!-- 单选或者复选 label 点击文字可以选中 -->
				<input type="checkbox" id="license" value="篮球" v-model="hobbies" /> 篮球
			</label>
			<br />
			<label for="">
				<!-- 单选或者复选 label 点击文字可以选中 -->
				<input type="checkbox" id="license" value="排球" v-model="hobbies" /> 排球
			</label>
			<br />
			<h2>选择:{{hobbies}}</h2>
		</div>

		<script src="../../js/vue.js"></script>
		<script>
			// let/const 在ES6 中 
			const app = new Vue({
				el: "#app", // 用于挂载需要管理元素
				data: {
					message: 'hello world',
					isAgree: false,
					hobbies: []
				},
				methods: {

				}
			})
		</script>
	</body>
</html>

v-model 与select结合

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id = "app">
			<select name ="abc"  v-model = "fruit">
				<option value = "苹果" >苹果</option>
				<option value = "梨子">梨子</option>
				<option value = "桃子">桃子</option>
			</select>
			<h2> 多选</h2>
			<br>
			<select name ="abc"  v-model = "fruits" multiple >
				<option value = "苹果" >苹果</option>
				<option value = "梨子">梨子</option>
				<option value = "桃子">桃子</option>
			</select>
			<h2>多选结果:{{fruits}}</h2>
		</div>
		
		<script src ="../../js/vue.js"></script>
		<script>
			// let/const 在ES6 中 
			const app = new Vue({
				el: "#app", // 用于挂载需要管理元素
				data: {
					message: 'hello world',
					fruit: '苹果',
					fruits: []
				}
			
			})
		</script>
	</body>
</html>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值