2016-08-26 7 views
1

私は既存のhybrid Angular 1+2 applicationを持っており、Angular 2 RC5 guidance in relation to the new NgModulesの後に問題があります。これは、ハイブリッドアプリケーションではなく、Angular 2 RC4アプリケーションでの使用を意図しているかのように見えます。ハイブリッドアプリケーションでモジュールをAngular 2 RC5 NgModuleにアップグレードするにはどうすればよいですか?

純粋なRC4のシナリオとは対照的に - RC5でしか導入されていないモジュール - 私は対処する必要がある既存のAngular 1.5モジュールを持っています。私は次のオプションがあると推測しています - 他のオプションはありますか?

  1. Upgrade Adapterを使用して既存のモジュールをアップグレードします。そこにモジュールをアップグレードすることについての言及はありませんが、遅れて追加されたので、ドキュメントはまだ更新されるでしょうか?あるいは、これがすぐに追加されることを期待できますか?
  2. 既存のモジュールをRC5 NgModuleとして書き換えます。これを行う方法に関するガイダンスはありますか?

次に、ブートストラップの問題があります。ハイブリッドアプリケーションをupgrade_adapterでブートストラップする必要があると私は想定しています。私はplatformBrowserDynamic()。bootstrapModule()関数を使用するべきであると指摘したUpdate your bootstrapガイダンスでそれをどうやって調整するのですか?

更新: lekev87がRC5でNgModuleの導入のために(少なくとも部分的に)考慮して更新されているように見える角度のドキュメントに例へのリンクを提供します。

UpgradeAdapterインスタンスが作成されると、NgModuleへの参照が渡されます。ただし、これが何をするかについての説明はありません。

var adapter = new UpgradeAdapter(forwardRef(() => MyNg2Module)); 

私の推測では、渡されたNgModuleはなくimplicitly created oneを使用することです。

- We create an implicit NgModule for you as part of the bootstrap() 
- command We automatically hoist your components, pipes, and directives 

そして、それは上記のリストの2番目のポイントの世話のために私が責任を作るだろうと - すべてのコンポーネントを宣言するなど

私はここで正しい軌道に乗っているだろうか?

これは、アプリケーションがハイブリッドである間に、角型モジュールと角型モジュールの両方ですべてを宣言する必要があることを意味しますか?

暗黙的に作成されたモジュールにアクセスできる方法はありますか?私は、これが私が必要とするもののほとんどを持っている基盤から始めることができると思っています。

答えて

1

こんにちは、ここであなたはあなたがこの例を持ってUpgradeAdapter class のためのマニュアルを確認することができます

var adapter = new UpgradeAdapter(forwardRef(() => MyNg2Module)); 
var module = angular.module('myExample', []); 
module.directive('ng2Comp', adapter.downgradeNg2Component(Ng2)); 
module.directive('ng1Hello', function() { 
    return { 
    scope: { title: '=' }, 
    template: 'ng1[Hello {{title}}!](<span ng-transclude></span>)' 
    }; 
}); 
@Component({ 
    selector: 'ng2-comp', 
    inputs: ['name'], 
    template: 'ng2[<ng1-hello [title]="name">transclude</ng1-hello>](<ng-content></ng-content>)', 
    directives: 
}) 
class Ng2Component { 
} 
@NgModule({ 
    declarations: [Ng2Component, adapter.upgradeNg1Component('ng1Hello')], 
    imports: [BrowserModule] 
}) 
class MyNg2Module {} 
document.body.innerHTML = '<ng2-comp name="World">project</ng2-comp>'; 
adapter.bootstrap(document.body, ['myExample']).ready(function() { 
    expect(document.body.textContent).toEqual(
     "ng2[ng1[Hello World!](transclude)](project)"); 
}); 
+0

OK。ドキュメントは少なくとも部分的にRC5をカバーするように更新されているようです。含まれているドキュメントへのリンクには、UpgradeAdapterコンストラクタ呼び出しのMyNg2Moduleへの参照が含まれていないため、少しスローされました。そのページの他の例がありましたので、その例ではエラーです。 これには何が起こっているのかについての説明はありません。これはRC5が自動的に作成するデフォルトのNgModuleのオーバーライドを提供する方法ですか? –

0

私が更新docsを使用してNgModuleを導入することができました。私は、新しいNgModuleに次のテンプレートを使用しました。

import { NgModule } from '@angular/core'; 
import { BrowserModule } from '@angular/platform-browser'; 

@NgModule({ 
    imports: [ BrowserModule ] 
}) 
export class AppModule {} 

私は、UpgradeAdapterのコンストラクタのパラメータとして、その参照を渡しました。

import { UpgradeAdapter } from '@angular/upgrade'; 

/* . . . */ 

const upgradeAdapter = new UpgradeAdapter(AppModule); 

upgradeAdapter.bootstrap(document.body, ['heroApp'], {strictDi: true}); 
関連する問題