2016-10-07 3 views
4

Я почти уверен, что у меня нет чего-то фундаментального.Как использовать угловое обновление 2Adapter.upgradeNg1Component?

Я начал использовать адаптер обновления ng2 до RC5, чтобы начать портирование приложения ng1 в ng2. И прежде, когда вы объявили директивы, которые компонент использовал непосредственно на компоненте, все правильно подключено и имеет смысл.

Но теперь я пытаюсь перенести свое гибридное приложение в Angular 2 Final, и вся работа NgModule запутывает гибридное приложение, когда дело доходит до зависимостей.

Чтобы создать адаптер обновления, мне нужно передать ему модуль Ng2, который я хочу использовать в гибридном приложении. Хорошо. Но это означает, что модуль Ng2 должен быть полностью определен ПЕРЕД тем, как я создаю адаптер обновления, правильно? Если это так, то как использовать еще не созданный адаптер обновления для обновления компонентов ng1 для использования в модуле ng2 (который необходимо создать до создания адаптера) ???

FYI, в противном случае - у меня есть машинописный модуль, который понижает все компоненты ng2 верхнего уровня, которые мне нужно использовать в ng1 (в конфигурации ui-router), и этот загрузочный модуль загружается после обновления адаптера обновления и модуля Ng2, содержащего мои компоненты для понижения.

Итак, что мне не хватает? Как я могу использовать функциональность upgradeNg1Component адаптера обновления?

Без этой функции это заставляет меня начинать с самых внешних компонентов и работать вовнутрь. И это работает отлично, за исключением того, что есть некоторые общие компоненты, которые используются повсюду, и я предпочел бы не конвертировать их в ng2 в первую очередь.

+0

Можете ли вы объяснить в деталях, какие проблемы вы имеете с этим «ДО» вещи? Пример поможет. [Руководство] (https://angular.io/docs/js/latest/api/upgrade/index/UpgradeAdapter-class.html) совершенно ясно из предложенного использования, и, очевидно, нет временных парадоксов. – estus

+0

Я пытаюсь обернуть голову вокруг ментального модуля. Вам нужно предоставить адаптеру обновления модуль ng2 в его конструкторе. Но для использования обновленных компонентов ng1 они должны быть объявлены в том же модуле ng2, который должен быть определен перед адаптером. В моем конкретном примере мой адаптер, который находится в отдельном модуле es2015, не создается из-за этой циклической зависимости. (Когда я пытаюсь импортировать адаптер в модуль es2015, который содержит логику обновления компонента ng1, я вместо этого получаю «undefined») – snorkpete

+0

У меня такая же споткновения, и это действительно странно. –

ответ

2

Я наткнулся на эту же проблему и нашел решение, посмотрев на Angular's source code. Хитрость заключается в том, чтобы использовать forwardRef() при создании UpgradeAdapter:

import {NgModule, forwardRef} from '@angular/core'; 
import {UpgradeAdapter} from '@angular/upgrade'; 

const adapter = new UpgradeAdapter(forwardRef(() => AppModule)); 

@NgModule({ 
    declarations: [ 
     adapter.upgradeNg1Component('my-component'); 
    ] 
}) 
class AppModule { 
} 

// now call adapter.bootstrap() 
+1

Да, это работает, но вы должны экспортировать адаптер, чтобы иметь возможность обновления/понижения рейтинга во внешних компонентах. –

Смежные вопросы