欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

vue常用指令以及动态样式添加

程序员文章站 2022-06-25 11:27:42
文章目录一、vue指令1.v-once2.v-show3.v-if4.v-else5.v-else-if6.v-for7.v-html8.v-text9.v-on10.v-model11.v-bind1. 动态绑定class2. 动态绑定style一、vue指令官网解释指令 (Directives) 是带有 v- 前缀的特殊特性。指令特性的值预期是单个 JavaScript 表达式 (v-for 是例外情况)。指令的职责是,当表达式的值改变时,将其产生的连带影响,响应式地作用于 DOM。1.v-...


一、vue指令

官网解释

指令 (Directives) 是带有 v- 前缀的特殊特性。指令特性的值预期是单个 JavaScript 表达式 (v-for 是例外情况)。指令的职责是,当表达式的值改变时,将其产生的连带影响,响应式地作用于 DOM。

1.v-once

能执行一次性地插值,当数据改变时,插值处的内容不会更新。但请留心这会影响到该节点上的其它数据绑定:

<div id="app">
        <p v-once>原始值: {{msg}}</p>
        <p>后面的: {{msg}}</p>
        <input type="text" v-model="msg">
</div>
<script src="js/vue.js"></script>
<script>
    new Vue({
       el: '#app',
        data: {
           msg: '今天的天气很好!'
        }
    });

2.v-show

和v-if一样 区别是if是注释掉 v-show是给一个display:none的属性 让它不显示! 用法 参考下一个v-if指令.

v-show和v-if的区别:

   v-if 是真实的条件渲染,因为它会确保条件块在切换当中适当地销毁与重建条件块内的事件监听器和子组件; v-show 则只是简单地基于 CSS 切换。

  v-if 有更高的切换消耗而 v-show 有更高的初始渲染消耗。因此,如果需要频繁切换使用 v-show 较好,如果在运行时条件不大可能改变则使用 v-if 较好。

3.v-if

v-if后面的是一个表达式或者也可以是返回true或false的表达式。 且值为true和fasle false的话就会被注释 v-show是给一个display:none的属性 让它不显示! true就正常显示。

<div id="app">
<p v-if="show">要显示出来!</p>
<p v-if="hide">不要显示出来!</p>
<p v-if="height > 1.55">小明的身高: {{height}}m</p>
<p v-if="height1 > 1.55">小明的身高: {{height1}}m</p>
<p v-if="3>2">打死你: {{height1}}m</p>
</div>
<script src="js/vue.js"></script>
<script>
   new Vue({
          el: '#app',
          data: {
              show: true,
              hide: false,
              height: 1.68,
              height1: 1.50
          }
	});
</script>

4.v-else

必须和v-if一起用才可以 不能单独用 而且必须在v-if下面 中间有别的标签也会报错

<div id="app">
  <p v-if="height > 1.7">小明的身高是: {{height}}m</p>
  <p v-else>小明的身高不足1.70m</p>
</div>
<script src="js/vue.js"></script>
<script>
  new Vue({
        el: '#app',
        data: {
        height: 1.88
    }
});
</script>

5.v-else-if

这个比较简单 直接看代码就可以了 哈哈哈 输入成绩多少 就显示相应的等级

<div id="app">
        <p>输入的成绩对应的等级是:</p>
        <p v-if="score >= 90">优秀</p>
        <p v-else-if="score >= 75">良好</p>
        <p v-else-if="score >= 60">及格</p>
        <p v-else>不及格</p>
        <input type="text" v-model="score">
    </div>
   <script src="js/vue.js"></script>
   <script>
       new Vue({
          el: '#app',
           data: {
              score: 90  // 优秀 良好 及格 不及格
           }
       });
   </script>

6.v-for

基于数据渲染一个列表,类似于JS中的遍历。其数据类型可以是 Array | Object | number | string
该指令之值,必须使用特定的语法(item, index) in items, index是索引,可以省略。item是 为当前遍历元素提供别名(可以自己随便起名字) 。v-for的优先级别高于v-if之类的其他指令

