Vue2.0学习--基础--2--模板语法

(day3)

插值、指令、缩写

前面两天已经学到了Vue 核心的四个基本功能:声明式渲染、条件和循环、处理用户输入、组件化的创建应用。这里面讲到了v-开头的一些指令,以及在HTML中声明同JavaScript中的Vue实例之间的数据绑定。

另外一个就是Vue实例,我们知道了一个Vue应用,就是从创建根Vue实例开始,加上各个可嵌套的组件组成。我们了解到了Vue实例中的选项对象的各种选项,以及$前缀的实例属性和实例方法, 在选项对象中定义的Vue实例创建过程中各个生命周期的钩子函数,通过钩子函数加入我们的代码,以及在Vue实例创建过程中的生命周期图。

(这些都是让我们初识Vue,留下了很多坑,但是也只能是先知道怎么用,再来知道“为什么”)

今天学习的是Vue基础——模板语法。

在前面第一天我们知道一个概念:Vue的核心是 允许使用简洁的模板语法 来声明式的 将数据渲染进DOM 的 一个系统。

那么我们今天了解一下这个“简洁的模板语法”。

我们通过Vue的模板语法,“告诉”Vue实例我们的意图——我们要完成的各种操作,这些操作会涉及到DOM,然后Vue实例将我们用模板语法写出来的“意图”,编译成为虚拟DOM渲染函数结合Vue的响应系统,智能的计算出最少需要渲染多少组件,并将DOM操作次数减到最少。

