vue的模板语法

模板语法是什么?官方网站有解释:允许开发者 声明式 地将 DOM 绑定至 底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML,所以能被遵循规范的浏览器和 HTML 解析器解析。在底层的实现上,Vue 将模板编译成虚拟 DOM 渲染函数。结合响应系统,Vue 能够智能地计算出最少需要重新渲染多少组件,并把 DOM 操作次数减到最少。

我的理解是:模板语法是将vue实例中的data中的数据渲染到页面中的函数。

1.文本插值:使用“Mustache”语法 (双大括号)  {{msg}}

<div id="app">
    {{msg}}
</div>
<script>
    let vm = new Vue({
        el:'#app',
        data:{
            msg:'hello vue'
        }
    })
</script>

        {{msg}}可以将js中的vue实例中的data数据渲染到页面上来。效果如下图所示:

      【双大括号内部可以放js表达式,比如:{{msg+''nihao"}}】

        当msg这个数据发生改变时,插值处内容也会发生变化。

        但是,使用了v-once命令之后,当msg数据发生改变时,插值处的内容不会跟着发生改变。

<div v-once>{{msg}}</div>

2.v-html指令:双大括号会将数据解释为普通文本,而非 HTML 代码。为了输出真正的 HTML,就需要使用v-html指令。

<div v-html='htmlCode'></div>

下面是文本插值和v-html差值的区别:

    <div id="app">
        {{htmlCode}}
        <div v-html='htmlCode'></div>
    </div>
    <script>
        let vm = new Vue({
            el:'#app',
            data:{
                htmlCode:
                    `<div>
                        <h1>${this.msg}</h1>
                        <h2>h2</h2>
                        <h3>h3</h3>
                        <h4>h4</h4>
                        <h5>h5</h5>
                    </div>`
            },
            methods:{},
            created(){}
        })
    </script>

 根据以上代码,文本插值显示为这样:

v-html插值显示为这样:

 3.v-bind指令:动态绑定元素上的属性。

        Mustache 语法不能作用在 HTML attribute(属性) 上,遇到这种情况应该使用v-bind指令。

<div v-bind:title='title'>div2</div>

        也可以简写为

<div :title='title'>div2</div>

4.v-on指令:动态绑定事件

<button v-on:click='clickHandler'>修改数据</button>

v-on可以简写为:

<button @click='clickHandler'>修改数据1</button>

        例子:

    <div id="app">
        {{msg}}
        <button v-on:click='clickHandler'>修改数据</button>
        <!-- 在=后面直接写修改的数据,就不需要再方法中设置this了-->
        <button @click="msg='hello v-on'">修改数据2</button>
    </div>
    <script>
        let vm = new Vue({
            el:'#app',
            data:{
                msg:'hello vue',
            },
            methods:{
                findAllCategories(){
                    console.log('查询')
                },
                clickHandler(){
                    this.msg='hello v-on'
                }
            },
            created(){
                this.findAllCategories()
            }
        })
    </script>

5.条件渲染

        1)v-if指令:用于条件性地渲染一块内容,将v-if部署到html元素上,在vue实例中的data中控制该元素在页面中的渲染,和v-else配对使用,这块内容只会在指令的表达式返回true值的时候被渲染。

    <div id="app">
        <div v-if="isLogin">请登录</div>
        <div v-else>登录成功,欢迎您</div>
    </div>
    <script>
        let vm = new Vue({
            el:'#app',
            data:{
                isLogin:true
            },
        })
    </script>

当data中的isLogin为true时,则“请登录”会渲染在网页上;当data中的 isLogin为false时,则“请登录”会在页面中隐藏,从而显示“登录成功,欢迎您”。

        2)v-show:带有v-show的元素时钟会被渲染并且保留在dom中,v-show只是简单的切换原色的css属性display,v-show不支持template元素,也不支持v-else。

 二者的区别:

                v-if v-else:通过控制dom节点的渲染,实现显示与隐藏

                v-show:通过控制dom节点css样式中display,来实现显示与隐藏

                频繁的显示与隐藏某个组件时,用v-show较好;v-if会频繁渲染dom树,开销较大,造成资源,影响代码运行效率

6.列表渲染v-for

    <div id="app">
        <ul>
            <li v-for="(item,index) in categories">
                索引:{{index}}
                编号:{{item.id}}
                名称:{{item.name}}
            </li>
        </ul>
    </div>
    <script>
        let vm = new Vue({
            el:'#app',
            data:{
                categories:[]
            },
            methods:{
                findAllCategories(){
                    this.categories = [
                        {id:1,name:'校园新闻'},
                        {id:2,name:'娱乐新闻'},
                        {id:3,name:'热点聚焦'},
                        {id:4,name:'体坛赛事'},
                    ]
                }
            },
            created(){
                this.findAllCategories()
            }
        })
    </script>

在页面显示为:

 7.class绑定与style绑定

        1)class绑定:给元素绑定class,可以使该元素使用多个class类名,利用true和false来控制元素是否要用这个class类名。(true是使用该类名,false是不适用该类名)

        html代码

<div class="static" v-bind:class="{ active: isActive, 'text-danger': hasError }">

</div>

        js代码

data: {
  isActive: true,
  hasError: false
}

 上面两个代码渲染出来的效果是:

<div class="static active"></div>

        2) style绑定:将style绑定到元素上,这样元素就可以使用多个样式,并且可以在js中修改要使用该样式。

        html代码:

<div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>

        js代码:

data: {
  activeColor: 'red',
  fontSize: 30
}

他们呈现出来的效果是:

<div v-bind:style="{ color: red, fontSize: 30px }"></div>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值