Миграция AngularJS на Angular — как перенести внутренние состояния

#angularjs #angular-ui-router #angular-router

#angularjs #angular-ui-router #angular-маршрутизатор

Вопрос:

У меня есть компонент входа в AngularJS, который мне нужно перенести. Я должен использовать маршрутизатор AngularJS, так как не все приложения были перенесены.

Компонент входа в систему содержит директиву пользовательского интерфейса в шаблоне. например:

 <div>
...
</div>
<div>
..
    <div ui-view></div>    
..
</div>
....
  

Состояния похожи на приведенные ниже (есть еще несколько):

   .state('loginroot', {
      abstract: true,
      url: "",
      template: '<login-root></login-root>',
      data: {
          allRole: true
     }
 })

  .state('loginroot.forgot', {
      url: "/forgot",
      template: `<forgot-password></forgot-password>`,

      data: {
          pageTitle: 'Forgot my password',

      }
  })
  

Как я могу преобразовать этот компонент без необходимости завершения всей миграции?

Ответ №1:

Нашел решение сам. Можно выполнить следующее:

создайте директиву angular js:

 import * as angular from 'angular';

class RouterOutletWrapper {}


let routerOutletWrapper = {
    controller: RouterOutletWrapper,
    template: `<ui-view></ui-view>`
};

angular
.module('app')
.component('routerOutletWrapper', routerOutletWrapper);
  

и соответствующая директива Angular:

 @Directive({
    selector: 'router-outlet-wrapper'
})
export class UpgradedAjsRouterOutletWrapper extends UpgradeComponent {
    constructor(elementRef: ElementRef, injector: Injector) {
        super('routerOutletWrapper', elementRef, injector);
    }
}
  

Затем в html компонента входа в систему напишите:

 ...
<router-outlet-wrapper></router-outlet-wrapper>
...