vue学习记录-02 插值操作

vue学习记录-02 插值操作

这篇文章是根据codewhy老师在b站的视频进行的学习记录



一、Mustache语法

双大括号的语法就是Mustache语法,代码如下:

<div id='app'>
        <h2>{{message}}</h2>
</div>

mustache语法中不仅仅可以直接写变量,也可以写简单的表达式

<div id='app'>
        <h2>{{message}}</h2>
        <h2>{{message}},Aaron</h2>
        <h2>{{firstName+lastName}}</h2>
        <h2>{{firstName+' '+lastName}}</h2>
        <h2>{{firstName}} {{lastName}}</h2>
        <h2>{{counter*2}}</h2>
    </div>
const app = new Vue({
            el: '#app',
            data: {
                message: 'Hello,Vue!',
                firstName:'koke',
                lastName:'mark',
                counter:100
            },
        })

Mustache会被替换为data里面对应的值,同时,如果对应的值改变了,Mustache插值也会更新。

二、v-once指令

在某些情况下,我们可能不需要界面数据随意的跟随改变,例如希望提高性能等,这个时候可以使用v-once指令。

<div id='app'>
        <h2>{{message}}</h2>
        <h2 v-once>{{message}}</h2>
</div>
  • 该指令后面不需要跟任何表达式
  • 该指令表示元素和组件只渲染一次,不会随着数据的改变而改变
  • 即使重新渲染,该指令下的节点也将被视为静态内容被跳过

改变message之前:
hello,vue
通过控制台改变一下message的数据:
hello,java
此时我们发现设置了v-once的message没有被重新渲染:
hello,java

三、v-html指令

有时候我们可能需要将data数据当作HTML内容进行更新,如果直接在Mustache中使用只能展示出整段字符串,但是如果使用了v-html指令之后,我们就可以将其当作一段正常的HTML代码进行渲染。

<div id='app'>
        <h2>{{url}}</h2>
        <h2 v-html='url'></h2>
    </div>
        const app = new Vue({
            el: '#app',
            data: {
                message: 'Hello,Vue!',
                url:'<a href="http://www.baidu.com">百度一下</a>'
            },
        })

效果如下:
v-html

需要注意的是,VUE不推荐我们直接使用v-html渲染HTML代码,同时对其进行css的应用也会出现一定的问题,详见原文:

  • 在网站上动态渲染任意 HTML 是非常危险的,因为容易导致 XSS 攻击。只在可信内容上使用 v-html,永不用在用户提交的内容上。
  • 在单文件组件里,scoped 的样式不会应用在 v-html 内部,因为那部分 HTML 没有被 Vue 的模板编译器处理。如果你希望针对 v-html 的内容设置带作用域的 CSS,你可以替换为 CSS Modules 或用一个额外的全局 < style > 元素手动设置类似 BEM 的作用域策略。

四、v-text指令

如果我们想要更换的内容不仅仅只是Mustache 里面的内容,而是将元素内的文本内容全部替换掉呢?这个时候我们可以使用v-text指令。

<div id='app'>
        <h2>{{message}}我叫{{name}}</h2>
        <h2 v-text='message'>我叫{{name}}</h2>
</div>
const app = new Vue({
            el: '#app',
            data: {
                name:"Aaron",
                message: 'Hello,Vue!'
            },
        })

效果如下,可以看到直接在元素内使用Mustache 并不能将元素内原有内容给替换掉:
v-text

  • 同样的,使用v-text也不能输出HTML,想要使用HTML渲染页面还是需要使用v-html
  • 一般来说我们也很少会使用v-text进行文本渲染,因为v-text很不灵活

五、v-pre指令

{{XXX}}这种写法我们可能不希望他被当作Mustache 表达式,那么我们可以使用v-pre告诉VUE这只是一段普通的文本内容,这样VUE就会跳过这个元素内的编译。

<div id='app'>
 		<!-- 希望被vue解析的内容 -->
        <h2>{{message}}</h2>
        <!-- 不希望被vue解析的内容 -->
        <h2 v-pre>{{message}}</h2>
    </div>
const app = new Vue({
            el: '#app',
            data: {
                message: 'Hello,Vue!'
            },
        })

效果如下:
v-pre

六、v-cloak指令

这个指令在VUE实例编译完之前都会存在,什么意思呢?我们使用settimeout来延迟一下VUE的编译看看实际效果。
代码:

<div id='app'>
        <h2 v-cloak>{{message}}</h2>
</div>
setTimeout(function(){
            const app = new Vue({
                el: '#app',
                    data: {
                        message: 'Hello,Vue!'
                    },
            })
        },5000)

在五秒定时结束之前,h2标签内还是有v-cloak指令的:
v-cloak
但是五秒结束后,VUE开始编译后,可以看到v-cloak指令消失了:
v-cloak
也就是说,v-cloak只存在于打开页面到VUE编译完成的这段时间之内,什么情况下我们会需要在这段时间内做事呢?
v-cloak
看到这个Mustache 语法了吗?

我们都知道Mustache 是用来帮助插值的,但是用户不一定知道,甚至可能还会觉得这网站怎么到处都是乱码,太丑了。
既然这个语法用户觉太丑了那我们就不给用户看就好了,所以我们可以给v-cloak加个display:none的样式,让dispaly跟v-cloak一样只存在于VUE编译完成之前。

[v-cloak] {
            display: none;
        }

这样这段代码里面的东西在VUE编译完之前都会隐藏起来,对比一下效果如下:

VUE编译完成之前:
v-cloak
VUE编译完成之后:
v-cloak

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值