Vue常用模板语法

常用模板语法

本篇将在上一篇的基础上记录文本渲染、表达式、过滤器以及常用指令的简单用法。

一、文本渲染

Vue支持动态渲染文本,即在修改属性的同时,实时渲染文本内容。同时为了提高渲染效率,也支持只渲染一次,即第一次渲染出文本后,文本内容不再跟随属性值的变化而变化。

实时渲染

1 <div class="row">
2   <h2>文本 - 实时渲染</h2>
3   <input type="text" v-model="msg" class="col-md-2" />
4   <span class="col-md-10">{{ msg }}</span>
5 </div>

v-model 指令将 input 标签的值动态绑定到属性 msg 上,通过 {{ msg }} 表达式显示在页面上。当修改文本框内容时,后面的页面内容将实时变化并与文本框内容保持一致。

一次渲染

1 <div class="row">
2   <h2>文本 - 一次渲染</h2>
3   <input type="text" v-model="msg_once" class="col-md-2" />
4   <span class="col-md-10" v-once>{{ msg_once }}</span>
5 </div>

在 vm 对象里添加属性

1 require(["jquery", "bootstrap", "vue"], function ($, bootstrap, Vue) {
2     var vm = new Vue({
3         el: "#app",
4         data: {
5             msg_once: "once..."
6         }
7     });
8 });

页面第一次加载完成时,页面显示once...,当 span 标签加上 v-once 指令后,无论如何修改文本框内容,页面内容都不会变化。

HTML代码渲染

某些情况下,页面需要动态的插入一段HTML代码

在 vm 对象里添加属性,属性值为一段HTML代码

1 require(["jquery", "bootstrap", "vue"], function ($, bootstrap, Vue) {
2     var vm = new Vue({
3         el: "#app",
4         data: {
5             html: "<span>This is a html tag.</span>"
6         }
7     });
8 });

页面元素添加 v-html 指令后,元素对应位置将显示出属性值内的对应元素

1 <div class="row">
2   <h2>文本 - HTML</h2>
3   <div v-html="html"></div>
4 </div>

二、表达式

上文中已经介绍过的 {{ msg }} 就是一个简单的表达式。除此之外,还有一些常用的表达式写法。

运算表达式

在上述简单表达式中可以使用运算符,Vue会将运算后的结果渲染在页面上

1 <div>
2   <h4>运算表达式</h4>
3   <span v-pre>{{ Number(number)+1 }}:</span>
4   <input v-model="number" type="text" />
5   <span>运算结果:{{ Number(number)+1 }}</span>
6 </div>

在文本框中输入数字,Vue通过表达式内的运算符实时计算出结果,并显示出来。因为文本框内容为字符串,所以在表达式中需要对 number 属性进行类型转换成数字。

三元运算表达式

Vue支持在表达式内使用三元运算符

1 <div>
2   <h4>三元运算表达式</h4>
3   <span v-pre>{{ ok ? ‘YES‘ : ‘NO‘ }}:</span><span>{{ ok ? ‘YES‘ : ‘NO‘ }}</span>
4 </div>

Javascript方法

表达式内也可以使用Javascript支持的基础方法,Vue会动态执行方法并显示最终结果

1 <div>
2   <h4>Javascript方法</h4>
3   <span v-pre>{{msg_once.split(‘‘).reverse().join(‘‘)}}:</span><span>{{msg_once.split(‘‘).reverse().join(‘‘)}}</span>
4 </div>

这个例子是将 msg_once 属性值的字符进行倒序排列后重新组合起来。

三、过滤器

过滤器经常用来进行内容的格式化显示。Vue支持自定义过滤器

首先要在 vm 对象里增加过滤器方法

 1 require(["jquery", "bootstrap", "vue"], function ($, bootstrap, Vue) {
 2     var vm = new Vue({
 3         el: "#app",
 4         data: {
 5             filter_msg: ‘base‘
 6         },
 7         filters: {
 8             filter1: function (value) {
 9                 if (!value) {
10                     return ‘‘;
11                 }
12
13                 return value + ‘_filter1‘;
14             },
15             filter2: function (value) {
16                 if (!value) {
17                     return ‘‘;
18                 }
19
20                 return value + ‘_filter2‘;
21             },
22             filter_arg: function (value, arg1, arg2) {
23                 if (!value) {
24                     return ‘‘;
25                 }
26
27                 return value + ‘ ‘ + arg1 + ‘ ‘ + arg2;
28             }
29         }
30     });
31 });

