Vue.js学习笔记之常用模板语法详解


Posted in Javascript onJuly 25, 2017

本文介绍了Vue.js 常用模板语法,分享给大家,具体如下:

一、文本渲染

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

实时渲染

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

Vue.js学习笔记之常用模板语法详解

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

一次渲染

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

在 vm 对象里添加属性

require(["jquery", "bootstrap", "vue"], function ($, bootstrap, Vue) {
   var vm = new Vue({
     el: "#app",
     data: {
       msg_once: "once..."
     }
   });
 });

Vue.js学习笔记之常用模板语法详解

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

HTML代码渲染

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

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

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

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

<div class="row">
  <h2>文本 - HTML</h2>
  <div v-html="html"></div>
 </div>

Vue.js学习笔记之常用模板语法详解

二、表达式

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

运算表达式

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

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

Vue.js学习笔记之常用模板语法详解

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

三元运算表达式

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

<div>
  <h4>三元运算表达式</h4>
  <span v-pre>{{ ok ? 'YES' : 'NO' }}:</span><span>{{ ok ? 'YES' : 'NO' }}</span>
 </div>

Vue.js学习笔记之常用模板语法详解

Javascript方法

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

<div>
  <h4>Javascript方法</h4>
  <span v-pre>{{msg_once.split('').reverse().join('')}}:</span><span>{{msg_once.split('').reverse().join('')}}</span>
</div>

Vue.js学习笔记之常用模板语法详解

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

三、过滤器

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

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

require(["jquery", "bootstrap", "vue"], function ($, bootstrap, Vue) {
   var vm = new Vue({
     el: "#app",
     data: {
       filter_msg: 'base'
     },
     filters: {
       filter: function (value) {
         if (!value) {
           return '';
         }
 
         return value + '_filter1';
       },
       filter2: function (value) {
         if (!value) {
           return '';
         }
 
         return value + '_filter2';
       },
       filter_arg: function (value, arg1, arg2) {
         if (!value) {
           return '';
         }
 
         return value + ' ' + arg1 + ' ' + arg2;
       }
     }
   });
 });

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

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

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

Vue.js学习笔记之常用模板语法详解

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

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

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

Vue.js学习笔记之常用模板语法详解

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

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

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

Vue.js学习笔记之常用模板语法详解

 四、常用指令

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

常用的指令如下:

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

v-bind

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

<div>
  <h>v-bind(属性绑定)</h>
  <span v-pre>可用的按钮(v-bind:disabled="!btn_enabled"):</span><button v-bind:disabled="!btn_enabled" type="button">可以点击的按钮</button><br/>
  <span v-pre>不可用的按钮(v-bind:disabled="btn_enabled"):</span><button v-bind:disabled="btn_enabled" type="button">不可点击的按钮</button><br/>
  <span v-pre>缩写(:disabled="!btn_enabled"):</span><button :disabled="!btn_enabled" type="button">可以点击的按钮</button>
 </div>
require(["jquery", "bootstrap", "vue"], function ($, bootstrap, Vue) {
   var vm = new Vue({
     el: "#app",
     data: {
       btn_enabled: true
     }
   });
 });

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

Vue.js学习笔记之常用模板语法详解

Vue.js学习笔记之常用模板语法详解

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

v-on

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

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

require(["jquery", "bootstrap", "vue"], function ($, bootstrap, Vue) {
   var vm = new Vue({
     el: "#app",
     methods: {
       btn_click: function () {
         console.log("button click!");
       },
       btn_clickWithEvent: function($event){
         console.log($event);
       },
       btn_clickWithMsg: function (msg) {
         console.log("Message is:" + msg);
       }
     }
   });
 });

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

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

页面效果如下

Vue.js学习笔记之常用模板语法详解

Vue.js学习笔记之常用模板语法详解

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

v-for

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

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

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

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

<div>
  <h4>v-for(循环)</h4>
  <ul>
    <li v-for="item in books">
     {{ item }}
    </li>
  </ul>
 </div>

页面效果如下

Vue.js学习笔记之常用模板语法详解

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

Vue.js学习笔记之常用模板语法详解

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

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

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

<div>
  <h4>v-if、v-else-if、v-else(分支)</h4>
  <span>分支示例:</span>
  <input type="text" v-model="number" />
  <span v-if="number>10">大于10</span>
  <span v-else-if="number==10">等于10</span>
  <span v-else>小于10</span><br/>
 </div>

页面显示如下

Vue.js学习笔记之常用模板语法详解

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

Vue.js学习笔记之常用模板语法详解

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

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

Vue.js学习笔记之常用模板语法详解

Vue.js学习笔记之常用模板语法详解

