【问题标题】:Integrating Angular 2.0 inside Angular 1.x - upgrade module在 Angular 1.x 中集成 Angular 2.0 - 升级模块
【发布时间】:2015-10-14 12:15:51
【问题描述】:

我正在尝试将 Angular 2.0 组件集成到 Angular 1.x 应用程序中(用于玩/学习建议...)

现在,我看到可以通过查看 Angular2 upgrade module 来完成:

    import {Component, View, Inject, EventEmitter} from 'angular2/angular2';
    import {createUpgradeModule, UpgradeModule} from 'upgrade/upgrade';

    export function main() {
      describe('upgrade: ng1 to ng2', () => {
        it('should have angular 1 loaded', () => expect(angular.version.major).toBe(1));

        it('should instantiate ng2 in ng1 template and project content',
           inject([AsyncTestCompleter], (async) => {
             var Ng2 = Component({selector: 'ng2'})
                           .View({template: `{{ 'NG2' }}(<ng-content></ng-content>)`})
                           .Class({constructor: function() {}});

             var element = html("<div>{{ 'ng1[' }}<ng2>~{{ 'ng-content' }}~</ng2>{{ ']' }}</div>");

             var upgradeModule: UpgradeModule = createUpgradeModule();
             upgradeModule.importNg2Component(Ng2);
             upgradeModule.bootstrap(element).ready(() => {
               expect(document.body.textContent).toEqual("ng1[NG2(~ng-content~)]");
               async.done();
             });
           }));
... continue tests here  ...

我使用 Typescript + SystemJS + JSPM 创建了一个 Angular 1.x 应用程序,并使用 jspm install angular2 安装了 Angular 2.0

现在,我可以使用import {Component} from 'angular2/angular2'(例如)导入 Angular2,但我在 Angular2 的代码中的任何地方都找不到升级模块(我想做import {createUpgradeModule, UpgradeModule} from 'upgrade/upgrade',类似于我在测试中发现的)。

它是在单独的包装中吗?我应该手动安装吗?

编辑

解决方案(目前)应该是:

  1. 使用自定义构建,请参阅here

  2. 将实际模块带到您的项目中并导入它(这是我的首选解决方案)

    编辑 22.11.15:

从 alpha 46 开始,升级模块是公开的。使用它不需要更多的黑客攻击!

【问题讨论】:

  • 我想你可能正在寻找this line。我在我的项目中找不到那条路径,所以也许它没有被分发。但是您可以做的是 fork angular repo,构建它,然后您会找到该目录,以便您可以将其复制并粘贴到您的项目中。

标签: javascript angularjs angular


【解决方案1】:

我已经为此做了一些 POC 工作,这是一种可行的方法:

关键是升级适配器

import {bootstrap,UpgradeAdapter} from 'angular2/angular2';
import {SomeA2Component} from './some/path';

declare var angular:any;

var adapter: UpgradeAdapter = new UpgradeAdapter();
angular.module('app').directive('SomeA2Component', adapter.downgradeNg2Component(MyA2Component));
adapter.bootstrap(document.body, ['app']);

我这里还有一个工作示例:http://www.syntaxsuccess.com/viewarticle/upgrading-angular-1.x-to-2.0

【讨论】:

  • 谢谢。从 alpha 46 开始,升级模块是公开的,不需要变通方法。不错的博文!
猜你喜欢
  • 2016-03-29
  • 1970-01-01
  • 2015-02-11
  • 2017-04-01
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
  • 2017-03-29
  • 2020-06-23
相关资源
最近更新 更多