所有的过滤器方法都要定义在 filters 属性里,方法的第一个参数值就是传递进来需要被处理的原始内容,方法的返回值即时处理过的新内容。

自定义的过滤器使用方法如下

1 <div>
2   <h4>单一过滤器</h4>
3   <span v-pre>{{ filter_msg | filter1 }}:</span><span>{{ filter_msg | filter1 }}</span>
4 </div>

上面的例子中,过滤器通过管道符号“|”与需要处理的内容进行连接,将 filter_msg 属性值经过 filter1 过滤器,在后面追加内容并显示。

同时,Vue也支持连接多个过滤器

1 <div>
2   <h4>串联过滤器</h4>
3   <span v-pre>{{ filter_msg | filter1 | filter2 }}:</span><span>{{ filter_msg | filter1 | filter2 }}</span>
4 </div>

这个例子中,通过管道符号“|”,可以连接多个过滤器,每前一个过滤器的输出将作为后一个过滤器的输入,直到显示最终结果。

当过滤器有多个参数时,Vue也支持带参数调用

1 <div>
2   <h4>过滤器参数</h4>
3   <span v-pre>{{ filter_msg | filter_arg(‘arg1‘, ‘arg2‘) }}:</span><span>{{ filter_msg | filter_arg(‘arg1‘, ‘arg2‘) }}</span>
4 </div>

四、常用指令

指令就是将一些特殊行为应用到页面DOM元素的特殊属性。Vue的内置指令都是一些带有 v- 前缀的特殊属性。

常用的指令如下:

  • v-bind
  • v-on
  • v-for
  • v-if
  • v-else-if
  • v-else
  • v-show

v-bind

该指令用来给元素绑定一个或多个特性

1 <div>
2   <h4>v-bind(属性绑定)</h4>
3   <span v-pre>可用的按钮(v-bind:disabled="!btn_enabled"):</span><button v-bind:disabled="!btn_enabled" type="button">可以点击的按钮</button><br/>
4   <span v-pre>不可用的按钮(v-bind:disabled="btn_enabled"):</span><button v-bind:disabled="btn_enabled" type="button">不可点击的按钮</button><br/>
5   <span v-pre>缩写(:disabled="!btn_enabled"):</span><button :disabled="!btn_enabled" type="button">可以点击的按钮</button>
6 </div>

1 require(["jquery", "bootstrap", "vue"], function ($, bootstrap, Vue) {
2     var vm = new Vue({
3         el: "#app",
4         data: {
5             btn_enabled: true
6         }
7     });
8 });

在上面的例子里,给 vm 对象增加一个名称为 btn_enabled 的布尔属性,在按钮中通过 v-bind:disabled="btn_enabled" 动态给 disabled 属性赋值

页面上可以看到“不能点击的按钮”动态增加了一个 disabled 属性。同时 v-bind:disabled="!btn_enabled" 也可以简写成 :disabled="!btn_enabled" 。

v-on

该指令绑定事件监听器。事件类型由参数指定。表达式可以是一个方法的名字或一个内联语句。用在普通元素上时,只能监听原生 DOM 事件。在监听原生 DOM 事件时,方法以事件为唯一的参数。如果使用内联语句,语句可以访问一个 $event 属性。

在 vm 对象的 methods 属性里添加自定义方法

 1 require(["jquery", "bootstrap", "vue"], function ($, bootstrap, Vue) {
 2     var vm = new Vue({
 3         el: "#app",
 4         methods: {
 5             btn_click: function () {
 6                 console.log("button click!");
 7             },
 8             btn_clickWithEvent: function($event){
 9                 console.log($event);
10             },
11             btn_clickWithMsg: function (msg) {
12                 console.log("Message is:" + msg);
13             }
14         }
15     });
16 });

