Vue.js开发的4个基本ES2015特性

2023-05-16

ES2015(又名ES6)是当前JavaScript语言的规范。如果您是JavaScript新手或者最近没有更新JavaScript知识,那么在ES2015中有许多新特性可以使开发变得更好、更有趣。

如果您是Vue开发人员,那么您将从学习所有这些新特性中获益。但是作为一种分类的方法,您可以从那些专门应用于Vue的特性开始。

在本文中,我将向您展示您将每天使用Vue的四个ES2015功能。我将提供每个的解释和简要示例。

  • 箭头功能

  • 模板文字

  • 模块

  • 解构和扩展语法

1. 箭头功能

箭头函数是一种声明JavaScript函数的新方法。它们提供了更短的语法,但在其他方面也不同于常规JavaScript函数。

// Regular JavaScript function
function(parameters) {
    statements
}

// Arrow function
(parameters) = >{
    statements
}

无约束力 this

箭头函数的一个重要特性是它们不绑定值this。相反,他们使用this封闭的上下文。

考虑需要回调函数的javascript数组方法。例如,array.filter允许您返回一个新数组,只包括那些与回调定义的筛选器匹配的项。

Vue.js的一个重要特性是,您可以this.vueProperty从Vue配置对象的上下文中轻松访问数据属性,计算属性和方法。

但是,如果使用常规函数进行回调,它将为此绑定自己的值。您不能这样引用Vue对象的属性。在回调函数中,必须在回调函数的范围内手动创建vueProperty。

在下面的示例中,size是一个数据属性。在fitlerBySizecomputed属性中,我们需要声明一个变量,size以便可以在filter回调中使用此值:

new Vue({
    data: {
        size: 'large',
        items: [{
            size: 'small'
        },
        {
            size: 'large'
        }]
    },
    computed: {
        filterBySize() {
            let size = this.size;
            return this.items.filter(function(item) {
                return item.size === size;
                // Note: this.size is undefined
            });
        }
    }
});

箭头函数使用this封闭上下文中的对象。在这种情况下,它来自filterBySize计算属性,它绑定了Vue对象this,这简化了filter回调:

filterBySize() {
    return this.items.filter((item) = >{
        return item.size === this.size;
    });
}

问题

虽然箭头函数可以在许多情况下有效地使用,但这并不意味着我们在开发Vue时应该一直使用它们。实际上,您不应该将箭头函数用作Vue配置对象上的函数属性,因为它们需要从Vue构造函数访问这个上下文。

// Regular function
var regular = new Vue({
    data: {
        val: 'Hello world'
    },
    computed: {
        upperCase() {
            return this.val.toUpperCase();
        }
    }
});

console.log(regular.upperCase); // HELLO WORLD
// Arrow function
var arrow = new Vue({
    data: {
        val: 'Hello world'
    },
    computed: {
        upperCase: () = >{
            return this.val.toUpperCase();
        }
    }
});

console.log(arrow.upperCase);
// Uncaught TypeError: Cannot read property 'toUpperCase' of undefined

单参数和隐式返回

在某些情况下,您可以使箭头函数语法更加简洁。如果您的函数只有一个参数,则可以删除括号()。如果你的函数中只有一个表达式,你甚至可以删除大括号{}!

这是上面的数组过滤器回调,实现了这些简写:

filterBySize() {
    return this.items.filter(item = >item.size === this.size);
}

2.模板文字

模板文本使用反引号(` `)而不是双引号或单引号来定义字符串。

模板文字允许我们在Vue.js中做两个超级有用的东西:

  • 多行字符串(非常适合组件模板)

  • 嵌入式表达式(非常适合计算属性)

多行字符串

在JavaScript代码中编写模板并不理想,但有时我们需要/需要。但是如果模板有很多内容呢?在ES2015之前,我们有两种选择:

首先,把它全部放在一行:

Vue.component({
    template: '<div><h1>{{ title }}</h1><p>{{ message }}</p></div>'
});

当线路变长时,这真的很难读。

第二个选项:让它多行。由于JavaScript字符串是如何解析的,您需要在每一行的末尾断开字符串,然后用+将其重新连接起来。这使得模板更难编辑:

Vue.component({
    template: '<div>' + '<h1>{{ title }}</h1>' + '<p>{{ message }}</p>' + '</div>'
});

