Vue 学习 (一)——基本指令

本贴最后更新于 2036 天前,其中的信息可能已经事过境迁

最近在学习前端框架 Vue,会陆续写一些 Vue 的学习记录。
这篇文章主要写一些 Vue 的基本指令。
参考: Vue 官方文档 https://cn.vuejs.org/v2/guide/


1. 前端分层开发—MVVM

MVVM 是前端视图层的分层开发思想,主要把每个页面分成了 M、V 和 VM,下图介绍了这三者之间的关系:
imagepng

其中,VM 是 M 和 V 之间的调度者,提供了数据的双向绑定。

2. 创建一个 Vue 实例

在页面中首先导入本地的 vue.js,也可以使用 https://www.bootcdn.cn/all/ 提供的 CDN 加速服务,直接写
<script src="https://cdn.bootcss.com/vue/2.5.16/vue.js"></script>

<html>
	<head>
		<meta charset="utf-8" />
		<script src="https://cdn.bootcss.com/vue/2.5.16/vue.js"></script>
	</head>
	<body>
		<div id="app">
		  <!--使用插值表达式把vue实例中的数据显示出来-->
		  {{msg}}
		</div>
		
		<script>
		  //创建一个Vue的实例
		  var vm = new Vue({
			  el: '#app',       //el:表示控制的页面区域
			  data: {          //data属性: 存放数据
				msg: '欢迎学习Vue'  //通过Vue能够把数据直接渲染到页面上
			  }
		  })
		</script>
	</body>
</html>

运行后的页面如下:
imagepng

3. v-text 和 v-html 的基本使用

<html>
	<head>
		<meta charset="utf-8" />
		<script src="https://cdn.bootcss.com/vue/2.5.16/vue.js"></script>
	</head>
	<body>
		<div id="app">
			<!-- 对比之下 插值表达式作为一个占位符 不会清空元素内容,但是v-text、v-html会清空元素内容 -->
			<p>我是原本的数据   {{msg}}</p>
			<!-- v-text: 相当于插入一个纯文本 -->
			<P v-text="msg2">我是原本的数据</P>
			<!-- v-html: html内容会被解析出来 -->
			<p v-html="msg2">我是原本的数据</p>
		</div>
		
		<script>
		  //创建一个Vue的实例
		  var vm = new Vue({
			  el: '#app',       //el:表示控制的页面区域
			  data: {          //data属性: 存放数据
				msg: '欢迎学习Vue',  //通过Vue能够把数据直接渲染到页面上
				msg2: '<h1>我是msg2</h2>'
			  }
		  })
		</script>
	</body>
</html>

运行后的页面如下:
imagepng

4. v-bind 指令的使用

<html>
	<head>
		<meta charset="utf-8" />
		<script src="https://cdn.bootcss.com/vue/2.5.16/vue.js"></script>
	</head>
	<body>
		<div id="app">
			<!-- v-bind: 用于为元素绑定实例中的属性 也可以被简写为 : -->
			<input type="text" v-bind:value="msg">
			<br/><br/>
			<input type="text" :value="msg">
			<br/><br/>
			<!-- 注意: v-bind中的值 可以是一个合法的JS表达式 -->
			<input type="text" :value="msg + ',我是被添加的QAQ'">
		</div>
		
		<script>
		  //创建一个Vue的实例
		  var vm = new Vue({
			  el: '#app',       //el:表示控制的页面区域
			  data: {          //data属性: 存放数据
				msg: '欢迎学习Vue',  //通过Vue能够把数据直接渲染到页面上
			  }
		  })
		</script>
	</body>
</html>

运行后的页面如下:
imagepng

5. v-on 指令的使用

<html>
	<head>
		<meta charset="utf-8" />
		<script src="https://cdn.bootcss.com/vue/2.5.16/vue.js"></script>
	</head>
	<body>
		<div id="app">
			<input type="text" v-bind:value="msg">
			<br/><br/>
			<!-- v-on: 用于事件绑定, 可以简写为 @ -->
			<input type="button" v-on:click="show1" value="我已经被 v-on: 绑定">
			<br/><br/>
			<input type="button" @click="show2" value="我已经被 @ 绑定">
		</div>
		
		<script>
		  //创建一个Vue的实例
		  var vm = new Vue({
			  el: '#app',       //el:表示控制的页面区域
			  data: {          //data属性: 存放数据
				msg: '欢迎学习Vue',  //通过Vue能够把数据直接渲染到页面上
			  },
			  methods: {
			  	show1() {
			  		this.msg = 'v-bind:我已经被点击后更换了文字'
			  	},
			  	show2() {
			  		this.msg = '@我已经被点击后更换了文字'
			  	}
			  }
		  })
		</script>
	</body>
</html>

运行后的页面如下:
imagepng
点击第一个按钮:
imagepng
点击第二个按钮:
imagepng

6. 事件修饰符

事件修饰符可以使用在事件绑定后面,例如 @click.stop 可以阻止冒泡

  • .stop 阻止冒泡 (冒泡: 从里到外执行)
  • .prevent 阻止默认事件
  • .capture 添加事件监听器时使用事件捕获模式 (从外到里执行)
  • .self 只当事件在该元素本身触发时触发回调
  • .once 事件只触发一次

7. v-mode 指令的使用

