HOME> 国足世界杯夺冠> 基础二、模板语法、Data Property 和方法

基础二、模板语法、Data Property 和方法

在上篇中介绍了Vue的相关定义和简单语法,本节继续来看Vue的模板语法、Data Property 和方法。

一、插值

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

Message: {{ msg }}

v-once:执行一次性地插值,当数据改变时,插值处的内容不会更新。

v-html:输出真正的 HTML

v-bind:id:绑定attribute,如果绑定的值是 null 或 undefined,那么该 attribute 将不会被包含在渲染的元素上。

除此之外还可以使用 JavaScript 表达式来绑定相关内容:

{{ number + 1 }}

{{ ok ? 'YES' : 'NO' }}

{{ message.split('').reverse().join('') }}

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

二、指令

指令 (Directives) 是带有 v- 前缀的特殊 attribute。指令 attribute 的值预期是单个 JavaScript 表达式。指令的职责是,当表达式的值改变时,将其产生的连带影响,响应式地作用于 DOM。比如:

现在你看到我了

这里,v-if 指令将根据表达式 seen 的值的真假来插入或者移除

元素。

一些指令能够接收一个“参数”,在指令名称之后以冒号表示。例如,v-bind:href 指令可以用于响应式地更新 HTML href attribute 。在这里 href 是参数,告知 v-bind 指令将该元素的 href attribute 与表达式 url 的值绑定。

另一个例子是 v-on:click指令,它用于监听 DOM 事件,在这里参数是监听的事件名 click事件。

也可以在指令参数中使用 JavaScript 表达式,方法是用方括号括起来。比如:v-bind:[attributeName]这里的 attributeName 会被作为一个 JavaScript 表达式进行动态求值,求得的值将会作为最终的参数来使用。例如,如果你的组件实例有一个 data property attributeName,其值为 "href",那么这个绑定将等价于 v-bind:href。同样的也可以传入事件名称,比如:v-on:[eventName]

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

事件绑定中还可以使用修饰符,比如:

...
。.prevent 修饰符告诉 v-on 指令对于触发的事件调用 event.preventDefault()

三、缩写

v- 前缀作为一种视觉提示,用来识别模板中 Vue 特定的 attribute。当你在使用 Vue.js 为现有标签添加动态行为 (dynamic behavior) 时,v- 前缀很有帮助。

1

2 ...

3

4

5 ...

6

7

8 ...

9

10 ...

11

12

13 ...

14

15

16 ...

它们看起来可能与普通的 HTML 略有不同,但 : 与 @ 对于 attribute 名来说都是合法字符,在所有支持 Vue 的浏览器都能被正确地解析。而且,它们不会出现在最终渲染的标记中。

需要注意的是:

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

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

在 DOM 中使用模板时 (直接在一个 HTML 文件里撰写模板),还需要避免使用大写字符来命名键名,因为浏览器会把 attribute 名全部强制转为小写。

模板表达式都被放在沙盒中,只能访问全局变量的一个白名单,如 Math 和 Date。你不应该在模板表达式中试图访问用户定义的全局变量。

四、Data Property

组件的 data 选项是一个函数。Vue 在创建新组件实例的过程中调用此函数。它返回一个对象,然后 Vue 会通过响应性系统将其包裹起来,并以 this 的形式存储在组件实例中。该对象的任何顶级 property 也直接通过组件实例暴露出来。

1 export default {

2 name: "Test",

3 components: {

4 TodoItem,

5 },

6 data() {

7 return {

8 message: "safsadf",

9 list: [

10 { id: 0, text: "Vegetables" },

11 { id: 1, text: "Cheese" },

12 { id: 2, text: "Whatever else humans are supposed to eat" },

13 ],

14 };

15 },

16 methods: {

17 reverseMessage() {

18 this.message = this.message.split("").reverse().join("");

19 },

20 },

21 };

这些实例 property 仅在实例首次创建时被添加,所以你需要确保它们都在 data 函数中。必要时,要对尚未提供所需值的 property 使用 null、undefined 或其他占位的值。

五、方法

用 methods 选项向组件实例添加方法。Vue 自动为 methods 绑定 this,以便于它始终指向组件实例。这将确保方法在用作事件监听或回调时保持正确的 this 指向。在定义 methods 时应避免使用箭头函数,因为这会阻止 Vue 绑定恰当的 this 指向。这些 methods 和组件实例的其它所有 property 一样可以在组件的模板中被访问。在模板中,它们通常被当做事件监听使用:

1

Vue 没有内置支持防抖和节流,但可以使用 Lodash 等库来实现。

Lodash是什么?

Lodash 是一个一致性、模块化、高性能的 JavaScript 实用工具库。lodash 通过降低 array、number、objects、string 等等的使用难度从而让 JavaScript 变得更简单。 Lodash 的模块化方法 非常适用于

遍历 array、object 和 string

对值进行操作和检测

创建符合功能的函数

Lodash不需要引入其他第三方依赖。意在提高开发者效率,提高JS原生方法性能的JS库。很多方法lodash已经帮你写好了,直接调用就行,不用自己费尽心思去写了,而且可以统一方法的一致性。Lodash使用了一个简单的 _ 符号,就像Jquery的 $ 一样,十分简洁。

1

但是,这种方法对于可复用组件有潜在的问题,因为它们都共享相同的防抖函数。为了使组件实例彼此独立,可以在生命周期钩子的 created 里添加该防抖函数:

1

6