模板文字解决了这个问题,因为它们允许多行字符串,而不需要字符串被分割:

Vue.component({
    template: ` < div > <h1 > {
        {
            title
        }
    } < /h1>
              <p>{{ message }}</p > </div>`
});

内嵌表达式

有时我们希望字符串是动态的,即包含一个变量。这在计算属性中非常常见,您可能希望在模板中插入一个字符串,该模板派生自一个反应性Vue.js数据属性。

使用常规字符串,我们必须将字符串拆分,以插入一个变量并将其与+连接起来。同样,这使得字符串难以阅读和编辑:

new Vue({
    data: {
        name: 'George'
    },
    computed: {
        greeting() {
            return 'Hello, ' + this.name + ', how are you?'
        }
    }
});

通过在模板文字中使用占位符${},我们可以插入变量和其他表达式而不破坏字符串:

new Vue({
    data: {
        name: 'George'
    },
    computed: {
        greeting() {
            return`Hello,
            $ {
                this.name
            },
            how are you ? `
        }
    }
});

阅读有关MDN上模板文字的更多信息。

3.模块

如何将JavaScript对象从一个文件加载到另一个文件中?在ES2015之前没有本地方法可以做到这一点。使用JavaScript 模块,我们可以使用导出和导入语法来完成:

file1.js

export
default {
        myVal:
        'Hello'
    }

file2.js

import obj from './file1.js';
console.log(obj.myVal); // Hello

模块有两个主要好处:

  • 我们可以将JavaScript应用程序分成多个文件

  • 我们可以使某些代码跨项目重用

组件模块

模块文件的一个很好的用例是组件。在ES2015之前,我们需要将所有组件定义放在主文件中,包括我们的Vue实例,例如

app.js

Vue.component('component1', {...
});
Vue.component('component2', {...
});
Vue.component('component3', {...
});

new Vue({...
});

如果我们继续这样做,我们的app.js文件将变得非常大和复杂。使用模块,我们可以把我们的组件定义放在单独的文件和实现更好的组织,例如:

component1.js

export default {
        // component definition
    };

我们现在可以导入组件定义对象现在在我们的主文件:

app.js

import component1 from './component1.js';
Vue.component('component1', component1);

...

模块化组件的更好选择是使用单文件组件。这些工具使用JavaScript模块,但也需要像Webpack这样的构建工具。

要阅读有关JavaScript模块的更多信息,请从导入功能开始。

4. 析构和扩展语法

对象是Vue.js开发的重要组成部分。通过一些新的语法特性,ES2015使处理对象属性变得更加容易。

解构的任务

解构允许我们解包对象属性并将它们分配给不同的变量。采取以下对象myObj。要将其属性分配给新变量,我们使用.符号:

let myObj = {
    prop1: 'Hello',
    prop2: 'World'
};

const prop1 = myObj.prop1;
const prop2 = myObj.prop2;

使用析构赋值,我们可以做得更简洁:

let myObj = {
    prop1: 'Hello',
    prop2: 'World'
};

const {
    prop1,
    prop2
} = myObj;

console.log(prop1);
// Output: Hello

解构在Vuex操作中很有用。Actions接收一个context对象,该对象包含对象的属性state和commitAPI方法:

actions: {
    increment(context) {
        // context.state
        // context.commit(...)
    }
}

但是,通常情况下,您不需要state动作中的属性,只想使用commitAPI。通过在函数配置文件中使用解构赋值,您可以创建一个commit在主体中使用的参数,从而减少此函数的详细程度:

actions: {
    increment({
        commit
    }) {
        commit(...);
    }
}

传播的语法

扩展语法允许我们将对象扩展到期望多个键/值对的位置。要在2015年之前将信息从一个对象复制到另一个对象,我们必须这样做:

let myObj = {
    prop1: 'Hello',
    prop2: 'World'
};

let newObj = {
    name: 'George',
    prop1: myObj.prop1,
    prop2: myObj.prop2
};

console.log(newObj.prop1); // Hello

使用扩展运算符…,我们可以做得更简洁:

let newObj = {
    name: 'George',
    ...myObj
};

console.log(newObj.prop1); // Hello