<html>
	<head>
		<meta charset="utf-8" />
		<script src="https://cdn.bootcss.com/vue/2.5.16/vue.js"></script>
	</head>
	<body>
		<div id="app">
			<p>{{msg}}</p>
			
			<!-- v-model: 可以实现 表单元素 和 实例中的数据 双向绑定 -->
			<!-- 注意: v-model只能运用在 表单元素 中-->
			<input type="text" v-model="msg" style="width: 50%;">
		</div>
		
		<script>
		  //创建一个Vue的实例
		  var vm = new Vue({
			  el: '#app',       
			  data: {         
				msg: '欢迎学习Vue'
			  },
			  methods: {
			  }
		  })
		</script>
	</body>
</html>

运行后的页面如下:
imagepng

修改输入框中的值导致 vm 中的 msg 这个数据被修改,所以显示在上面的值也会随之更改。

8. 通过属性绑定设置 class 类

<html>
	<head>
		<meta charset="utf-8" />
		<script src="https://cdn.bootcss.com/vue/2.5.16/vue.js"></script>
		<style>
			.red {
				color: red;
			}
			.italic {
				font-style: italic;
			}
		</style>
	</head>
	<body>
		<div id="app">
			<!-- 1.直接使用数组 -->
			<p :class="['red', 'italic']">{{msg}}</p>
			
			<!-- 2.数组中可以使用三元表达式 -->
			<p :class="[flag?'red':'', 'italic']">{{msg}}</p>
			
			<!-- 3.数组中可以嵌套对象-->
			<p :class="['red', {'italic': flag}]">{{msg}}</p>
			
			<!-- 4.直接使用对象-->
			<p :class="classObj">{{msg}}</p>
		</div>
		
		<script>
		  //创建一个Vue的实例
		  var vm = new Vue({
			  el: '#app',       
			  data: {         
				msg: '欢迎学习Vue',
				flag: false,
				classObj: {red:true, italic:true}
			  },
			  methods: {
			  }
		  })
		</script>
	</body>
</html>

运行后的页面如下:
imagepng

9. 通过属性绑定设置 style 样式

<html>
	<head>
		<meta charset="utf-8" />
		<script src="https://cdn.bootcss.com/vue/2.5.16/vue.js"></script>
	</head>
	<body>
		<div id="app">
			<!-- 1.直接使用对象-->
			<p :style="styleObj">{{msg}}</p>
			<!-- 2.引用多个对象 -->
			<p :style="[styleObj, styleObj2]">{{msg}}</p>
		</div>
		
		<script>
		  //创建一个Vue的实例
		  var vm = new Vue({
			  el: '#app',       
			  data: {         
				msg: '欢迎学习Vue',
				styleObj: {color:'red', 'font-style':'italic'},
				styleObj2: {'text-decoration': 'underline'}
			  },
			  methods: {
			  }
		  })
		</script>
	</body>
</html>

运行后的页面如下:
imagepng

10. v-for 指令的使用

<html>
	<head>
		<meta charset="utf-8" />
		<script src="https://cdn.bootcss.com/vue/2.5.16/vue.js"></script>
	</head>
	<body>
		<div id="app">
			v-for循环普通数组:
			<p v-for="(item,i) in arr">---索引:{{i}}---值:{{item}} </p>
			<hr/>
			v-for循环对象数组:
			<p v-for="(user,i) in list">---索引:{{i}}---姓名:{{user.name}}---描述:{{user.des}}</p>
			<hr/>
			v-for循环对象:
			<p v-for="(val, key, i) in user">---索引:{{i}}---键:{{key}}---值:{{val}}</p>
			<hr/>
			v-for循环数字:
			<br/>
			注意:迭代数字的值是从1开始的,而索引是从0开始的,这个要区分开来
			<p v-for="count in 3">循环的第{{count}}次</p>
		</div>
		
		<script>
		  //创建一个Vue的实例
		  var vm = new Vue({
			  el: '#app',       
			  data: {         
				arr: [1,2,3],
				list: [
					{name: 'name1', des: 'des1'},
					{name: 'name2', des: 'des2'},
					{name: 'name3', des: 'des3'}
				],
				user: {name: 'honeybee', des: 'bloger'},
			  },
			  methods: {
			  }
		  })
		</script>
	</body>
</html>

运行后的页面如下:
imagepng

注意:在组件中使用 v-for 循环的时候,必须指定唯一的 字符串/数字 类型的 ;key 值

11. v-if 和 v-show 的使用

<html>
	<head>
		<meta charset="utf-8" />
		<script src="https://cdn.bootcss.com/vue/2.5.16/vue.js"></script>
	</head>
	<body>
		<div id="app">
			<!--v-if: 每次都会删除或者创建元素 -->
			<p v-if="flag">用 v-if 控制的元素</p>
			<!--v-show: 每次只是切换了元素的 display:none的样式-->
			<p v-show="flag">用 v-show 控制的元素</p>
		</div>
		
		<script>
			//创建一个Vue的实例
			var vm = new Vue({
	  			el: '#app',       
	  			data: {
	  				flag: true
	  			},
	  			methods: {
	  			}
  			})
		</script>
	</body>
</html>

运行后的页面如下:
imagepng

当 flag 的值为 false 的时候,元素会被隐藏起来。


版权声明:本文为原创文章,转载请注明出处: http://www.honeybee.top/articles/2018/09/26/1537931405445.html

  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    261 引用 • 662 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...