Как вы можете видеть в этом планке, ниже демонстрируется моя попытка ленивой загрузки маршрута angular2 в гибридном приложении ng1/ng2, где маршрут с отложенной загрузкой имеет обновленную зависимость ng1 (ng2 beta 7, ng1 1.5).
main.ts:
import {Component} from 'angular2/core';
import {App} from './app';
import {adapter} from './adapter';
angular.module('ng1app', [])
.component('testy', {
template: `
<div>{{ctrl.hi}}</div>
`,
controller: function () {
this.hi = 'howdy'
},
controllerAs: 'ctrl',
bindings: {
hi: '='
}
})
.directive('myApp', adapter.downgradeNg2Component(App));
adapter.bootstrap(document.body, ['ng1app']);
app.ts:
import { Component, provide } from 'angular2/core'
import { adapter } from './adapter'
import {
ROUTER_PROVIDERS,
ROUTER_PRIMARY_COMPONENT,
ROUTER_DIRECTIVES,
RouteConfig,
AsyncRoute
} from 'angular2/router'
@Component({
selector: 'my-app',
template: '<router-outlet></router-outlet>',
directives: [ ROUTER_DIRECTIVES ]
})
@RouteConfig([
new AsyncRoute({
path: '/',
loader: () => System.import('./src/Home').then(c => c.Home)
name: 'Home'
})
])
export class App { }
[
ROUTER_PROVIDERS,
provide(ROUTER_PRIMARY_COMPONENT, { useFactory: () => App })
].forEach(provider => adapter.addProvider(provider))
home.ts:
import {Component} from 'angular2/core';
import {adapter} from './adapter';
@Component({
selector: 'home',
template: `
<div>
hi
<testy></testy>
</div>
`,
directives: [adapter.upgradeNg1Component('testy')]
})
export class Home { }
По сути, это гибридное приложение angular1/2, в котором еще до начальной загрузки я определил компонент ng1 в main.ts. Когда AsyncRoute пытается загрузить home.ts, я получаю сообщение "ИСКЛЮЧЕНИЕ: ошибка при создании экземпляра class0!" из UpgradeNg1ComponentAdapter - кажется, он не может найти объект директивы для testy
.
Мне интересно, есть ли способ подключить инжектор (ы), но это предполагает, что эта проблема связана даже с путаницей инжектора, что для меня не является уверенностью, так как я не знаком с внутренностями система впрыска angular2.
Должно ли это быть возможно? Или: «Разве это не должно быть возможно?» ;)
(В идеале я хотел бы лениво загружать компоненты ng1, но в первую очередь нужно заставить их работать, когда они определены заранее...)