升级AngularJS工厂(ES5)以在Angular2(TypeScript)中使用

时间:2016-01-14 15:05:53

标签: javascript angularjs typescript upgrade angular

我正在尝试使用Angular2TypeScript创建一个应用程序,并将SystemJS作为模块加载器。
我已经有一个工作AngularJS 1.X,其中包含相应的框架,用JavaScript(ES5)编写并使用Google Closure的一些基本功能。
现在我想在我的Angular2应用程序中使用该框架的一些功能 我一直在阅读有关Angular2 UpgradeAdapter的一些教程,包括this one,他们说:

  

将现有代码升级到ES2015或TypeScript并没有多大意义   如果我们必须升级到Angular 2,那么仅按组件重写可能更有意义。

对我而言,听起来可以在AngularJS (ES5)中使用Angular2 (TypeScript)组件/服务,反之亦然。
但是,我在尝试升级AngularJS factory以在Angular2 Component中使用时遇到问题。

情况:

我有一个档案webclient.js 它提供了一个名称空间my.webclient(使用goog.provide) 在goog.scope - 函数内部,它定义了一个名为angular.module的{​​{1}} 然后使用my.webclient创建名为factory的{​​{1}} 此getWebclient会返回module.factory,其返回factory 现在,我想在function Promise内使用此factorygetWebclient)。

我的Angular2 Component如下所示:

Angular2

然而,这会产生Component消息

  

没有getWebclient的提供者! (AppComponent - > getWebclient)。

我该如何解决这个问题?

由于

修改

我将import {Component, Inject} from "angular2/core"; import {bootstrap} from "angular2/platform/browser"; import adapter from "./upgrade"; // adapter is a new UpgradeAdapter() adapter.upgradeNg1Provider("getWebclient"); @Component({ selector: "my-app", templateUrl: "path-to-tamplate/app.html" }) export class AppComponent { constructor(@Inject("getWebclient") getWebclient) { getWebclient().then(webclient => { // If the Promise succeed i'll can log the webclients name property. console.log(webclient.name); }) } } bootstrap(AppComponent); 行更改为

DI Exception

现在没有任何错误。但是,现在bootstrap似乎没有使用upgradeAdapter.bootstrap(document.body, ["my.webclient"], {strictDi: true}); 标记加载到DOM中。

1 个答案:

答案 0 :(得分:0)

试试这个链接,有一些有用的细节:https://angular.io/docs/ts/latest/guide/upgrade.html

首先:您不应再使用<my-app/>代码。