深入浅出VUE基础

1.插值表达式

我们刚刚接触vue,便接触了vue插值表达式({ {}}):

<!DOCTYPE html>
<html>
	<body>
		<div id="app">
			<div>{
   
   {name}}</div>
		</div>
	</body>
	<script src="vue.js" type="text/javascript" charset="utf-8"></script>
	<script type="text/javascript">
		let app = new Vue({
			el:"#app",
			data:{
                name:"GHUI"
            }
				
		})
	</script>
</html>
  • 注意项: 在html页面上只能展示字符串,console.log()打印出的也是字符串,意味着都会调用toString()方法,但实际上控制台展示的既有数组又有对象等类型,那是由于浏览器会进行处理
  • 用法: 使用在vue实例对象对应的DOM元素的html的正反标签之间
    • 支持匿名变量
    • 支持三目运算符
    • 数值
      • 支持四则运算
      • 支持比较运算符
      • 支持数值类型的一些内置方法
    • 数组
      • 支持数组的索引取值方法
    • 对象:支持对象的属性
    • window内置对象的Math的属性和方法:如果data中也有一个Math,那么vue对象的数据仓库优先级最高

如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="./vue.js"></script>
    <title>Document</title>
</head>
<body>
    <div id="app">
        <!-- 字符串 -->
        <p>{
   
   { str }}</p> <!--页面展示:字符串-->
        <p>{
   
   { num + 'aaa'}}</p><!--页面展示:1aaa-->
        <p>{
   
   { str.length }}</p> <!--页面展示:3-->
        
        <!-- 数值 -->
        <p>{
   
   { num }}</p> <!--页面展示:1-->
        <p>{
   
   { num+num1 }}</p> <!--页面展示:101-->
        <p>{
   
   { num > num1 }}</p>  <!--页面展示:false-->
        <p>{
   
   { num.toFixed(2) }}</p> <!--页面展示:1.00-->
        
        <!-- boolean -->
        <p>{
   
   { flag }}</p> <!--页面展示:true-->
        <p>{
   
   { !flag }}</p> <!--页面展示:false-->

        <!-- 数组 -->
        <p>{
   
   { arr }}</p> <!--页面展示:[1,2,3,4]-->
        <p>{
   
   { arr[3] }}</p> <!--页面展示:4-->

        <!-- 对象 -->
        <p>{
   
   { obj }}</p> <!--页面展示:{ "name": "tom", "age": 20 }-->
        <p>{
   
   { obj.name }}</p> <!--页面展示:tom-->
        
        <!-- null/undefined/NaN -->
        <p>{
   
   { arg1 }}</p> <!--页面展示:-->
        <p>{
   
   { arg2 }}</p> <!--页面展示:-->
        <p>{
   
   { arg3 }}</p> <!--页面展示:NaN-->

        <!-- 三目运算符 -->
        <p>{
   
   { num > num1 ? "是" : "否" }}</p> <!--页面展示:否-->

    </div>
    
    <script>
        new Vue({
            el:"#app",
            data:{
                str: '字符串',
                num: 1,
                num1:100,
                flag: true,
                arr: [1,2,3,4],
                obj:{
                    name:'tom',
                    age:20
                },
                arg1: null,
                arg2: undefined,
                arg3: NaN
            }
        })
    </script>
</body>
</html>

 2.v-once

  • 该指令后面不需要跟任何表达式
  • 该指令表示元素和组件只渲染一次,不会随着数据的改变而改变。
<!DOCTYPE html>
<html>
	<body>
		<div id="app">
			<div>{
   
   {name}}</div>
            <div v-once>{
   
   {sex}}</div>
		</div>
	</body>
	<script src="vue.js" type="text/javascript" charset="utf-8"></script>
	<script type="text/javascript">
		let app = new Vue({
			el:"#app",
			data:{
                name:"GHUI",
                sex:"男"
            }
				
		})
	</script>
</html>

3.v-pre

  • nv-pre用于跳过这个元素和它子元素的编译过程
<!DOCTYPE html>
<html>
	<body>
		<div id="app">
			<div>{
   
   {name}}</div>
            <div v-pre>{
   
   {sex}}</div>
		</div>
	</body>
	<script src="vue.js" type="text/javascript" charset="utf-8"></script>
	<script type="text/javascript">
		let app = new Vue({
			el:"#app",
			data:{
                name:"GHUI",
                sex:"男"
            }
				
		})
	</script>
</html>

4.v-cloak

在某些情况下,我们浏览器可能会直接显然出未编译的Mustache标签(需要配合css样式)。

<!DOCTYPE html>
<html>
	<body>
		<div id="app">
			<div>{
   
   {name}}</div>
            <div v-cloak>{
   
   {sex}}</div>
		</div>
	</body>
	<script src="vue.js" type="text/javascript" charset="utf-8"></script>
	<script type="text/javascript">
		let app = new Vue({
			el:"#app",
			data:{
                name:"GHUI",
                sex:"男"
            }
				
		})
	</script>
</html>

CSS:

[v-cloak]{
    display:none
}

看效果:

