1.Vue中的指令
有特殊含义的自定义属性,全部用v-开头,一共有13个;
本质就是自定义属性
1.1 v-cloak指令
在Vue中规定,在页面渲染完成后,会获取所有添加有v-bloak属性的元素,并设置其显示(display=‘block’),需要自己手动添加css样式,将含有v-cloak的元素设置为隐藏
防止页面加载闪烁问题
<style type="text/css">
/*
1、通过属性选择器 选择到 带有属性 v-cloak的标签 让他隐藏
*/
[v-cloak]{
/* 元素隐藏 */
display: none;
}
</style>
<body>
<div id="app">
<!-- 2、 让带有插值 语法的 添加 v-cloak 属性
在 数据渲染完场之后,v-cloak 属性会被自动去除,
v-cloak一旦移除也就是没有这个属性了 属性选择器就选择不到该标签
也就是对应的标签会变为可见
-->
<div v-cloak >{{msg}}</div>
</div>
<script type="text/javascript" src="js/vue.js"></script>
<script type="text/javascript">
var vm = new Vue({
// el 指定元素 id 是 app 的元素
el: '#app',
// data 里面存储的是数据
data: {
msg: 'Hello Vue'
}
});
</script>
</body>
</html>
1.2跟标签内容相关的三个指令
1.21 v-text指令
v-text指令用于将数据填充到标签中,作用于插值表达式类似,但是没有闪烁问题;
如果数据中有html标签会将html标签一并输出;
v-text是单向数据绑定,数据对象上的值改变,插值会发生变化,但是插值发生变化并不影响数据对象的值;
<div id="app">
<!--
注意:在指令中不要写插值语法 直接写对应的变量名称
在 v-text 中 赋值的时候不要在写 插值语法
一般属性中不加 {{}} 直接写 对应 的数据名
-->
<p v-text="msg"></p>
<p>
<!-- Vue 中只有在标签的 内容中 才用插值语法 -->
{{msg}}
</p>
</div>
<script>
new Vue({
el: '#app',
data: {
msg: 'Hello Vue.js'
}
});
</script>
1.22 v-html指令
用法和v-text类似,但是v-html可以把html片段填充到标签中;
可能会有安全问题,一般只在可信任的内容上使用户v-html,不用在用户提交的内容上;
v-text和v-html区别:
v-text输出的是纯文本,浏览器不会对其在进行html解析;
v-html会将其当html标签解析后输出;
<div id="app">
<p v-html="html"></p> <!-- 输出:html标签在渲染的时候被解析 -->
<p>{{message}}</p> <!-- 输出:<span>通过双括号绑定</span> -->
<p v-text="text"></p> <!-- 输出:<span>html标签在渲染的时候被源码输出</span> -->
</div>
<script>
let app = new Vue({
el: "#app",
data: {
message: "<span>通过双括号绑定</span>",
html: "<span>html标签在渲染的时候被解析</span>",
text: "<span>html标签在渲染的时候被源码输出</span>",
}
});
</script>
1.23 v-pre指令
显示原始信息跳过编译阶段;
跳过这个元素和他的子元素编译过程;
一些静态的内容不需要编译加这个指令可以加快渲染;
<span v-pre>{{ 我不需要被编译 }}</span>
<!-- 显示的是{{ 我不需要被编译 }} -->
<span v-pre>{{msg}}</span>
<!-- 即使data里面定义了msg这里仍然是显示的{{msg}} -->
<script>
new Vue({
el: '#app',
data: {
msg: 'Hello Vue'
}
});
</script>
1.3 v-once指令
(只编译一次的指令)
执行一次性的插值,当数据发生变化时,插值处的内容不会继续更新;