通过属性 v-on:click="btn_click" 在按钮上添加 click 事件

1 <div>
2   <h4>v-on(事件绑定)</h4>
3   <span v-pre>点击事件(v-on:click="btn_click"):</span><button v-on:click="btn_click" type="button">点我!</button><br/>
4   <span v-pre>带事件参数的点击事件(v-on:click="btn_clickWithEvent($event)"):</span><button v-on:click="btn_clickWithEvent($event)" type="button">点我!</button><br/>
5   <span v-pre>带自定义参数的点击事件(v-on:click="btn_clickWithMsg(‘Hello world!‘)"):</span><button v-on:click="btn_clickWithMsg(‘Hello world!‘)" type="button">点我!</button><br/>
6   <span v-pre>缩写(@click="btn_click"):</span><button @click="btn_click" type="button">点我!</button>
7 </div>

页面效果如下

v-on指令也支持缩写,用@符号代替,比如: @click="btn_click" 。

v-for

该指令用来基于源数据多次渲染元素或模板块。

在 vm 对象里添加一个数组类型的属性 books

1 require(["jquery", "bootstrap", "vue"], function ($, bootstrap, Vue) {
2     var vm = new Vue({
3         el: "#app",
4         data: {
5             books: ["深入浅出node", "C#本质论", "编程珠玑"]
6         }
7     });
8 });

通过 v-for 指令实现一个简单列表

1 <div>
2   <h4>v-for(循环)</h4>
3   <ul>
4       <li v-for="item in books">
5          {{ item }}
6       </li>
7   </ul>
8 </div>

页面效果如下

v-for 属性值是一个 item in expression 结构的表达式,其中 item 代表 expression 运算结果的每一项。最终的HTML代码如下

v-if、v-else-if、v-else

条件渲染指令,通过表达式结果的真假来插入和删除元素。 v-if 可以单独使用,而 v-else-if 、 v-else 必须和 v-if 一起使用。

下面是一个简单用法的例子

1 <div>
2   <h4>v-if、v-else-if、v-else(分支)</h4>
3   <span>分支示例:</span>
4   <input type="text" v-model="number" />
5   <span v-if="number>10">大于10</span>
6   <span v-else-if="number==10">等于10</span>
7   <span v-else>小于10</span><br/>
8 </div>

页面显示如下

当文本框里输入小于10的数字时,右侧只显示“小于10”的文本内容。

查看源码发现,只有“小于10”的内容的 span 标签存在,另外两个标签被插入到页面中。

同样,在输入大于10的数字时,右侧只显示“大于10”的文本内容。而源码里只有对应的 span 标签存在。

v-show

该指令也是条件渲染指令,但是与上述的 v-if 有不同。这可以通过一个例子来说明。

1 <div>
2   <h4>v-show(条件渲染)</h4>
3   <span>v-show示例:</span>
4   <input type="text" v-model="number" />
5   <span v-show="number>10">大于10</span>
6   <span v-show="number==10">等于10</span>
7   <span v-show="number<10">小于10</span><br/>
8 </div>

将上面例子里的指令都换成 v-show ,页面显示如下

从页面显示的结果上看,没有任何区别。但是查看源码会发现,符合表达式结果判断的元素内容将被显示,不符合结果判断的元素将被隐藏,即被加上 display: none; 的样式。

从上面两个例子对比可以看出

  • v-if:动态插入或删除元素
  • v-show:动态显示或隐藏元素
时间: 2024-10-12 23:35:02

Vue常用模板语法的相关文章

Vue.js模板语法

