AngularJS 迁移到 Angular - 如何迁移内部状态
AngularJS migration to Angular - how to migrate internal states
我有一个 AngularJS 登录组件需要迁移。我必须使用 AngularJS 路由器,因为并非所有应用程序都已迁移。
登录组件在模板中包含一个 ui-view 指令。例如:
<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',
}
})
如何在不需要完成整个迁移的情况下转换此组件?
我自己找到了解决方案。可以做到以下几点:
创建一个 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);
}
}
然后在then登录组件html写:
...
<router-outlet-wrapper></router-outlet-wrapper>
...
我有一个 AngularJS 登录组件需要迁移。我必须使用 AngularJS 路由器,因为并非所有应用程序都已迁移。
登录组件在模板中包含一个 ui-view 指令。例如:
<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',
}
})
如何在不需要完成整个迁移的情况下转换此组件?
我自己找到了解决方案。可以做到以下几点:
创建一个 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);
}
}
然后在then登录组件html写:
...
<router-outlet-wrapper></router-outlet-wrapper>
...