zoukankan      html  css  js  c++  java
  • 基础二、模板语法、Data Property 和方法

    在上篇中介绍了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>

     

  • 相关阅读:
    设计模式复习-单例模式
    设计模式复习-组合模式
    设计模式复习-迭代器模式
    设计模式复习-备忘录模式
    PAT 1085 PAT单位排行 (Microsoft_zzt)
    PAT L1-034 点赞
    PAT L1-032 Left-pad
    PAT 甲级 1046 Shortest Distance
    PAT 甲级 1077 Kuchiguse
    PAT 甲级 1027 Colors in Mars
  • 原文地址:https://www.cnblogs.com/EastWind/p/14596605.html
Copyright © 2011-2022 走看看