再次以Vuex为例,我们通常希望使用Vuex状态属性作为计算属性。在es2015之前,我们必须手动复制每一个。例如:

store.js

new Vuex.Store({
    state: {
        prop1: ...,
        prop2: ...,
        prop3: ...
    }
});

app.js

new Vue({
    computed: {
        prop1() {
            return store.state.prop1;
        },
        prop2() {
            return store.state.prop2;
        }...
    }
});

Vuex提供mapState函数,该函数返回一个对象,该对象具有您通过提供其键指定的所有Vuex状态属性:

import {
    mapState
}
from 'vuex';

var state = mapState(['prop1', 'prop2', 'prop3']);
console.log(state.prop1) // { ... }

使用mapState和spread操作符,我们可以用一种非常简洁的方式将本地计算的属性与Vuex中的属性结合起来:

app.js

import {
    mapState
}
from 'vuex';

new Vue({
    computed: {
        someLocalComputedProp() {...
        },
        ...mapState(['prop1', 'prop2', 'prop3'])
    }
});

以上是您将在Vue项目中直接使用的ES2015功能。当然,还有许多其他ES2015功能在Vue.js编程中很有用。如果您想继续学习,我建议将这两个作为您的下一个主题:

  • 承诺。这些有助于异步编程,可以与异步组件以及Vuex操作一起使用。

  • Object.assign。这不是您经常需要的,但它可以帮助您了解Vue的反应系统是如何工作的。Vue.js 3.x可能会使用新的Proxies功能,所以请检查一下!

英文原文地址:https://vuejsdevelopers.com/2018/01/22/vue-js-javascript-es6/

更多web开发知识,请查阅 HTML中文网 !!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue.js开发的4个基本ES2015特性 的相关文章

  • CSS设置链接的样式

    链接是从一个网页到另一个网页的连接 xff0c CSS可通过不同属性以各种不同方式来设置链接的样式 下面本篇文章就来给大家介绍一下CSS设置链接的样式的方法 xff0c 希望对大家有所帮助 在讨论CSS属性之前 xff0c 先了解链接的状态

