HuKai's Blog HuKai's Blog
首页
  • Java核心技术

    • Java基础
    • Java并发编程
    • JVM
    • Java新特性
  • Spring生态

    • Spring5
    • SpringMVC
    • SpringBoot
  • 开源框架

    • MyBatis
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 设计模式
  • SQL数据库

    • MySQL
    • Oracle
  • NoSQL数据库

    • Redis
    • MongoDB
  • 页面样式

    • HTML
    • CSS
  • JavaScript

    • JavaScript基础
    • ECMAScript6教程
    • TypeScript
  • 前端框架

    • Vue
    • Webpack
  • NIO
  • Netty
  • RabbitMQ
  • 技术文档

    • GitHub技巧
    • 博客搭建
    • 技术笔记
  • 优质文章

    • 小技巧
    • 解决方案
GitHub (opens new window)

HuKai

梦想成为全栈的保安
首页
  • Java核心技术

    • Java基础
    • Java并发编程
    • JVM
    • Java新特性
  • Spring生态

    • Spring5
    • SpringMVC
    • SpringBoot
  • 开源框架

    • MyBatis
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 设计模式
  • SQL数据库

    • MySQL
    • Oracle
  • NoSQL数据库

    • Redis
    • MongoDB
  • 页面样式

    • HTML
    • CSS
  • JavaScript

    • JavaScript基础
    • ECMAScript6教程
    • TypeScript
  • 前端框架

    • Vue
    • Webpack
  • NIO
  • Netty
  • RabbitMQ
  • 技术文档

    • GitHub技巧
    • 博客搭建
    • 技术笔记
  • 优质文章

    • 小技巧
    • 解决方案
GitHub (opens new window)
  • HTML

  • CSS

  • JavaScript基础

  • ECMAScript

  • TypeScript

  • Vue

    • Vue基础

      • 初识Vue
      • 模板语法 - 插值语法 - 指令语法
        • 模板语法
        • 指令语法
          • 强制数据绑定 v-bind:
          • 单向数据绑定
          • 双向数据绑定 指令 v-model
        • 指令语法
          • 绑定事件监听 v-on:
        • v-text 与 v-html
          • v-text
          • v-html
        • 条件渲染指令
          • v-if
          • v-show
          • 比较 v-if 与 v-show
        • 总结
      • 计算属性和监听属性
      • 样式绑定 - class - style
      • 列表渲染v-for
      • 事件处理v-on
      • 表单输入绑定
      • 生命周期钩子
      • 过滤器filter
      • 常用内置指令
      • 自定义指令
    • Vue组件化编程

    • Vue脚手架

    • Vue插件

  • Webpack

  • 前端
  • Vue
  • Vue基础
HuKai
2022-02-22
目录

模板语法 - 插值语法 - 指令语法

Vue 有很多模板语法特别好用,就是在 HTML 中写一些 Vue 定义的一些模板语法,可以快速的展现数据,绑定方法等。这也就是 Vue 上手很快的原因之一。

官方文档:模板语法 — Vue.js (vuejs.org) (opens new window)

# 模板语法

我们先来理解理解什么是模板?

模板就是动态 html 页面,这里面包含了一些 js 语法代码

Vue 的模板语法分为两种,分别是:

  • 【插值语法】双大括号表达式 (“Mustache” 语法)【一个】
  • 【指令语法】指令(以 v - 开头的自定义标签属性)【很多】
  1. 插值语法:
  • 功能:用于解析标签体内容,向页面输出数据
  • 写法:{_{ xxx }},xxx 是 js 表达式,且可以直接读取到 data 中的所有属性,可以调用对象的方法
  • 备注:里面写 js 表达式:有返回值的 js 代码,而不是 js 语句
  1. 指令语法:
  • 功能:用于解析标签(包括:标签属性、标签体内容、绑定事件.....)
  • 举例:v-bind:href="xxx" 或 简写为 :href="xxx",xxx 同样要写 js 表达式,且可以直接读取到 data 中的所有属性
  • 备注:Vue 中有很多的指令,且形式都是:v-????

下面我们来介绍几个常用的指令语法

# 指令语法

# 强制数据绑定 v-bind:

功能:指定变化的属性值

完整写法

v-bind:xxx='yyy'  // yyy会作为表达式解析执行
1

简洁写法

:xxx='yyy'
1

# 单向数据绑定

  1. 语法:v-bind:href ="xxx" 或简写为 :href ="xxx"
  2. 特点:数据只能从 data 流向页面

# 双向数据绑定 指令 v-model

  1. 语法:v-mode:value="xxx" 或简写为 v-model="xxx"
  2. 特点:数据不仅能从 data 流向页面,还能从页面流向 data

# 指令语法

# 绑定事件监听 v-on:

功能:绑定指定事件名的回调函数

完整写法

v-on:click='xxx'
v-on:keyup='xxx(参数)'
v-on:keyup.enter='xxx'
1
2
3

