牛骨文教育服务平台(让学习变的简单)
博文笔记

Vue条件循环判断+计算属性+绑定样式v-bind

创建时间:2017-09-28 投稿人: 浏览次数:1722

Vue.js条件与循环

1、条件判断

(1)v-if,

<div id="app">
   <p v-if="seen">现在你看到我了</p>
   <template v-if="ok">
         <h1>菜鸟教程</h1>
   </template>
</div>

<script>
  new Vue({
      el:"#app",
      data:{
           seen:true,
           ok:true
      }
  });
</script>

(2)v-else-if

(3)v-else

<div id="app">
    <div v-if="type === "A" ">A</div>
    <div v-else-if="type === "B" ">B</div>
    <div v-else="type === "C" ">C</div>
</div>

<script>
   new Vue({
      el:"#app";
      data:{
            type:"C"
      }
   });
</script>

(4)v-show

除了v-if、v-else-if、v-else,还可以使用v-show指令来根据条件展示元素

<div id="app">
   <h1 v-show="ok">Hello</h1>
</div>

<script>
  new Vue({
      el:"#app",
      data:{
          ok:true
      }
  });
</script>

2、循环语句

使用v-for指令

(1)简单的v-for  

      <ol>
           <li v-for="site in sites">{{ site.name }}</li>
        </ol>

(2)模板中的v-for

<template v-for="site in sites">
            <li> {{ site.name }} </li>
            <li>  -----  </li>
        </template>

综合小案例,如下:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript" src="js/vue.min.js" ></script>
	</head>
	<body>
		<div id="app">
			<ol>
				<li v-for="site in sites">
					{{ site.name }}
				</li>
			</ol>
			
			<!--利用模板化template进行循环-->
			<ul>
				<template v-for="site in sites">
					<li>{{ site.name }}</li>
					<li>-------</li>
				</template>
			</ul>
		</div>
		
		<script>
			new Vue({
				 el:"#app",
				 data:{
				 	sites:[
				 		{name:"Zhao"},
				 		{name:"Xiao"},
				 		{name:"yan"}
				 	]
				 }
			});
		</script>
	</body>
</html>

(3)v-for迭代对象

a.一个参数

原理:<li v-for="value in object">  {{ value }}

b.两个参数

原理:<li v-for="(value,key) in object" > {{ key }} : {{ value }}


(4)v-for迭代整数

<div id="app">
  <ul>
    <li v-for="n in 10">
     {{ n }}
    </li>
  </ul>
</div>


<script>
new Vue({
  el: "#app"
})
</script>

3、计算属性computed

计算属性主要适用于一些复杂的逻辑关系,

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>计算属性</title>
		<script type="text/javascript" src="js/vue.min.js" ></script>
	</head>
	<body>
		<div id="app">
			<p>原始字符串:{{message}}</p>
			<p>计算后反转字符串:{{reversedMessage}}</p>
		</div>
		
		<script>
			var vm=new Vue({
				el:"#app",
				data:{
					message:"Runoob"
				},
				computed:{
					//计算属性reversedMessage的getter
					reversedMessage:function(){
						//this指向vm实例
						return this.message.split("").reverse().join("");
					}
				}
			})
		</script>
	</body>
</html>
由于computed用于计算属性,而reversedMessge相对于computed的属性的获得,其this指向的是vm的实例,当message发生改变的时候,对应的reversedMessage也会发生相对应改变。


扩展:computed VS methods

   由于computed与methods实现效果相同,所以也可以使用methods来替代computes,

 区别如下:a、computed基于它的依赖缓存,只有相关依赖发生改变时,才会重新取值;

           b、methods而言,在重新渲染的时候,函数总会重新调用执行。

可以说computed性能会更好,但若不希望缓存,可以使用methods属性


4、样式绑定

在vue中由于class与style是HTML元素的属性,用于设置元素的样式,可以用v-bind来设置样式属性

实例1:

<div v-bind:class="{active:isActive}"></div>

等价于

<div class="active">


(1)vue.js.style(内联样式)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript" src="js/vue.min.js" ></script>
	</head>
	<body>
		<div id="app">
			<div v-bind:style="{color:activeColor,fontSize:fontSize + "px"}">菜鸟教程</div>
		</div>
		
		<script>
			new Vue({
				el:"#app",
				data:{
					activeColor:"green",
					fontSize:30
				}
			})
		</script>
	</body>
</html>


(2)使用数组将多个样式对象应用到一个元素上

	<div v-bind:style="[baseStyles,overridingStyles]">菜鸟教程</div>
        <script>
             new Vue({
		el:"#app",
                data:{
			baseStyles:{	
				color:"green",
				fontSize:"30px"
			},
			overridingStyles:{
				"font-weight":"blod"
			}
		}
             })
        </script>

        





声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。