5.v-bind(v-bin:attr  语法糖(简写)::attr

6.v-bind:class(:class)

  • vue中,样式class绑定在开发中非常常用,很多时候我们需要根据不同的场景,去给目标元素绑定不同的样式。
  • 若元素本来存在class属性,:class不会覆盖原本class,而是在原来基础上添加class。

:class后面跟的是一个对象。

用法一:直接通过{}绑定一个类

<h2 :class="{'active': isActive}">Hello World</h2>

用法二:也可以通过判断,传入多个值

<h2 :class="{'active': isActive, 'line': isLine}">Hello World</h2>

用法三:和普通的类同时存在,并不冲突

注:如果isActiveisLine都为true,那么会有title/active/line三个类

<h2 class="title" :class="{'active': isActive, 'line': isLine}">Hello World</h2>

用法四:如果过于复杂,可以放在一个methods或者computed

注:classes是一个计算属性

<h2 class="title" :class="classes">Hello World</h2>

7.计算属性

在某些情况,我们可能需要对数据进行一些转化后再显示,或者需要将多个数据结合起来进行显示。 


<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<script src="vue.js" type="text/javascript" charset="utf-8"></script>
	<body>
		<div id="app">
			<div>{
   
   {name}}</div>
			<div>{
   
   {allname}}</div>
			<div>{
   
   {sex}}</div>
		</div>
		
	</body>
	<script type="text/javascript">
		let app = new Vue({
			
			el:"#app",
			data(){
				return{
					name:"GHUI",
					sex:"男"
				}
			},
			computed:{
				allname(){
					return "wu" + this.name
				}
			}
		})
		
	</script>
</html>

8.v-on(语法糖:@event)

9.v-on修饰符

10.条件渲染(v-if、v-else-if、v-else)

这三个指令与JavaScript的条件语句ifelseelse if类似。

Vue的条件指令可以根据表达式的值在DOM中渲染或销毁元素或组件。

v-if原理

v-if后面的条件为false时,对应的元素以及其子元素不会渲染。

也就是根本没有不会有对应的标签出现在DOM中。

案例展示:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<script src="vue.js" type="text/javascript" charset="utf-8"></script>
	<body>
		<div id="app">
			<div v-if="score >= 90">优</div>
			<div v-else-if="score >= 75">良</div>
			<div v-else-if="score >= 60">中</div>
			<div v-else-if="score >= 0">差</div>
			<div v-else>输入有误</div>
		</div>
		
	</body>
	<script type="text/javascript">
		let app = new Vue({
			
			el:"#app",
			data(){
				return{
					score:-88
				}
			}
		})
		
	</script>
</html>

 

11.条件展示(v-show)

12.循环渲染(v-for)

13.双向数据绑定(v-model)


<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<script src="vue.js" type="text/javascript" charset="utf-8"></script>
	<body>
		<div id="app">
			<input type="text" v-model="name" name="" id="" value="" />
			<div>{
   
   {name}}</div>
		</div>
		
	</body>
	<script type="text/javascript">
		let app = new Vue({
			
			el:"#app",
			data(){
				return{
					score:-88,
					name:"ghui"
				}
			}
		})
		
	</script>
</html>

14.v-model: radio


<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<script src="vue.js" type="text/javascript" charset="utf-8"></script>
	<body>
		<div id="app">
			<label>
				<input type="radio" name="sex" id="" v-model="sex" value="男" />
				男
			</label>
			<label>
				<input type="radio" name="sex" id="" v-model="sex" value="女" />
				女
			</label>
			<div>性别:{
   
   {sex}}</div>
		</div>
		
	</body>
	<script type="text/javascript">
		let app = new Vue({
			
			el:"#app",
			data(){
				return{
					score:-88,
					name:"ghui",
					sex:"未选择"
				}
			}
		})
		
	</script>
</html>

 

 15.v-model:checkbox


<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<script src="vue.js" type="text/javascript" charset="utf-8"></script>
	<body>
		<div id="app">
			<p>选择你喜欢玩的游戏:</p>
			<label>
				<input type="checkbox" v-model="list" name="" id="" value="天涯明月刀" />
				天涯明月刀
			</label>
			<label>
				<input type="checkbox" v-model="list" name="" id="" value="QQ飞车" />
				QQ飞车
			</label>
			<label>
				<input type="checkbox" v-model="list" name="" id="" value="王者农药" />
				王者农药
			</label>
			<label>
				<input type="checkbox" v-model="list" name="" id="" value="刺激战场" />
				刺激战场
			</label>
			<p>你的选择:{
   
   {list}}</p>
		</div>
		
	</body>
	<script type="text/javascript">
		let app = new Vue({
			
			el:"#app",
			data(){
				return{
					score:-88,
					name:"ghui",
					sex:"未选择",
					list:[]
				}
			}
		})
		
	</script>
</html>

16.v-model:select


<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<script src="vue.js" type="text/javascript" charset="utf-8"></script>
	<body>
		<div id="app">
			<select name="" v-model="list">
				<option value="草莓">草莓</option>
				<option value="苹果">苹果</option>
				<option value="橘子">橘子</option>
				<option value="选择你喜欢的水果" hidden selected="selected" >选择你喜欢的水果</option>
				<option value="香蕉">香蕉</option>
			</select>
			<p>你的选择:{
   
   {list}}</p>
		</div>
		
	</body>
	<script type="text/javascript">
		let app = new Vue({
			
			el:"#app",
			data(){
				return{
					score:-88,
					name:"ghui",
					sex:"未选择",
					list:"选择你喜欢的水果"
				}
			}
		})
		
	</script>
</html>

17.v-model修饰符

      lazy修饰符

  • 默认情况下,v-model默认是在input事件中同步输入框的数据的。
  • 也就是说,一旦有数据发生改变对应的data中的数据就会自动发生改变。
  • lazy修饰符可以让数据在失去焦点或者回车时才会更新。

number修饰符:

  • 默认情况下,在输入框中无论我们输入的是字母还是数字,都会被当做字符串类型进行处理。
  • 但是如果我们希望处理的是数字类型,那么最好直接将内容当做数字处理。
  • number修饰符可以让在输入框中输入的内容自动转成数字类型。

trim修饰符

  • 如果输入的内容首尾有很多空格,通常我们希望将其去除。
  • trim修饰符可以过滤内容左右两边的空格。

猜你喜欢

转载自blog.csdn.net/m0_43599959/article/details/113790572