秋招过后,意识到自己的不足,最近又重新复习了一下codewhy老师的Vue,今天跟大家分享一下Vue插值的操作
文章目录
一、Mustache语法
我们使用Vue的时候,想要将data里面定义的数据放到HTML里面来显示,这时候就会用到我们的Mastache语法,也就是双大括号{{}}的一个用法
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
</head>
<body>
<div id="app">
<h3>{{name}}</h3>
<h3>{{firstname + lastname}}</h3>
<h3>{{count*10}}</h3>
</div>
<script src="../js/vue.js"></script>
<script>
var app = new Vue({
el: '#app',
data: {
name: 'XWen',
firstname: 'X',
lastname: 'Wen',
count: 0,
},
methods: {},
})
</script>
</body>
</html>
可以看到Mastache语法除了我们常见的{{}}用法外,还可以写简单的表达式
二、v-once指令的用法
由于Vue是响应式的,数据改变相应的界面也会改变,但是有时候,我们在开发的过程中可能会遇到这种需求,就是我们只希望数据第一次拿出来展示,之后数据的改变不让他进行变化,那我们就可以用v-once
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
</head>
<body>
<div id="app">
<h3>{{name}}</h3>
<h3 v-once>{{name}}</h3>
</div>
<script src="../js/vue.js"></script>
<script>
var app = new Vue({
el: '#app',
data: {
name: 'Xwen',
},
methods: {},
})
</script>
</body>
</html>
我们在浏览器控制台中,改变name的值,按理来说,这里的值应该都会改变才对,但是此时我们发现加了v-once的h3标签内的name值没有改变,这就印证了v-once的用法
三、v-html指令的用法
有时候,服务器返回给我们的data数据很可能是html格式的,如果我们继续用Mastache的一个语法的话,就会把它当成字符串来解析,这样就不太好,我们希望它以html的格式直接解析出来,这就要用到v-html
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
</head>
<body>
<div id="app">
<h3>{{url}}</h3>
<h3 v-html="url"></h3>
</div>
<script src="../js/vue.js"></script>
<script>
var app = new Vue({
el: '#app',
data: {
url: '<a href="https://www.baidu.com">百度一下</a>',
},
methods: {},
})
</script>
</body>
</html>
可以看到,我们使用了v-html之后他会把data里面的数据当成html来进行解析,就可以满足我们的需求,而使用Mastache语法就是以字符串的形式解析
四、v-text指令的用法
v-text指令的话用起来跟我们直接用Mastache语法差不多,而且它还比较不灵活,比较少用了解即可
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
</head>
<body>
<div id="app">
<h2>{{name}}是我的名字</h2>
<h2 v-text="name">是我的名字</h2>
</div>
<script src="../js/vue.js"></script>
<script>
var app = new Vue({
el: '#app',
data: {
name: 'Xwen',
},
methods: {},
})
</script>
</body>
</html>
可以看到就是,我们如果想要在后面跟点什么就不行了,会覆盖掉,所以有些鸡肋这个指令
五、v-pre指令的用法
有时候我们不希望Vue帮我们解析,就是展示原来的样子,这时候就可以用v-pre指令
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
</head>
<body>
<div id="app">
<h3>{{name}}</h3>
<h3 v-pre>{{name}}</h3>
</div>
<script src="../js/vue.js"></script>
<script>
var app = new Vue({
el: '#app',
data: {
name: 'Xwen',
},
methods: {},
})
</script>
</body>
</html>
可以看到就是下一个name没有解析出来因为这里使用了v-pre,所以它就是不让Vue去解析,展示原本的样子也就是标签里面放字符串渲染出来
六、v-cloak指令的用法
我们都知道浏览器是从上到下执行我们的html代码的,所以有时候可能我们的js代码卡住了还没来得及渲染就会有Mastache语法标签一闪而过的画面,这时我们就得通过v-cloak指令解决一下
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
</head>
<body>
<div id="app">
<h3>{{name}}</h3>
</div>
<script src="../js/vue.js"></script>
<script>
setTimeout(function () {
var app = new Vue({
el: '#app',
data: {
name: 'Xwen',
},
methods: {},
})
}, 1000)
</script>
</body>
</html>
这里我们采用setTimeout来模拟js代码卡住的场景
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
<style>
[v-cloak] {
display: none;
}
</style>
</head>
<body>
<div id="app">
<h3 v-cloak>{{name}}</h3>
</div>
<script src="../js/vue.js"></script>
<script>
setTimeout(function () {
var app = new Vue({
el: '#app',
data: {
name: 'Xwen',
},
methods: {},
})
}, 1000)
</script>
</body>
</html>
使用了v-cloak之后我们发现,即便是js代码有时候卡住了,也是慢一点显示出来,Mastache标签不会显示出来,v-cloak的原理就是Vue解析之前,元素会有v-cloak这个属性,解析后会消失,所以巧妙解决了这个一闪而过的问题
总结
以上就是今天要跟大家分享的Vue插值的操作