简洁写法

@click='xxx'
@keyup='xxx'
@keyup.enter='xxx'
1
2
3

# v-text 与 v-html

# v-text

  1. 作用:向其所在的节点中渲染文本内容。
  2. 与插值语法的区别:v-text会替换掉节点中的内容,{_{xx}}则不会。

# v-html

  1. 作用:向指定节点中渲染包含 html 结构的内容。
  2. 与插值语法的区别:
  • (1).v-html会替换掉节点中所有的内容,{_{xx}}则不会。
  • (2).v-html可以识别 html 结构。
  1. 严重注意:v-html有安全性问题!!!!
  • (1). 在网站上动态渲染任意 HTML 是非常危险的,容易导致 XSS 攻击。
  • (2). 一定要在可信的内容上使用v-html,永不要用在用户提交的内容上!
<body>
    <div id='app'>

        <h2>1. 大括号表达式</h2>
        <p>{{msg}}</p>    <!--textContent -->
        <p>{{msg.toUpperCase()}}</p>

        <p v-html="msg"></p> <!--innerHTML -->

        <p v-text="msg"></p> <!--textContent -->
        <p v-text="msg.toUpperCase()"></p>


        <h2>2. 指令一: 强制数据绑定</h2>
        <img src="imgUrl" alt="Vue">  <!--无法显示图片,没有识别成js表达式 -->
        <img v-bind:src="imgUrl" alt="Vue"> <!--属性值识别成js表达式 -->
        <img :src="imgUrl" alt="Vue">


        <h2>3. 指令二: 绑定事件监听</h2>
        <button v-on:click="test1">test1</button>
        <button @click="test1">test1</button>
        
        <button @click="test2('abc')">test2</button> <!--可以传参数 -->
        <button @click="test2(msg)">test2</button>
    </div>



    <script src="../js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                msg: '<a href="http:www.baidu.com">I Will Back!</a>',
                imgUrl: "https://cn.vuejs.org/images/logo.png"
            },
            methods: {
                test1() {
                    alert('heheh');
                },
                test2(content){
                    alert(content);
                }
            }

        })
    </script>
</body>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

# 条件渲染指令

# v-if

移除标签删除

  • v-if
  • v-else

写法:

  1. v-if="表达式"
  2. v-else-if="表达式"
  3. v-else="表达式"

适用于:切换频率较低的场景。 特点:不展示的 DOM 元素直接被移除。 注意:v-if 可以和: v-else-if、v-else 一起使用,但要求结构不能被 “打断”。

# v-show

添加样式隐藏(display: none)

写法:v-show="表达式" 适用于:切换频率较高的场景。 特点:不展示的 DOM 元素未被移除,仅仅是使用样式隐藏掉

【备注】使用 v-if 的时候,元素可能无法获取到,而使用 v-show 一定可以获取到。

# 比较 v-if 与 v-show

v-if是控制元素是否加载到页面上(有性能开销) v-show是控制元素的显示与隐藏 (初始创建时加载一次)

  • 如果需要频繁切换 v-show 较好
  • 当条件不成立时, v-if 的所有子节点不会解析
<body>
    <div id="demo">

        <p v-if="ok">成功了</p> <!-- 移除标签删除 -->
        <p v-else>失败了</p>

        <p v-show="ok">又成功了</p> <!-- 添加样式隐藏 -->
        <p v-show="!ok">又失败了</p>

        <button @click="ok = !ok">切换</button>
    </div>

    <script src="../js/vue.js"></script>
    <script>
        new Vue({
            el: '#demo',
            data: {
                ok: false,
            }
        })
    </script>
</body>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 总结

一些常用的指令:

  • v-text : 更新元素的 textContent
  • v-html : 更新元素的 innerHTML
  • v-if : 如果为 true, 当前标签才会输出到页面
  • v-else: 如果为 false, 当前标签才会输出到页面
  • v-show : 通过控制 display 样式来控制显示 / 隐藏
  • v-for : 遍历数组 / 对象
  • v-on : 绑定事件监听, 一般简写为 @
  • v-bind : 强制绑定解析表达式, 可以省略 v-bind
  • v-model : 双向数据绑定
  • ref : 为某个元素注册一个唯一标识, vue 对象通过 $refs 属性访问这个元素对象
  • v-cloak : 使用它防止闪现表达式, 与 css 配合: [v-cloak] { display: none }
编辑 (opens new window)
#Vue
上次更新: 2022/03/20, 11:17:00
初识Vue
计算属性和监听属性

← 初识Vue 计算属性和监听属性→

最近更新
01
MyBatisPlus
03-20
02
MyBatis源码剖析-延迟加载
03-20
03
MyBatis源码剖析-二级缓存
03-20
更多文章>
Theme by Vdoing | Copyright © 2021-2022 HuKai | 赣ICP备17016768号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式