Vue(三)-- class与style绑定、条件渲染、列表渲染、列表的搜索和排序

摘要:
目录1。类和样式绑定--1.1类绑定,:class='xxx'--1.2样式绑定2。条件渲染——2.1v-if和v-else——2.2v-show——2.3比较v-if和v-show 3。列表呈现——3.1v用于遍历数组——3.2v用于遍历对象——练习代码——3.3为什么使用:key——3.4更改方法——3.4.1splice()4。搜索和排序列表——4.1代码1。了解应用程序界面中类和样式的绑定,某个(某些)元素的样式是一种不断变化的类/样式绑定,这是一种专门用于实现动态样式效果的技术——1.1类绑定class='xxx'xxx是一个字符串HelloWorldxxx是对象HelloWorldisA和isB是布尔值xxx是数组HelloWorld告白失败--2.3通过删除和添加标签将v-if与v-show v-if进行比较,通过dispally:none隐藏标签将v-show与v-show进行比较。如果您需要频繁切换v-show,最好˂!

目录

1.class与style绑定
  • 理解
    在应用界面中,某个(些)元素的样式是变化的
    class/style绑定就是专门用来实现动态样式效果的技术

--1.1class绑定,:class='xxx'

  • xxx是字符串
    <p :class="a">Hello World</p>
  • xxx是对象
<p :class="{aClass:isA , bClass:isB}">Hello World</p>
isA和isB是布尔值
  • xxx是数组
    <p :class="['aClass','cClass']">Hello World</p>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
		<style type="text/css">
			.aClass {
				color: red;
			}

			.bClass {
				color: blue;
			}
		</style>
	</head>
	<body>
		<div id="demo">
			<h2></h2>
			<p :class="a">Hello World</p>
			<h2></h2>
			<button @click="update">btn</button>
		</div>
		<script type="text/javascript">
			var app = new Vue( {
				el: '#demo',
				data: {
					a: 'aClass'
				},
				methods: {
					update() {
						this.a = 'bClass'
					}
				}
			})
		</script>
	</body>
</html>

--1.2style绑定

:style="{color:activeColor,fontSize:fontSize+'px'}"
其中的activeColor/fontSize是data属性,可以改变

2.条件渲染

--2.1v-if和v-else

<p v-if="ok">成功了</p>
<p v-else="true">失败</p>

--2.2v-show

<p v-show="ok">表白成功</p>
<p v-show="!ok">表白失败</p>

--2.3比较v-if与v-show

  • v-if通过删除和增加标签来进行切换,v-show通过dispaly:none来隐藏标签
  • 如果需要频繁切换v-show比较好
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
	</head>
	<body>
		<div id="demo">
			<p v-if="ok">成功了</p>
			<p v-else="true">失败</p>
			<p v-show="ok">表白成功</p>
			<p v-show="!ok">表白失败</p>
			<button type="button" @click="ok=!ok"></button>
		</div>
		<script type="text/javascript">
			new Vue({
				el:'#demo',
				data:{
					ok:false
				}
			})
		</script>
	</body>
</html>
3.列表渲染
  • vue本身只是监视了persons的改变,没有监视数组内部数据的改变
  • Vue重写了数组中一系列改变数组内部数据的方法(先调用并实现原生代码,再更新界面)
    数组内部改变,界面自动改变

--3.1v-for遍历数组

<li v-for="(p,index) in persons" :key="index">
	{{index}}---{{p.name}}---{{p.age}}
	---<button @click="deleteP">删除</button>
	---<button @click="updateP(index,{name:'Cat',age:20})">更新</button>
</li>

练习

--3.2v-for遍历对象

<li v-for="(value,key) in persons[1]" :key="key">
					{{value}}---{{key}}
				</li>

--练习代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
	</head>
	<body>
		<div id="demo">
			<h2>测试:v-for 遍历数组</h2>
			<ul>
				<li v-for="(p,index) in persons" :key="index">
					{{index}}---{{p.name}}---{{p.age}}
					---<button @click="deleteP">删除</button>
					---<button @click="updateP(index,{name:'Cat',age:20})">更新</button>
				</li>
			</ul>
			<h2>测试:v-for 遍历对象</h2>
			<ul>
				<li v-for="(value,key) in persons[1]" :key="key">
					{{value}}---{{key}}
				</li>
			</ul>
		</div>
		<script type="text/javascript">
			new Vue({
				el: '#demo',
				data: {
					persons: [ //vue本身只是监视了person的改变,没有监视数组内部数据的改变
						{
							name: 'Tom',
							age: 18
						},
						{
							name: 'Jack',
							age: 16
						},
						{
							name: 'Bon',
							age: 19
						},
						{
							name: 'Rose',
							age: 14
						},
					]
				},
				methods: {
					deleteP(index) {
						//删除persons中指定index的p
						this.persons.splice(index, 1)
					},
					updateP(index, newP) {
						//没有改变persons本身。数组内部发生变化,但并没有调用变异方法,不会更新界面
						this.persons.splice(index, 1, newP)
					}
				}
			})
		</script>
	</body>
</html>

--3.3为什么要使用:key

