Vue基础:vue模板语法

Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML 解析器解析。

在底层的实现上,Vue 将模板编译成虚拟 DOM 渲染函数。结合响应系统,Vue 能够智能地计算出最少需要重新渲染多少组件,并把 DOM 操作次数减到最少。

插值

1、文本
数据绑定最常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值:

<span>Message: {{ msg }}</span>

例子

<div id="app">
   <span>{{message}}</span>
  </div>
  <script>
   var app1=new Vue({
    el:"#app",
    data:{
     message:"2020!"
    }
   })
  </script>

在这里插入图片描述

通过使用 v-once 指令,你也能执行一次性地插值,当数据改变时,插值处的内容不会更新。

<span v-once>这个将不会改变: {{ msg }}</span>

例子

<div id="app">
   <span>会改变的值:{{message}}</span>
   <br />
   <span v-once>不变的值:{{message}}</span>
  </div>
  <script>
   var app1=new Vue({
    el:"#app",
    data:{
     message:"2020!"
    }
   })
  </script>

在这里插入图片描述

2、原始html

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

<p>Using mustaches: {{ rawHtml }}</p>
<p>Using v-html directive: <span v-html="rawHtml"></span></p>

span 的内容将会被替换成为属性值 rawHtml,直接作为 HTML——会忽略解析属性值中的数据绑定。

注意:在站点上动态渲染的任意 HTML 可能会非常危险,因为它很容易导致 XSS 攻击。请只对可信内容使用 HTML 插值,绝不要对用户提供的内容使用插值。
例子

<div id="app">
  <p>正常情况下:{{msghtml}}</p>
  <p>使用v-html的情况下:<span v-html="msghtml"></span></p>
 </div>
 <script>
  var app1=new Vue({
   el:"#app",
   data:{
    msghtml:'<span style="color:red">红色字体显示</span'
   }
  })
 </script>

在这里插入图片描述
3、attribute
Mustache 语法不能作用在 HTML attribute 上,遇到这种情况应该使用 v-bind 指令:

<div v-bind:id="dynamicId"></div>

这就能够通过控制 data 下的 dynamicId 的值来控制 div 标签上 id 属性的值。

对于布尔 attribute (它们只要存在就意味着值为 true),v-bind 工作起来略有不同,在这个例子中:

<button v-bind:disabled="isButtonDisabled">Button</button>

如果 isButtonDisabled 的值是 null、undefined 或 false,则 disabled attribute 甚至不会被包含在渲染出来的 <button> 元素中。
在这里插入图片描述

4、使用JavaScript表达式

对于所有的数据绑定,Vue.js 都提供了完全的 JavaScript 表达式支持。

表达式会在所属 Vue 实例的数据作用域下作为 JavaScript 被解析。有个限制就是,每个绑定都只能包含单个表达式。

例子

<div id="app">
   <p>number+2={{num+2}}</p>
   <p>{{ok?'yes':'no'}}</p>
   <p>{{message.split('')}}</p>
   <p>{{message.split('').reverse()}}</p>
   <p>{{message.split('').reverse().join('+')}}</p>
   <p>{{message.split('').reverse().join('')}}</p>
  </div>
  <script>
   var app1=new Vue({
    el:'#app',
    data:{
     num:3,
     ok:'true',
     message:'12345'
    }    
   })
  </script>

在这里插入图片描述

指令

指令 (Directives) 是带有 v- 前缀的特殊 attribute。指令 attribute 的值预期是单个 JavaScript 表达式 (v-for 是例外)。

1、接受参数
一些指令能够接收一个“参数”,在指令名称之后以冒号表示。例如,v-bind 指令可以用于响应式地更新 HTML attribute:

<a v-bind:href="url">...</a>
<a v-on:click="doSomething">...</a>

2、接收动态参数

(1)从 2.6.0 开始,可以用方括号括起来的 JavaScript 表达式作为一个指令的参数:

<a v-bind:[attributeName]="url"> ... </a>

attributeName 会被作为一个 JavaScript 表达式进行动态求值,求得的值将会作为最终的参数来使用。例如,如果你的 Vue 实例有一个 data 属性 attributeName,其值为 “href”,那么这个绑定将等价于 v-bind:href

(2)使用动态参数为一个动态的事件名绑定处理函数:

<a v-on:[eventName]="doSomething"> ... </a>

eventName 的值为 "focus" 时,v-on:[eventName] 将等价于 v-on:focus

(3)对动态参数的值的约束

动态参数预期会求出一个字符串,异常情况下值为 null。这个特殊的 null 值可以被显性地用于移除绑定。任何其它非字符串类型的值都将会触发一个警告。

(4)对动态参数表达式的约束

动态参数表达式有一些语法约束,因为某些字符,如空格和引号,放在 HTML attribute 名里是无效的。

<a v-bind:['foo' + bar]="value"> ... </a>

3、修饰符
修饰符 (modifier) 是以半角句号 . 指明的特殊后缀,用于指出一个指令应该以特殊方式绑定。例如,.prevent 修饰符告诉 v-on 指令对于触发的事件调用 event.preventDefault()

<form v-on:submit.prevent="onSubmit">...</form>

缩写

v-bind缩写

<!-- 完整语法 -->
<a v-bind:href="url">...</a>
<!-- 缩写 -->
<a :href="url">...</a>

v-on缩写

<!-- 完整语法 -->
<a v-on:click="doSomething">...</a>
<!-- 缩写 -->
<a @click="doSomething">...</a>
发布了137 篇原创文章 · 获赞 26 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_40119412/article/details/104277665