# Vue模板语法

# v-bind

v-bind的作用是为元素绑定属性

  • 完整写法是v-bind:属性名
  • 简写的话可以直接省略v-bind ":"+属性名

# 示例代码

<!--完整写法-->
<img v-bind:src="imgsrc" alt="">
<!--简写-->
<img :src="imgsrc" alt="" :title="imgtitle" :height="100" :class="isactive?'active':''">

# v-for

v-for指令 可以根据数据生成列表结构

  • 数组经常和v-for结合使用
  • 语法是(item,index)in 数据
  • item代表每一项的数据
  • index代表索引
  • 数组长度的更新会同步到页面上 是响应式的

# 示例代码


<ul>
    <li v-for="item in arr">{{item}}</li>
    <li v-for="item in arraway">{{item.name}}</li>
    <li v-for="(item,index) in arraway">{{index+1}}:{{item.age}}</li>
</ul>

# v-html

v-html属性指令的作用是设置元素的innerHTML,相当于富文本解析


<div id="app">
    <h2>{{message}}</h2>
    <h2 v-text="message"></h2>
    <h2 v-html="message"></h2>
    <!-- v-html属性指令的作用是设置元素的innerHTML -->
    <h2 v-html="html"></h2>
</div>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            message: '<button>开始</button>',
            html: '<a href="http://www.baidu.com">百度</a>'
        }
    })
</script>

# v-if

v-if根据表达式的真假直接操纵dom元素的显示与隐藏

  • 当值为true时 元素存在于dom树中 当值为false时 从dom树中移除
  • 频繁切换使用v-show反之使用v-if 前者的切换消耗小

# 示例代码


<div class="app">
    <div class="code" v-if="isshow"></div>
    <button @click="changeisshow">切换显示</button>
</div>
<script>
    const app = new Vue({
        el: '.app',
        data: {
            isshow: true
        },
        methods: {
            changeisshow: function () {
                this.isshow = !this.isshow
            }
        }

    })
</script>

# v-else

v-else必须与v-if搭配使用 表示剩下的情况

# 示例代码


<div class="box">
    <div v-if="type=='A'">优秀</div>
    <div v-else-if="type=='B'">良好</div>
    <div v-else-if="type=='C'">一般</div>
    <div v-else></div>
</div>
<script>
    const app = new Vue({
        el: '.box',
        data: {
            type: 'E'
        }
    })
</script>

# v-model

v-model指令 获取和设置表单元素的值(双向数据绑定)

  • 双向数据绑定 更改两方的任何一方都会同步更新对方的值
  • 需要和表单元素一起使用
  • v-model指令的作用是便捷的设置和获取表单元素的值
  • 绑定的数据会和表单元素的值相关联
  • 绑定的数据《==》表单元素的值

# 示例代码


<div class="app">
    <!-- 双向数据绑定 更改两方的任何一方都会同步更新对方的值 -->
    <input type="text" v-model="message" @keyup.enter="text"></br>
    <input type="button" value="修改message" @click="setmessage">
</div>
<script>
    const app = new Vue({
        el: '.app',
        data: {
            message: '前端程序员'
        },
        methods: {
            text: function () {
                alert(this.message)
            },
            setmessage: function () {
                this.message = '沙丁鱼'
            }
        }
    })
</script>

# v-model指令修饰符

# .number

自动将用户输入的数值转化为数字类型

 <input type="text" v-model.number="n1">+<input type="text" v-model.number="n2">=<span>{{ n1 + n2 }}</span><br>

# .term

自动过滤用户输入的首尾空白字符

 <input type="text" :placeholder="user" v-model.term="username"><span>{{username}}</span><br>

# .lazy

在change而非input时更新(懒加载)

 <input type="text" :placeholder="user" v-model.term.lazy="username"><span>{{username}}</span><br>

# v-on

v-on指令的作用是:为元素绑定事件

  • 事件名不需要写on
  • 指令可以简写为@
  • 绑定的方法定义在 methods属性中
  • 方法内部通过this关键字可以访问到定义在data属性中的数据

# 示例代码


<div id="app">
    <div @click="todo">绑定事件的第一种方法</div>
    <div v-on:click="todo1">绑定事件的第二种方法</div>
    <p @click="todo2 ">{{food}}</p>
</div>
<script>
    const app = new Vue({
        el: '#app',
        message: '黑马纯许愿',
        data: {
            food: '西兰花'
        },
        methods: {
            todo: function () {
                console.log('点击了第一个')
            },
            todo1: function () {
                console.log('点击了第二个')
            },
            todo2: function () {
                this.food += '好吃'
            }
        }
    })
</script>

# v-on事件修饰符

  • prevent 阻止默认事件
  • stop 阻止事件冒泡
  • once 绑定的事件只触发一次
  • 事件修饰符文档传送门 https://cn.vuejs.org/v2/api/#v-on
  • 事件绑定的方法写成函数调用的形式,可以传入自定义参数
  • 定义方法时可以定义形参来接受传入的实参
  • 事件的后面跟上.修饰符可以对事件进行限制
  • .enter限制触发的按键为回车
  • 事件修饰符可以有多种

# v-show

v-show指令的作用是:根据真假切换元素的显示状态

  • 原理是修改元素的display实现隐藏和显示
  • 指令后面的内容最终会被解析为布尔值
  • 值为true元素显示 值为false元素隐藏
  • 数据改变后元素对应的显示状态会同步更新

# 示例代码


<div class="app">
    <div class="one" v-show="isshow"></div>
    <div class="one" v-show="age>18"></div>
    <button @click="changeshow">切换显示状态</button>
    <button @click="addage">年龄累加</button>
</div>
<script>
    const app = new Vue({
        el: ".app",
        data: {
            isshow: true,
            age: 16
        },
        methods: {
            changeshow: function () {
                this.isshow = !this.isshow
            },
            addage: function () {
                this.age++
            }
        }

    })
</script>

# v-text

v-text属性设置标签的内容

  • v-text属性会替换标签中所有的内容 可以写表达式
  • 推荐使用的方法 可以获取需要的数据 还可以输入表达式

# 示例代码


<div id="app">
    <h2 v-text="message+'!'">昆明</h2>
    <h2>昆明{{message+"!"}}</h2>
</div>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            message: '黑马程序员'
        }
    })
</script>
上次更新: 3/31/2023, 3:36:19 PM