我们学过的vue内置指令:
v-bind:单向绑定解析表达式,可简写为::xxx
v-model:双向数据绑定
v-for:遍历数组/对象/字符串
v-on:绑定事件监听,可简写为@
v-if:条件渲染(动态控制节点是否存在)
v-else:条件渲染(动态控制节点是否存在)
v-show:条件渲染(动态控制节点是否展示)
其他指令:
v-text指令:
1、作用:向其所在的节点中渲染文本内容。
2、与插值语法的区别:v-text会替换掉节点中的内容,{{xx}}则不会。
v-html指令:
1、作用:向指定节点中渲染包含html结构的内容。
2、与插值语法的区别:
(1).v-html会替换掉节点中所有的内容,{{xx}}则不会。
(2).v-html可以识别html结构。
3、严重注意:v-html有安全性问题!!
(1).在网站上动态渲染任意HTML是非常危险的,容易导致XSS攻击。
(2).一定要在可信的内容上使用v-html,永远不要用在用户提交的内容上。
v-cloak指令(没有值):
1、本质是一个特殊属性,Vue实例创建完毕并接管容器后,会删掉v-cloak属性。
2、使用css配合v-cloak可以解决网速慢时页面展示出{{xxx}}的问题。用法:这个指令保持在元素上直到关联实例结束编译。和 CSS 规则如 [v-cloak] { display: none } 一起用时,这个指令可以隐藏未编译的 Mustache 标签直到实例准备完毕。(可以解决当网速过慢时,不让未经解析的模板跑到页面上)
[v-cloak] {
display: none;
}
<div v-cloak>
{{ message }}
</div>
v-once指令:
1.v-once所在节点在初次动态渲染后,就视为静态内容了。
2.以后数据的改变不会引起v-once所在结构的更新。
v-pre指令:
1.跳过其所在节点的编译过程。
2.可利用它跳过那些:没有使用指令语法、和没有使用插值语法的节点,这样会加快编译。简单解释:有该指令(v-pre),vue会不去解析它。
示例:
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="../js/vue.js"></script>
<title>Vue内置指令</title>
</head>
<body>
<div id="root">
<!-- 差值语法更灵活,能和文本无缝拼接。 -->
<div>你好,{{name}}</div>
<!-- v-text会替换掉作用域内的内容(div) ,等同于:<div>{{name}}</div> -->
<div v-text="name">你好,</div>
<!-- v-text不会去解析标签,所有内容都当中文本处理 -->
<div v-text="str"></div>
<!-- v-html可以识别html结构,解析标签。 -->
<div v-html="str"></div>
<!-- v-once只解析一次,后续数据改变也不再更新 -->
<h3 v-once>初始化的n值是:{{n}}</h3>
<h3>当前的n值是:{{n}}</h3>
<button @click="n++">点我n+1</button>
<!-- 跳过以下标签的编译,vue将不去解析,加快vue编译进程 -->
<h3 v-pre>李四真帅!</h3>
<h3 v-pre>李四真帅!</h3>
<h3 v-pre>李四真帅!</h3>
</div>
<script>
new Vue({
el: '#root',
data:{
name:'张三',
str:'<h3>张三真帅!</h3>',
n:10
}
})
</script>
</body>
</html>