(如果你熟悉虚拟DOM并且偏爱JavaScript的原始力量,也可以不使用模板,直接写渲染(render)函数,使用可选的JSX语法

Vue.js的模板语法是基于HTML的,我们的“意图”通过模板语法,传达给Vue实例。

所以我们在编写Vue应用的时候都会涉及到HTML中的元素以及属性等和JavaScript中Vue实例的绑定,然后操作等等。

具体的怎么操作就是今天要学的Vue模板语法的知识点。

1、插值

 插值这一部分就会讲到文本、原始HTML、Attribute、使用JavaScript表达式

①、#文本

文本插值,也就是我们第一天学到的{{}}语法(双大括号)——“Mustache”语法

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

这里的msg标签,会和Vue实例中数据对象上的msg 属性的值相绑定。

数据对象上的msg属性值发生了变化,那么在HTML插值处的内容也会发生相应的变化。

除非:

v-once指令,一次性的插值,插值处的内容不会更新。

注意,这会影响到该节点上的其他数据绑定

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

②、#原始HTML

 在这个Mustache语法中,双大括号中的内容会被解释为普通文本

但是如果我想把这个双大括号中的内容输出为HTML时,我们需要使用v-html指令

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

<script>
    var app = new  Vue({
        el:"#..",
        data:{
            rawHtml:"<span style="color:red">This should be red.</span>"
        }
    });
</script>

那么上面两种声明的结果是不一样的,依次是:

Using mustaches:<span style="color:red">This should be red.</span>

Using v-html directive:This should be red.

在这里,第二个声明——使用了v-html的那个声明,span的内容会被替换成为作为v-html属性值的rawHtml,并且将绑定在Vue实例中数据对象(即选项对象中的data选项)的rawHtml属性值按HTML解析。

注意:

  1. 不能使用v-html作为来复合局部模板,因为Vue不是基于字符串的模板引擎
    对于用户界面UI,组件更适合作为可重用和可组合的基本单位。
    (也就是说,对于创建这个界面的基本单位的时候,应该使用组件——Vue实例,而不是使用这个原始HTML——v-html指令创建。)
  2. 在你的站点上动态渲染的任意HTML可能会非常的危险,因为它很容易导致XSS攻击,请只对可信内容使用HTML插值,绝不要对用户提供的内容使用插值。

(既然有这么多缺点和局限,为什么要使用v-html呢?等后面来填这个坑吧)

③、#Attribute

第一天其实就学了一个指令——v-bind指令

因为Mustache语法不能作用于HTML attribute上,但我们想要在attribute上面应用Mustache语法的时候,怎么办呢,使用v-bind。

利用v-bind将HTML 元素的属性和特性值绑定,那么HTML的特性值——attribute值,就可以和Vue实例中数据对象的属性绑定起来。

(具体例子第一天就学过了,这里就不啰嗦了)

注意:但v-bind,如果它绑的属性是布尔值,那么:

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

如果isButtondisabled的值是null、undefined、false,disabled attribute甚至不会被包含在渲染出来的<button>元素中。

④、使用JavaScript表达式 

Mustache语法中,我们前面都是放的简单字符串,简单的property键值,

实际上,我们还可以往里面放JavaScript语句,Vue提供了完全的JavaScript表达式支持。

{{ number + 1 }}
{{ ok ? 'YES' : 'NO' }}
{{ message.split('').reverse().join('') }}
<div v-bind:id="'list-'+id"></div>

这些表达式都会在所属的Vue实例的数据作用域下作为JavaScript被解析。

有一个限制,每个绑定都只能包含单个表达式

<!--这是语句,不是表达式-->
{{ var a = 1 }}

<!--流控制也不会生效,请使用三元表达式-->
{{ if(ok){return message} }}

模板表达式都被放在沙盒中,只能访问全局变量的一个白名单,如MathDate,你不应该在模板表达式中试图访问用户定义的全局变量。(待解决的坑)

 2、指令

指令(Directives)是带有v-前缀的特殊attribute。

对于标准的指令,它的值是单个JavaScript表达式(v-for例外):v-if = “seen”。

 当这个JavaScript表达式的值发生改变的时候,指令就会根据这个值的改变,对DOM进行相应的操作。

参数、动态参数、修饰符

①、#参数

 有些指令可能会接收到一个额外的“参数”,这个参数在指令后面用一个冒号表示。

(仔细想一想,从开始到现在接触到的指令里面也就只有v-bind和v-on)

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

②、#动态参数

<!--注意:方括号括起来的JavaScript表达式的写法存在一些约束,后面讨论-->
<a v-bind:[attributeName]="url">...</a>
<a v-on:[eventName]="reverseMessage">...</a>

这样可以将Vue实例上data对象attributeName属性同上面定义的HTML中的“url”相绑定。

或者是使用动态参数为一个动态的事件名绑定处理函数。

对动态参数的约束:

  1. 动态参数的值,是一个字符串;任何非字符串的值都会触发一个警告。
  2. 动态参数的值,在异常的情况在是null,这个null值可以被显性用于移除绑定。

对动态参数表达式的约束:

  1. 语法约束,因为某些字符在HTML attribute名里面是无效的——引号、空格等:
    <!--这会触发一个编译警告-->
    <a v-bind:['foo' + bar]="value">..</a>
  2. 这个参数表达式的名字,要避免使用大写字符,因为浏览器会把attribute的名字强制改为小写。

    <!--
        在DOM中使用模板时,这段代码会被转换为'v-bind:[someattr]'。
        除非在实例中有一个名为someattr的property,否则代码不会工作
    -->
    <a v-bind:[SomeAttr] = "value">...</a>

③、#修饰符

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

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

3、缩写

 v-bind:href=“...” 可以缩写为:href="..."

v-on:click=“...”可以缩写为@click="..."

为什么缩写:一、省去繁琐的v-写法;二,在构建Vue管理所有模板的单页面应用程序(SPA-single page application)时,v-前缀并不重要。

总结:

今天学习的知识点主要是模板语法,包括文本插值、指令、缩写。

其中文本插值:

  1. 我们再一次回顾了Mustache语法,知道了v-once的情景;
  2. 原始HTML,也就是v-html的应用,但是记得两个注意点;
  3. Attribute,也就是v-bind的使用,当bind的属性值是布尔值的时候;
  4. 使用JavaScript表达式,就是在Mustache语法中的双大括号中放入JavaScript表达式的情景;

指令:

  1. 参数,现阶段所知的v-on、v-bind,冒号后面接的参数;
  2. 动态参数,[]里面装的变量代表的参数值;
    1. 对动态参数的限制;
    2. 对动态参数表达式的限制;
  3. 修饰符:

缩写:

  1. v-bind的缩写
  2. v-on的缩写

这一张还涉及了一些其他的需要进一步搞明白的概念的,基本上在文本中都用绿色加粗字体表示出来,具体有:

  1. 渲染(render)函数
  2. JSX语法
  3. XSS攻击
  4. 全局变量的白名单
  5. 单页面应用程序(SPA-single page application)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值