码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2021-03-31 12:09:17      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:工具   需要   val   ima   访问   htm   浏览器   效率   lis   

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

一、插值

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

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

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

v-html:输出真正的 HTML

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

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

{{ number + 1 }}

{{ ok ? YES : NO }}

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

<div v-bind:id="‘list-‘ + id"></div>

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

二、指令

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

<p v-if="seen">现在你看到我了</p>

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

一些指令能够接收一个“参数”,在指令名称之后以冒号表示。例如,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

事件绑定中还可以使用修饰符,比如:<form v-on:submit.prevent="onSubmit">...</form>。.prevent 修饰符告诉 v-on 指令对于触发的事件调用 event.preventDefault()

三、缩写

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

 1 <!-- 完整语法 -->
 2 <a v-bind:href="url"> ... </a>
 3 
 4 <!-- 缩写 -->
 5 <a :href="url"> ... </a>
 6 
 7 <!-- 动态参数的缩写 -->
 8 <a :[key]="url"> ... </a>
 9 
10 <a v-on:click="doSomething"> ... </a>
11 
12 <!-- 缩写 -->
13 <a @click="doSomething"> ... </a>
14 
15 <!-- 动态参数的缩写 (2.6.0+) -->
16 <a @[event]="doSomething"> ... </a>

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

需要注意的是:

  1. 动态参数预期会求出一个字符串,异常情况下值为 null。这个特殊的 null 值可以被显性地用于移除绑定。任何其它非字符串类型的值都将会触发一个警告。
  2. 动态参数表达式有一些语法约束,因为某些字符,如空格和引号,放在 HTML attribute 名里是无效的。
  3. 在 DOM 中使用模板时 (直接在一个 HTML 文件里撰写模板),还需要避免使用大写字符来命名键名,因为浏览器会把 attribute 名全部强制转为小写。
  4. 模板表达式都被放在沙盒中,只能访问全局变量的一个白名单,如 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 使用 nullundefined 或其他占位的值。

五、方法

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

 1 <button @click="increment">Up vote</button> 

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

Lodash是什么?

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

  • 遍历 array、object 和 string
  • 对值进行操作和检测
  • 创建符合功能的函数

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

 1 <script>
 2   Vue.createApp({
 3     methods: {
 4       // 用 Lodash 的防抖函数
 5       click: _.debounce(function() {
 6         // ... 响应点击 ...
 7       }, 500)
 8     }
 9   }).mount(‘#app‘)
10 </script>

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

 1 <template>
 2   <div>
 3     <button @click="debouncedClick">Save</button>
 4   </div>
 5 </template>
 6 <script>
 7 export default {
 8   created() {
 9     // 用 Lodash 的防抖函数
10     this.debouncedClick = _.debounce(this.click, 500);
11   },
12   unmounted() {
13     // 移除组件时,取消定时器
14     this.debouncedClick.cancel();
15   },
16   methods: {
17     click() {
18       // ... 响应点击 ...
19     },
20   }
21 };
22 </script>

 

 

 

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

标签:工具   需要   val   ima   访问   htm   浏览器   效率   lis   

原文地址:https://www.cnblogs.com/EastWind/p/14596605.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!