我正在尝试使用Angular2
和TypeScript
创建一个应用程序,并将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
内使用此factory
(getWebclient
)。
我的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中。
答案 0 :(得分:0)
试试这个链接,有一些有用的细节:https://angular.io/docs/ts/latest/guide/upgrade.html
首先:您不应再使用<my-app/>
代码。