Vue深入解析-插值,绑定与指令

在上一篇文章<<Vue深入解析-Mustache>>中,我们解释了vue在插值和绑定表达式时使用的模板语言Mustache的相关知识,这篇文章我们会深入解析下Vue是如何使用Mustache模板的语法.

插值

插值是Vue用来实现使用数据绑定的一种方式,在Vue中常用的方式如下:

  • 文本插值
    使用"Mustache"语法(双括号 {{keyName}} 语法 直接输出与键名匹配的键值),实现文本插值对数据的基本绑定: 在解析过程中Mustache标签会被相应数据对象的属性的值替换,每当这个属性变化时它也会更新.
    代码段:

<div id="msg">
<p>{{msg}}</p>
</div>
<script>
var msg = new Vue({
el:"#msg",
data:{
msg:"This is a message."
}
})
</script>

如果这时通过控制台,运行:
** msg.$data.msg = "This is a new message" **
这时你会发现页面中的文本会跟着发生变化.
插值与数据彼此关联,数据更新引发插值更新.如果只想进行单次插值,可以向如下使用:

<span>This will never change: {{* msg}}</span>

  • 原始HTML
    使用三括号的Mustache,进行原始HTML输出(这是Mustache的语法 {{{keyName}}}会保持内容原样输出)

<div id="vueHtml">
{{{vueHtml}}}
</div>
<script>
var vueHtml = new Vue({
el:"#vueHtml",
data:{
vueHtml:"<p>这段文字会原样输出HTML代码</p>"
}
})
</script>

  • HTML属性:
    Mustache标签( {{keyName}} 会直接输出与键名匹配的键值的特性)可以用在html属性内:

<div id="component">
<div id="item-{{id}}"></div>
</div>
<script>
var comp = new Vue({
el:"#component",
data:{
'id':"val1"
}
});
</script>

绑定表达式

放在Mustache标签内的文本称为绑定表达式,在Vue.js中,一段绑定表达式由一个简单的Javascript表达式和可选的一个多个过滤器构成.
** a.Javascript表达式 **
在双括号的Mustache标签内,可以包含的是单个js表达式,如果是语句的话就是无效的.
{{ number + 1}}
{{ ok ? "Yes" : "No"}}
{{message.split('').reverse().join("")}}
以下均无效
{{var a = 1}} //这是一个语句
{{if(ok) {return message}}} //控制语句

<div id="component">
<div>{{ number + 1}}</div>
<div>{{ ok ? "Yes" : "No"}}</div>
<div>{{message.split('').reverse().join("")}}</div>
</div>
<script>
var comp = new Vue({
el:"#component",
data:{
'message':"edcba",
'number':12,
'ok':"1"
}
});
</script>

b.过滤器
vue.js允许在表达式后添加可选的"过滤器",将表达式message的值,运用管道(pipe),输到相应的过滤器内,过滤器对输入进行处理,最好返回处理后的 值.(真是个很棒的想法)除了vue内部自带的过滤器,还可以自定义过滤器.
{{ message | capitalize }}
这里我们将表达式 message 的值通过内部管道输入到内置过滤器 capitalize过滤器中,这个过滤器其实只是一个Javascript函数,返回大写化的值.
由表达式到过滤器通过类似管道的方式进行传递数据,处于这种特性也就不难理解,vue的过滤器可以串联了(A过滤器处理完的数据,又传到B过滤器进行处理):
{{ message | filterA | filterB}}
由于过滤器本质就是函数,所以其必然可以接收参数:
{{ message | filterA "arg1" arg2}}
在Vue的过滤器的预设中,如果是带引号的会直接当作参数传递个过滤器("arg1"会直接传递给过滤器filterA当作第二个参数,第一个参数是message的 返回值),arg2会被当作表达式,在arg2值计算出来后,把arg2计算出的值,当作第三个参数传递给过滤器filterA.
下面是一个过滤使用的例子,这里对item.name使用lowercase进行小写过滤,item.price使用currency对输出进行过滤.

<div id="component">
<ul>
<li v-for="item in fItems"> name: {{item.name|lowercase }}; price:{{item.price|currency "$"}} </li>
</ul>
</div>
<script>
var comp = new Vue({

el:"#component",
data: {
fItems: [{name: "《精通Spring》",price: "38.80"},
{name: "《精通Hibiernate》", price: "28.80"},
{ name: "《精通Jquery》", price: "25.99"},
{name: "《精通Vue》",price: "18.88"}]
}
});
</script>

指令

指令是vue.js中特殊的带有前缀v-的特性,指令的值限定为绑定表达式.指令的职责就是当表达式的值发生改变时,把某些特殊的行为应用到Dom上.

<p v-if="greeting">Hello</p>

这里的v-if指令将根据表达式greeting值的真假删除/插入<p>元素
参数
有些指令可以在其名称后面带上一个参数,中间用一个冒号隔开.
例如,v-bind指令用于响应地更新HTML特性:

<a v-bind:href="url"></a>

这里href是参数,它告诉v-bind指令将元素href特性跟表达式url的值绑定.
v-on指令,用于监听DOM事件:

<a v-on:click="doSomething"></a>

修饰符
修饰符(Modifiers)是以半角句号(.)开始的特殊后缀,用于表示指令应当以特殊方式绑定.
比如:.literal修饰符告诉指令将它的值解析为一个字面字符串,而不是一个表达式:

<a v-bind:href.literal="/a/b/c"></a>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容