参考知乎问题(https://www.zhihu.com/question/61064119)

--3.4变更方法

  • Vue 将被侦听的数组的变更方法进行了包裹,所以它们也将会触发视图更新。这些被包裹过的方法包括:
    • push()
    • pop()
    • shift()
    • unshift()
    • splice()
    • sort()
    • reverse()

----3.4.1splice()

splice方法很强大,可实现数组的增删改


  • splice(index,0,newP)//idnex:数组索引,newP:新的内容,0:代表增加
  • 删除
    splice(index,1)

  • splice(index,1,newP)
4.列表的搜索和排序

--4.1代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
	</head>
	<body>
		<div id="test">
			<input type="text"  v-model="searchName"/>
			<ul>
				<li v-for="(p,index) in filterPersons" :key="index">
					{{index}}---{{p.name}}---{{p.age}}
				</li>
			</ul>
			<button @click="setOrderType(1)">年龄升序</button>
			<button @click="setOrderType(2)">年龄降序</button>
			<button @click="setOrderType(0)">原本顺序</button>
		</div>
		<script type="text/javascript">
			new Vue({
				el: '#test',
				data: {
					searchName:'',
					orderType: 0,//0代表原本,1代表升序,2代表降序
					persons: [ //vue本身只是监视了person的改变,没有监视数组内部数据的改变
						{
							name: 'Tom',
							age: 18
						},
						{
							name: 'Jack',
							age: 16
						},
						{
							name: 'Bon',
							age: 19
						},
						{
							name: 'Rose',
							age: 14
						},
					]
				},
				computed:{
					filterPersons(){
						//取出相关数据
						const {searchName,persons}=this
						//最终需要显示的数组
						let fPersons;
						//对persons进行过滤
						fPersons = persons.filter(p=>p.name.indexOf(searchName)>=0)
						orderType=this.orderType
						//排序
						if(orderType!==0){
							fPersons.sort(function(p1,p2){
								
								if(orderType===2){
									console.log(p1.name+" down"+p2.name)
									return p2.age-p1.age
								}else{
									console.log(p1.name+" up "+p2.name)
									return p1.age-p2.age
								}
							})
						}
						
						return fPersons	
					}
				},
				methods:{
					setOrderType(orderType){
						this.orderType = orderType
					}
				}
			})
		</script>
	</body>
</html>


免责声明:文章转载自《Vue(三)-- class与style绑定、条件渲染、列表渲染、列表的搜索和排序》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MySQL-查询结果缓存java虚拟机详细图解9--JVM机器指令集下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vue路由传参以及接收参数的几种方法

vue路由传参方式可以划分为params传参、query传参和url字符串拼接,首先需要知道路由跳转并传参的方式(声明式导航和编程式导航)以及接收路由参数的方法 一、路由跳转并传参的方法 1、声明式导航 不带参跳转 对应的地址为/foo <router-link to="/foo">Go to Foo</router-link>...

Vue的mixin的一点使用(table的头部sticky的实现)

大家对mixin应该熟悉,它能全局或者配置mixin的组件添加公共属性与方法。这里展示一次具体的使用。 在使用element-ui时(别的场景一样出现),table过长时滚动时,头部滚出视图了,就无法知道下面内容每一列代表啥。这里的实现方案采用sticky即可,即滚出视图让列表的头部固定在顶部。 这里采用mixin来实现,需要的页面配置mixin即可,代码...

PHP常见的数组遍历方式

PHP常见的数组遍历方式 在PHP开发中,数组是我们最用的PHP函数之一,并且对于数组函数的遍历方式也有很多种,如果我们熟悉PHP数组的遍历方式以及每种方式的优缺点,会让我们的程序优雅需求,不管是开发效率还是代码的执行效率上都会得到大大的提升。直线导轨滑台 1、foreach 这是我们最常见的遍历之一 $arr=['a','b','c']; forea...

js数组遍历方法总结

js数组遍历方法总结  数组遍历方法 1.for循环 使用临时变量,将长度缓存起来,避免重复获取数组长度,当数组较大时优化效果才会比较明显。 1 2 3 for(j = 0,len=arr.length; j < len; j++) {      } 2.foreach循环 遍历数组中的每一项,没有返回值,对原数组没有影响,不支持...

TypeScript(11): Array(数组)

数组对象是使用单独的变量名来存储一系列的值。 假如你有一组数据(例如:网站名字),存在单独变量如下所示: var site1="Google"; var site2="Runoob"; var site3="Taobao"; 如果有 10 个、100 个这种方式就变的很不实用,这时我们可以使用数组来解决: var sites:string[]; sit...

vue router:解决相同路径不同路由参数跳转同一页面,路由参数不动态刷新的问题

问题描述 当我们使用同一路径跳转不同页面时,路由参数不会刷新,所以组件中接收不到,比如我的路由定义和路由跳转链接如下:当然我们人为不肯直接这样写啦~这里模拟问题写的demo 采用 watch 监听 1. 在点击跳转的组件中使用 watch 进行检测动态改变路由参数: watch: { // 利用watch方法检测路由变化:进行重新赋值 $r...