随机推荐

  • 任务切换

    任务切换的方法 第一个方法就是借助中断来进行任务切换 xff0c 这是现代抢占式多任务的基础 在实模式下 xff0c 内存最低端1KB是中断向量表 xff0c 保存着256个中断处理过程的段地址和偏移地址 在保护模式下 xff0c 处理器不
  • 操作无法完成,因为该文件已在system中打开

    一 操作无法完成 xff0c 因为该文件已在system中打开 1 同时按下键盘上的Ctrl 43 Shift 43 ESC组合键 xff0c 打开 任务管理器 xff0c 2 切换到 性能 选项卡下 xff0c 并点击 资源管理器 xff
  • Ai智能时代即将到来,替代程序员还是相辅相成,我们拭目以待

    AI是否会替代前端程序员 xff1f 这是一个让很多人感到担忧的问题 随着AI技术的发展 xff0c 越来越多的工作被自动化 前端开发是否也会面临被取代的危机呢 xff1f 前端开发是指使用HTML CSS JavaScript等技术 xf
  • HTML使用onmouseover属性更改背景颜色

    HTML如何使用onmouseover属性更改背景颜色 xff1f 下面本篇文章就来给大家介绍一下在HTML中使用onmouseover属性更改背景颜色的方法 xff0c 希望对大家有所帮助 HTML的onmouseover属性在鼠标指针移
  • 使用CSS更改PNG图像的颜色

    给定一个图像 xff0c 如何使用CSS更改PNG图像的颜色 xff1f 下面本篇文章就来给大家使用CSS更改PNG图像颜色的方法 xff0c 希望对大家有所帮助 在CSS中使用Filter属性 xff0c 利用滤镜功能来更改png图像颜色
  • 使用CSS更改hr标签的厚度

    下面本篇文章就来给大家介绍一下使用CSS更改hr标签的厚度的方法 xff0c 希望对大家有所帮助 HTML lt hr gt 标签在 HTML 页面中创建一条水平线 xff1b 水平分隔线 xff08 horizontal rule xff
  • 使用CSS设置文本或图像的透明度

    如何使用CSS设置文本或图像的透明度 xff1f 下面本篇文章就来给大家介绍一下使用CSS设置文本或图像的透明度的方法 xff0c 希望对大家有所帮助 想要使用CSS设置文本或图像的透明度 xff0c 可以使用opacity属性来设置 op
  • 使用CSS垂直居中文本

    CSS的常见任务是垂直居中文本或图像 xff1b 虽然CSS2不支持垂直对齐 xff0c 但我们可以通过组合一些属性来垂直居中块 下面本篇文章就来给大家介绍一下使用CSS垂直居中文本的方法 xff0c 希望对大家有所帮助 方法一 xff1a
  • CSS删除内联块元素之间空格的方法

    如何删除内联块元素之间的空格 xff1f 下面本篇文章就来给大家介绍一下使用CSS删除内联块元素之间的空格 xff0c 希望对大家有所帮助 要想删除内联块元素之间的空格 xff0c 可以使用margin right属性 xff1b 此属性用
  • 使用CSS在元素后面添加空格

    在CSS中 xff0c 可以使用 after选择器在元素后面添加空格 xff08 34 34 xff09 after选择器用于在其他元素的内容之后多次添加相同的内容 xff1b 它在每个选定元素的内容后面插入一些内容 下面本篇文章就来给大家
  • CSS在页面加载时创建淡入效果

    下面本篇文章就来给大家介绍一下使用CSS在页面加载时创建淡入效果的方法 xff0c 希望对大家有所帮助 想要使用CSS在页面加载上创建淡入效果 xff0c 可以使用css的animation属性或transition属性在页面加载时创建淡入
  • CSS设置文本和边框(图像)阴影

    在CSS中可以使用阴影效果属性在HTML文档中添加文本和边框 xff08 图像 xff09 阴影 下面本篇文章就来给大家介绍一下CSS的阴影效果属性 xff0c CSS添加阴影效果的方法 xff0c 希望对大家有所帮助 1 添加文本阴影 在
  • 使用JavaScript清除div的内容

    JavaScript提供清除div内容的功能 xff0c 想要执行此功能有两种方法 xff1a 一种是使用innerHTML属性 xff0c 另一种是使用firstChild属性和removeChild 方法 下面本篇文章就来给大家介绍一下
  • 大话pixhawk运行Ardu:Copter启动过程

    1 xff1a 了解启动过程有什么帮助 xff1f 2 xff1a 硬件连接 3 xff1a 启动过程 amp 分析 rgbled on I2C bus 2 at 0x55 bus 100 KHz max 100 KHz init look
  • JavaScript将Set(集合)转换为Array数组

    在JavaScript中 xff0c 想要将Set xff08 集合 xff09 转换为Array数组 xff0c 可以通过以下方式实现 方法1 xff1a 使用Array from 方法 Array from 方法从对象或可迭代对象 xf
  • 使用CSS将图像进行模糊处理

    给定一个图像 xff0c 如何使用CSS将图像进行模糊处理 xff0c 转换为模糊图像 xff1f 下面本篇文章就来给大家介绍一下使用CSS模糊处理图像的方法 xff0c 希望对大家有所帮助 在CSS中 xff0c 可以使用filter属性
  • CSS设置占位符文本的对齐方式

    HTML的placeholder属性指定一个简短提示 xff0c 用于描述input字段或文本区域 xff08 textarea xff09 的预期值 xff0c 即占位符文本 短提示在用户输入值之前显示在字段中 在大多数浏览器中 xff0
  • 谈谈HTML的短语标签及其作用

    在HTML中 xff0c 短语标签是专用标签 xff0c 用于指示文本块具有结构意义 xff0c 执行与文本格式标签类似的特定操作 例如 xff0c abbr标签表示该短语包含缩写词 短语标签的一些例子有 xff1a abbr strong
  • 常见的类名id名命名参考规范

    web前端命名规范 下面是常见的命名参考规范 xff1a 主体 头部 xff1a header 内容 xff1a content container 尾部 xff1a footer 导航 xff1a nav 侧栏 xff1a sidebar
  • Vue.js开发的4个基本ES2015特性

    ES2015 又名ES6 是当前JavaScript语言的规范 如果您是JavaScript新手或者最近没有更新JavaScript知识 xff0c 那么在ES2015中有许多新特性可以使开发变得更好 更有趣 如果您是Vue开发人员 xff