Angular 如何使用第三方库的方法

 更新时间:2018年04月18日 10:39:37   作者:cipchk  
本篇文章主要介绍了Angular 如何使用第三方库的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Angular 的组件与模块看似好像与现有各种第三方类库(例如:lodash、moment 等)使用上有点格格不入,这很大的原因是 TypeScript 造成的假象。三足鼎立的前端其实都是雷同的,不管是哪种前端框架都可以使用到这些第三方类库。

以下我将从另一个视角解释 Angular 如何使用第三方类库的一种经验做法。

一、写在前面

在开始之前,需要先了解一下 TypeScript 模块系统 ——模块是指在其自身作用域里执行,而不是在全局作用域里;模块间是依靠 export 和 import 建立关系。编译器在编译过程中,也是依赖这种关系来定位需要编译的文件。

TypeScript 依然还是以 JavaScript 文件的形式发布类库,这会导致类型无法表述,需要配合声明文件对其进行类型描述;因此声明文件成了类库一个必不可少的组成部分。

二、分类

Angular 使用 TypeScript 语言开发,诚如上一小节讲来说,要想让一个类库被运用,要件是有没有声明文件。

有声明文件

要分清类库是否有声明文件 *.d.ts,可以从两个方面来确认这件事:

1、类库自带

从 Npm 安装一个依赖包后,可以直接检查其库的 package.json 是否包含 typings 节点,例如 moment:

"typings": "./moment.d.ts"

2、TypeSearch检索

TypeScript 提供了一个叫 TypeSearch 网站,可以直接输入关键词检查是否包含该类库的声明文件。

例如 lodash 可以在列表中点击会跳转至 npm 网站,并且会看到这样的一个命令:

npm install --save @types/lodash

无声明文件

这类情况还蛮常见,例如早一点时间 G2 就没有声明文件,这种情况下只能自行编写声明文件。

Angular Cli 创建的项目会包含一个 src/typings.d.ts 声明文件,它会自动包含在全局声明定义中,而把这些类库的声明信息写在这里面再好不过。

一般而言自己很难对一个类库写一个完整的声明文件,这对于成本来说太不合算,因此往往都是只对部分全局对象做一个 any (表示忽略该静态类型检查)亦可,例如:

// src/typings.d.ts
declare var G2: any;

三、如何使用?

声明文件是纽带,依然以这种方式来划分如何使用。

对于有声明文件,无需额外做什么,只需在需要模块的地方使用 import 来导入即可,例如:

import * as moment from 'moment';

moment(); // 当前时间

无声明文件

重要来看无声明文件时怎么做,前面说到使用 any 来表示忽略静态类型检查,意味者无法享受声明文件带来的智能提示快感。

像 G2 ,我们可以在项目的任意位置直接使用它,但也仅仅只能识别 G2 变量,而实例的方法或属性是不可知的。

// app.component.ts

const g2 = new G2();
g2. // 输入 `.` 后是不会有任何方法或属性

除此之外 TypeScript 编译过程中也不会对 G2 做任何类型检查,G2 是否真的存在只能由自己把握。对于 Angular 而言,是需要额外在 .angular-cli.json 的 scripts 节点上明确加载这些模块。

// .angular-cli.json
"scripts": [
  "../node_modules/@antv/g2/dist/g2.min.js"
]

TypeScript 编译后依然还是 JavaScript 代码,假如不手动加载 G2 相关 JavaScript 文件,自然在运行过程中会提供未找到 G2 的错误。

总结

从 TypeScript 的视角来看如何使用第三方类库,会有不同的感觉,只是一个简单的非靠谱但有效的描述。希望懂得多的人手下留情。

这里无意黑 G2 的意思,现 G2 已经提供了声明文件了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • AngularJS 单元测试(一)详解

    AngularJS 单元测试(一)详解

    这篇文章主要介绍了AngularJS 单元测试(一)详解的相关资料,需要的朋友可以参考下
    2016-09-09
  • Angularjs 实现一个幻灯片示例代码

    Angularjs 实现一个幻灯片示例代码

    本文主要介绍Angularjs 写一个幻灯片的知识,这里整理了详细的资料,及实现代码和实现效果图有需要的小伙伴可以参考下
    2016-09-09
  • 详解Angular组件之生命周期(二)

    详解Angular组件之生命周期(二)

    Angular本身监督所有Angular组件和指令的生命周期 。为了在开发应用程序时顺利进行,您必须了解结果的生命周期。组件是任何Angular应用程序的主要构建块。因此,必须了解它们才能理解组件生命周期的处理步骤。只有这样才能在应用程序的开发中实现。
    2021-05-05
  • Angular ng-animate和ng-cookies用法详解

    Angular ng-animate和ng-cookies用法详解

    本文讲一下Angular中动画应用的部分。这篇文章主要介绍了Angular ng-animate和ng-cookies用法详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Angularjs注入拦截器实现Loading效果

    Angularjs注入拦截器实现Loading效果

    angularjs作为一个全ajax的框架,对于请求,如果页面上不做任何操作的话,在结果反回来之前,页面是没有任何响应的,不像普通的HTTP请求,会有进度条之类
    2015-12-12
  • Angular.js中$resource高大上的数据交互详解

    Angular.js中$resource高大上的数据交互详解

    这篇文章主要给大家介绍了关于Angular.js中$resource高大上的数据交互的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用angular.js具有一定的参考学习价值,需要的朋友们下面跟着小编来一起看看吧。
    2017-07-07
  • 基于AngularJS实现表单验证功能

    基于AngularJS实现表单验证功能

    这篇文章主要为大家详细介绍了基于AngularJS实现表单验证功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • AngularJS bootstrap启动详解及实例代码

    AngularJS bootstrap启动详解及实例代码

    这篇文章主要介绍了AngularJS bootstrap启动的知识,这里整理了相关资料及简单实例代码,,需要的朋友可以参考下
    2016-09-09
  • Angular2学习教程之组件中的DOM操作详解

    Angular2学习教程之组件中的DOM操作详解

    这篇文章主要给大家介绍了Angular2学习教程之组件中DOM操作的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来看看吧。
    2017-05-05
  • 详解利用Angular实现多团队模块化SPA开发框架

    详解利用Angular实现多团队模块化SPA开发框架

    本篇文章主要介绍了详解利用Angular实现多团队模块化SPA开发框架,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11

最新评论