v-show

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

<div>
  <h4>v-show(条件渲染)</h4>
  <span>v-show示例:</span>
 <input type="text" v-model="number" />
  <span v-show="number>10">大于10</span>
  <span v-show="number==10">等于10</span>
  <span v-show="number<10">小于10</span><br/>
 </div>

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

Vue.js学习笔记之常用模板语法详解

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

Vue.js学习笔记之常用模板语法详解

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

  1. v-if:动态插入或删除元素
  2. v-show:动态显示或隐藏元素

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用roll.js实现的图片自动滚动+鼠标触动的特效
Mar 18 Javascript
JS连接SQL数据库与ACCESS数据库的方法实例
Nov 21 Javascript
javascript白色简洁计算器
May 04 Javascript
json传值以及ajax接收详解
May 24 Javascript
JavaScript判断是否是微信浏览器
Jun 13 Javascript
bootstrap响应式导航条模板使用详解(含下拉菜单,弹出框)
Nov 17 Javascript
微信小程序时间标签和时间范围的联动效果
Feb 15 Javascript
JavaScript数组去重的方法总结【12种方法,号称史上最全】
Feb 28 Javascript
Vue使用Proxy监听所有接口状态的方法实现
Jun 07 Javascript
详解Node.js异步处理的各种写法
Jun 09 Javascript
Swiper.js实现移动端元素左右滑动
Sep 08 Javascript
vue基于better-scroll实现左右联动滑动页面
Jun 30 Javascript
jQuery实现键盘回车搜索功能
Jul 25 #jQuery
简单实现js鼠标跟随效果
Aug 02 #Javascript
BootStrap的双日历时间控件使用
Jul 25 #Javascript
vue事件修饰符和按键修饰符用法总结
Jul 25 #Javascript
Vue.js学习笔记之修饰符详解
Jul 25 #Javascript
ES6正则表达式扩展笔记
Jul 25 #Javascript
简单实现js拖拽效果
Jul 25 #Javascript
You might like
php数组函数序列之array_unique() - 去除数组中重复的元素值
2011/10/29 PHP
php操作MongoDB类实例
2015/06/17 PHP
Laravel 5.3 学习笔记之 错误&amp;日志
2016/08/28 PHP
详解PHP中array_rand函数的使用方法
2016/09/11 PHP
PHP获取redis里不存在的6位随机数应用示例【设置24小时过时】
2017/06/07 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
再谈javascript原型继承
2014/11/10 Javascript
原生javascript实现图片滚动、延时加载功能
2015/01/12 Javascript
JavaScript动态生成二维码图片
2016/04/20 Javascript
location.hash保存页面状态的技巧
2016/04/28 Javascript
微信开发 使用picker封装省市区三级联动模板
2016/10/28 Javascript
JavaScript对象_动力节点Java学院整理
2017/06/23 Javascript
js实现日期显示的一些操作(实例讲解)
2017/07/27 Javascript
微信小程序实现横向增长表格的方法
2018/07/24 Javascript
vue elementUI tree树形控件获取父节点ID的实例
2018/09/12 Javascript
微信小程序实现随机验证码功能
2018/12/20 Javascript
微信小程序实现文字无限轮播效果
2018/12/28 Javascript
vue.js引入外部CSS样式和外部JS文件的方法
2019/01/06 Javascript
nodejs二进制与Buffer的介绍与使用
2019/07/11 NodeJs
[01:03:59]2018DOTA2亚洲邀请赛3月30日 小组赛B组VGJ.T VS Secret
2018/03/31 DOTA
Python实现的ini文件操作类分享
2014/11/20 Python
Python中使用logging模块打印log日志详解
2015/04/05 Python
python MySQLdb使用教程详解
2018/03/20 Python
Python实现的特征提取操作示例
2018/12/03 Python
django前端页面下拉选择框默认值设置方式
2020/08/09 Python
HTML5 video播放器全屏(fullScreen)方法实例
2015/04/24 HTML / CSS
佐卡伊官网:中国知名珠宝品牌
2017/02/05 全球购物
Zavvi西班牙:电子游戏、极客服装、Blu-ray、Funko Pop等
2019/05/03 全球购物
会计学应届毕业生推荐信
2013/11/04 职场文书
颁奖典礼主持词
2014/03/25 职场文书
应届生求职自荐信
2014/07/04 职场文书
十佳家长事迹材料
2014/08/26 职场文书
公司给客户的感谢信
2015/01/23 职场文书
2015年度保密工作总结
2015/04/24 职场文书
同事去世追悼词
2015/06/23 职场文书
2016银行求职自荐信
2016/01/28 职场文书