Vue.js模板语法 Vue 实例 构造器 每个 Vue.js 应用都是通过构造函数 Vue 创建一个 Vue 的根实例来启动的: var vm = new Vue({ // 选项 }) 属性与方法 每个 Vue 实例都会代理其 data 对象里所有的属性: var data = { a: 1 } var vm = new Vue({ data: data }) vm.a === data.a // -> true // 设置属性也会影响到原始数据 vm.a = 2 data.a // ->

VUE:模板语法(小白自学)

VUE:模板语法 一:何为声明式 安装规定的语法,去实现一些效果(不需要管流程). 二:模板语法 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <!-- 1 模板的理解:动态的html页面,包含了一些js语法代码 双大括号表达式 指令(以v-开头的自定义标签属性)

vue介绍——模板语法

模板语法介绍 Vue.js使用了基于HTML的模板语法,允许开发者声明式地将dom绑定至底层Vue实例的数据.所有Vue.js的模板都是合法的HTML,所以能被遵循规范的浏览器和HTML解析器解析. 在底层的实现上,Vue将模板编译成虚拟dom渲染函数.结合响应式系统,Vue能够智能的重新计算出最少需要重新渲染多少组件,并把dom操作次数减少到最少. 如果熟悉虚拟dom并且偏爱JavaScript的原始力量,也可以不用模板,直接写渲染函数,使用可选的JSX语法. 插值--文本 数据绑定最常用的就

一起学Vue之模板语法

概述 Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据.所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML 解析器解析. 普通文本 数据绑定最常见的形式就是使用“Mustache[小胡子]”语法 (双大括号) 的文本插值,无论何时,绑定的数据对象上 msg 属性发生了改变,插值处的内容都会更新. 1 <span>{{msg}}</span> 通过使用 v-once 指令,执行一次性插值,

Vue基础模板语法的认识

模板语法 mustache 语法中是支持写js的 用法: 内容: 必须加 {{ js语法 }} 属性: 属性中属性值可以直接写js语法,并且属性值中的数据相当于全局变量 给一个标签加一个自定义属性/已有属性 img中的src就是已有属性<img src = "" /> ?//data-index就是自定义属性 , web网页中建议我们使用data-形式来定义自定义属性<img data-index = "0" />? 思考: Vue现在想要在

vue入门:(模板语法与指令)

vuejs使用及HTML的模板语法,可以实现声明式将DOM绑定至底层VUE实例的数据.通过模板语法将数据渲染进DOM的系统,结合响应系统,在应用状态改变时,Vue能够计算出重新渲染组件的最小代价并应用到DOM操作上. VUE的模板语法的内容包括:插值.指令. 插值包括:文本插值.原始HTML插值.特性插值.以及使用javascript表达式实现插值. 指令:参数.动态参数.修饰符. 缩写形式是指v-bind和v-on指定可以采用缩写形式:'v-bind:'-->‘:’.'v-on'-->'@'

VUE的基本语法

UVE官网 1.VUE的介绍 | 框架 | 介绍 | | ------- | ------------------------------------------------------------ | | vue | 尤雨溪,渐进式的JavaScript框架 | | react | Facebook公司,里面的高阶函数非常多,对初学者不用好 | | angular | 谷歌公司,目前更新到6.0,学习angular得需要玩一下typescript Vue angular2.0 3.0~6.0

Vue最常用的组件通讯有三种:父-&gt;子组件通讯、子-&gt;父组件通讯,兄弟组件通讯.(template用的pug模板语法)

Vue最常用的组件通讯有三种:父->子组件通讯.子->父组件通讯,兄弟组件通讯.(template用的pug模板语法) 1.父->子组件通讯 父->子组件通讯,是通过props进行数据传递,并且具有这几个特性,单向传递,子组件接收的数据不可以更改,如果更改,会发出警告,每次父组件更新时,子组件的所有 prop 都会更新为最新值. 1 父组件 2 <template lang="pug"> 3 .father 4 Children(:name='msg

vue.js 学习之模板语法详解

本文和大家分享的主要是vue.js 的模板语法,希望对大家学习vue.js有所帮助,一起来看看吧. Vue.js 使用了基于 HTML 的模版语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据.所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML 解析器解析. 在底层的实现上, Vue 将模板编译成虚拟 DOM 渲染函数.结合响应系统,在应用状态改变时, Vue 能够智能地计算出重新渲染组件的最小代价并应用到 DOM 操作上. 如果你熟悉虚拟 D