我有一个应用程序,我正在逐步移植到angular 4。
现在,我有一些在Angular 4中的组件,其他在AngularJS中。我在从angularjs -> angular4 -> angularjs传递时遇到了一个问题。从JS到4的第一次转换非常完美,但是之后,我只能在主屏幕上使用我的Angular 4组件。URL会改变,但是页面不会重定向到Angular JS组件,我的ng-outlet也不会再刷新。
路由器位于angularJS中。
Angular 4组件使用以下命令降级:
import {
Injectable,
ModuleWithProviders,
NgModule
} from '@angular/core';
import {
APP_MODULE_NAME
} from '../../constants';
declare const angular: angular.IAngularStatic;
import {
downgradeInjectable,
downgradeComponent
} from '@angular/upgrade/static';
// Singleton Module
@NgModule()
@Injectable()
export class ComponentHelper {
constructor() {}
static forRoot(): ModuleWithProviders {
return {
ngModule: ComponentHelper
}
}
public static DowngradeFactory(componentName: string, className: any): void {
angular.module(APP_MODULE_NAME).factory(componentName, downgradeInjectable(className));
}
public static DowngradeDirective(componentName: string, className: any): void {
angular.module(APP_MODULE_NAME).directive(componentName, downgradeComponent({
component: className
}))
}
}我在路由器中执行此操作
{
path: '/pj/:project_id/ds/:datastore_id/list/ng4/all',
component: 'downgradeNG4',
name: 'DowngradeNG4'
}, {
path: '/pj/:project_id/ds/:datastore_id/search/:search_id/list/all',
name: 'NormalJS',
component: 'normalJS'
},在AngularJS中的某些时候,我这样做是为了重定向到NG4组件。
const path = `pj/${self.projectID}/ds/${self.currentDatastoreID}/list/ng4/all`;
$location.path(path);现在,在angular 4组件中,如果我单击angular JS中的UI菜单,如果浏览器中的路径更改,它不会重定向事件。
并非所有组件/模块都被降级,我应该降级每个服务和子组件吗?或者只是(像现在这样)直接从AngularJS路由器调用的组件?
我应该把它们都降级吗?
发布于 2018-11-23 18:52:16
我以前也参与过这个过程(从angluarjs迁移到angular )。我强烈建议你在angular 6中重写所有的组件(从angular 4到6也有一些基本的改变),它会比这个方法更少的时间。你可以保留你的html和css,只需要最小的改动。
无论如何,如果你仍然坚持你的方式。只需将其划分为单独的部分,这些部分可以独立工作。*您可以在一个页面中同时运行angularjs和angular
如果您需要将数据从angularjs传递到angular,我会使用另一种方法,比如使用localstorage。
无论如何,你的解释真的很难理解问题在哪里,即使是控制台中的错误,角度调试也需要时间。
https://stackoverflow.com/questions/53334011
复制相似问题