<body>
        <div id="app">
            <!-- 遍历数组 -->
            <p v-for="(d,index) in msg">
                {{index +':'+d}}
            </p>
            <!-- 遍历对象 -->
            <div v-for="(dd,index) in obj">
                {{index+':'+dd}}
            </div>
            <!-- 遍历对象 也可以不要index索引 -->
            <div v-for="dd2 in obj">
                {{dd2}}
            </div>
            <!-- 遍历num和string -->
            <p v-for="gg in num2">{{gg}}</p>
            <p v-for="gg2 in string2">{{gg2}}</p>
             
        </div>
</body>

7.v-html

双大括号会将数据解释为普通文本,而非 HTML 代码。为了输出真正的 HTML,你需要使用 v-html 而且给一个标签加了v-html 里面包含的标签都会被覆盖。

注意v-html要慎用 因为会出现安全问题 官网解释为:你的站点上动态渲染的任意 HTML 可能会非常危险,因为它很容易导致 XSS 攻击。请只对可信内容使用 HTML 插值,绝不要对用户提供的内容使用插值。

<div id="app" v-html="html">
  <p v-text="msg">哈哈哈</p>  
</div>
<script type="text/javascript">
  new Vue({
        el:'#app',
        data:{
            msg:'我爱敏敏!!',
            html:'<p>大海森林我都不爱!</p>'
            }
    })
</script>  

8.v-text

给一个便签加了v-text 会覆盖标签内部原先的内容 如下面的例子 哈哈哈不会显示

<div id="app">
    <p v-text="msg">哈哈哈</p>
</div>
<script type="text/javascript">
    new Vue({
          el:'#app',
          data:{
            msg:'我爱敏敏'
            }
        })
</script>

9.v-on

绑定事件的 还有些用法在后面的博客中会提到

<a @click=“doSomething”>…

10.v-model

v-model是一个指令,限制在、、、components中使用 用于数据的双向绑定操作.

11.v-bind

1. 动态绑定class

{{}}不能在html属性中使用,我们要采用v-bind绑定属性。

语法:v-bind:属性名,可以简写为:属性名

每个绑定,都只能包含单个表达式。代码如下:

	<style>
		.yuan{
			width: 100px;
			height: 100px;
			border-radius: 50%;
            background-color: green;
		}
		.red{
			background-color: red;
		}
	</style>    
    <div id="app">
   		<div  :class="if(true){return yuan}else{ruturn red}"></div>
    </div>
	<script>
			var vm=new Vue({
				el:'#app',
				data:{	
					isActive:true,
				},
				computed:{
					divClass:function(){
						return {yuan:true,red:false}
					}
				}
			})
	</script>

代码不会生效,控制台也不会报错。此时可以采用三元表达式。

	<div id="app">
   		<div  :class="[isActive ? yuanClass : '', redClass]"></div>
    </div>
2. 动态绑定style

表达式的结果同class一样,可以是1.字符串;2.对象;3.数组

css属性可以采用驼峰式(camelCase)或者短横线分隔(kebab-case)命名,如果采用短横线分隔命名,必须要加上引号。

如果使用短横线分隔命名,不加引号,代码不会生效,如下代码:

	<style>
		.shape{
			width: 100px;
			height: 100px;
			background-color: green;
			border-radius: 50%;
		}
	</style>
	<div id="app">
   		<div  :style="{'background-color':color,width:width+'px'}" class="shape"></div>
	</div>
	<script>
		var vm=new Vue({
			el:'#app',
			data:{	
				color:'blue',
				width:200
			}
		})
	</script>

使用驼峰式命名则不需要加引号。

代码如下:

	<style>
		.shape{
			width: 100px;
			height: 100px;
			background-color: green;
			border-radius: 50%;
		}
	</style>
   <div id="app">
   		<div  :style="{backgroundColor:color,width:width+'px'}" class="shape"></div>
   </div>
	<script>
		var vm=new Vue({
			el:'#app',
			data:{	
				color:'blue',
				width:200
			}
		})
	</script>

使用v-bind:style可以将多个样式对象应用到同一个元素上,代码如下:

	<style>
		.shape{
			width: 100px;
			height: 100px;
			background-color: green;
			border-radius: 50%;
		}
	</style>
   <div id="app">
   		<div  :style="[{backgroundColor:'blue'},{width:width+'px'}]" class="shape"></div>
   </div>
   <script>
   	var vm=new Vue({
   		el:'#app',
   		data:{	
   			width:200
   		},
   	})
   </script>

本文地址:https://blog.csdn.net/weixin_45720111/article/details/109579406

相关标签: vue vue.js