【问题标题】:Using external framework with angular2使用带有 angular2 的外部框架
【发布时间】:2017-03-01 20:27:14
【问题描述】:

有点笼统的问题,但它让我很困扰,因为我在 Angular2 中编码时遇到了很多问题。

Angular 2 是一个相对较新的框架。在 angular 2 出现之前,有很多库是以前构建的。我想知道,我只能使用专门为 Angular 2 构建的框架吗?或者像papa parse这样的东西是否可以通过

为我工作
npm install --save

如果不下载、安装并在最后发现错误,我怎么知道哪个框架可以工作?

【问题讨论】:

  • 这个问题太宽泛了。库和框架是苹果和橘子。如果您喜欢图书馆,您应该了解 A2 的工作原理以及哪些图书馆功能可能需要额外注意才能使它们与 A2 一起使用。通常这涉及影响 DOM 的库(jQuery 插件等)。
  • 如果您对特定库感兴趣,Papa Parse,它看起来只是对数据进行操作,我看不出它为什么不适用于开箱即用的 A2,即使它会受益于 A2 适配器以更好地适应工作流程 - 可观察对象、Http 等。

标签: angular


【解决方案1】:

如果您想包含一个全局 js 文件(例如库)并将其封装在您的 angular2 (ng2) 中,您有多种选择:

选项 1:

你可以在这里https://github.com/DefinitelyTyped/DefinitelyTyped找到它的*.d.ts文件,也推荐看这里:https://microsoft.github.io/TypeSearch

如果你找到了它的@type,你应该安装库(例如npm install --save theLib.js)并安装你找到的@type -->一旦安装,你可以通过你的代码导入库(例如import * as theLib from 'theLib';

选项 2:

如果找不到,可以尝试生成d.ts 文件。例如,如果您有自己的库来导出某种类。您可能想使用以下工具生成d.ts 文件:https://github.com/Microsoft/dts-gen

一旦生成了d.ts,您应该将它包含在您的tsconfig.json 文件中(在“files”键下)

选项 3:

如果 3rd 方库假设作为全局变量包含在您的应用程序中(如 jquery),但在任何地方都没有 @type,您可以按如下方式包含它:

  1. 下载库(任何您认为合适的方式)
  2. 在 index.html 中包含一个脚本标签以加载库

  1. tsconfig.json 旁边添加global.d.ts 并向其中添加对象声明。例如,如果 myExtLib.js 创建一个全局变量 myExtObj:

声明 const myExtObj:any;

  1. 如果不存在,请将以下内容添加到 tsconfig.json

“文件”:[ “全球.d.t​​s”]

现在您可以访问myExtObj globaly。

我个人不喜欢这样的全局变量,所以我创建了一个引用它的服务,然后将其从全局命名空间中删除,如下所示:

服务

import { Injectable } from '@angular/core';

function getWindow():any {
  return window;
}

@Injectable()
export class MyExtObjRefService {
  private _myExtObj:any;

  constructor() {
    let window = getWindow();
    this._myExtObj = window.myExtObj;
    window._myExtObj = null;
    _myExtObj = null;
  }

  get myExtObj() {
    return this._myExtObj;
  }
}

别忘了在模块的providers中声明它

现在您可以通过导入服务从任何组件访问myExtObj 并调用myExtObjRefService.myExtObj,而不必担心您的全局命名空间中有垃圾。

【讨论】:

  • 没有d.ts文件可以使用库吗?
  • 虽然最初的问题确实非常广泛,但在寻找如何让 PapaParse 在我的 Angular (v4) 应用程序中工作时,这个答案确实帮助了我。谢谢!如果这对其他人有用,那么让我的组件工作的是: * npm i papaparse --save * npm i @types/papaparse --save-dev * (in component) import * as Papa from 'papaparse' * (in组件文件更改事件)Papa.parse(file, config) 根据 PP 文档(配置被定义为调用两个组件的函数,例如 this.parseComplete )HTH
  • @user172902 - 没有 d.ts 我的 IDE(Visual Studio 代码)抱怨它无法识别这些类型
  • 感谢您的出色解决方案。我在想可能有一种方法可以在没有 d.ts 文件的情况下做到这一点。我见过诸如将导入声明为任何类型的技巧?但不确定确切的过程。
  • @user172902 如果你发现了什么,请告诉我,那太棒了
猜你喜欢
  • 2015-04-27
  • 2014-10-30
  • 1970-01-01
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多