VUE模版指令

53 阅读2分钟

模版指令

模板语法指的是如何将数据放入html

Vue使用了基于HTML的模板语法,允许开发者声明式地将DOM绑定至底层 Vue 实例的数据

所有Vue的模板都是合法的 HTML ,所以能被遵循规范的浏览器和HTML 解析器解析

差值表达式

数据绑定最常见的形式就是使用Mustache语法(双大括号) 的文本插值,也就是上面示例中的{{ message }}

<div id="app">
	{{ message }}    
</div>

在vue中定义插值表达式message对应的变量

var vm = new Vue({
    el: "#app", // getElementById('app')
    data: {
        message: "vue",
    },
})

函数返回值

除了插值表达式,函数的返回值也可以直接在页面调用渲染

<div id="app">
    <h1>{{ classType }}学习</h1>
    <p>{{ content }}</p>
    <span>{{ describe() }}</span>
</div>

describe是一个方法,可以直接在双大括号的表达式中进行调用

var vm = new Vue({
    el: "#app", // getElementById('app')
    data: {
        classType: "vue",
        content: "这是vue的一个测试",
    },
    methods:{
        describe:function(){
            return "这是一个函数的返回值"
        },
    }
})

v-html

将内容按照html格式进行插入,经常用于富文本数据的渲染

<div id="app">
    <p v-html="content"></p>
</div>
var vm = new Vue({
    el: "#app",
    data: {
      content: "<b>段落标签</b>文本内容"  
    },
})

注意,在网站上动态渲染任意HTML是非常危险的,因为容易导致XSS攻击

v-html一般只用在可信内容中,永不用在用户提交的内容上

v-text

将内容按照文本格式进行插入,但会覆盖原有标签内的内容,不会有加载的闪烁问题

<div id="app">
    <p v-text="contetn"></p>
    <p>
       	{{ gender ? '男' : '女' }}
        <!-- ok? true:false -->
    </p>
</div>
var vm = new Vue({
    el: "#app",
    data: {
      	gender: true, // 变量值为true时,显示模板变量中左边的值
      	content: "<b>段落标签</b>文本内容"  
    },
})

但是不会解释文本内容为实际的html标签等样式效果

v-cloak

解决使用差值表达式时页面渲染过程,由于变量没有初始化而导致的闪烁问题,可以通过设置浏览器网速效果进行复现

通俗的来说,比如{{ message }}变量的实际内容没有被创建,那么此时页面只会展示出{{ messsage }}这样的效果,之后当变量初始化之后,{{ message }}将变化为实际的值,此时变化的过程我们称作闪烁

v-cloak指令可以隐藏未编译的标签直到实例准备完毕

<div id="app">
    {{ message }}
</div>
<script>
    new Vue({
        el: "#app",
        data:{
            message: "测试",
        }
    })
</script>

在上面的代码中,如果网速够慢的清空下,页面首先加载显示出的内容是{{ message }}

解决办法:通过v-clock指令,在使用到模板变量的标签上写入,并设置一个v-clock的类样式

<style type="text/css">
    [v-cloak]{
        display: none;
    }
</style>
<div v-cloak id="app">
	<p v-cloak>{{ message }}</p>
</div>