升级的角度服务无法使用角度组件:无法获取未定义的错误

问题描述:

我正在将AngularJS应用升级为角度。 但我现在已经陷入困境。 我正在尝试获取角度来处理主线路,并不起作用。该错误似乎来自升级的服务。升级的角度服务无法使用角度组件:无法获取未定义的错误

当我让angularJS处理路线,它使用相同的组件工作正常。

的App-routing.module

class HybridUrlHandlingStrategy implements UrlHandlingStrategy { 
    // use only process the `home` url 
    shouldProcessUrl(url:UrlTree) { 
    console.log(url.toString()); 
    return url.toString() === '/' || url.toString() ==='/home' ; 
    } 
    extract(url: UrlTree) { return url; } 
    merge(url: UrlTree, whole: UrlTree) { return url; } 
} 

const appRoutes: Routes = [ 
    { path: '', redirectTo: 'home', pathMatch: 'full' }, 
    { path: 'home', component: HomeComponentNg2 } 
]; 

@NgModule({ 
    imports:[ 
     RouterModule.forRoot(appRoutes) 
    ], 
    exports: [RouterModule ], 
    providers:[ 
    { provide: UrlHandlingStrategy, useClass: HybridUrlHandlingStrategy } 
    ] 
}) 

export class AppRoutingModule { } 

AJS升级-providers.ts

export function statsServiceFactory(i: any) { 
    return i.get('StatsService'); 
} 
export const StatsServiceProvider = { 
    provide: StatsService, 
    useFactory: statsServiceFactory, 
    deps: ['$injector'] 
}; 

export function authServiceFactory(i:any){ 
    return i.get('AuthService'); 
} 

export const AuthServiceProvider = { 
    provide: AuthService, 
    useFactory: authServiceFactory, 
    deps: ['$injector'] 

stats.service

export class StatsService { 
    static $inject = ['$http']; 
    constructor(private $http) { 
     this.$http = $http; 
    }; 

    getEmplStats() { 
     console.log('getEmplstats'); 
     return this.$http.get('./src/app/JSON/employeeStats.json') 
      .then(res => { 
      console.log(res); 
      return res 
     }).catch(error => { 
      console.log(error); 
     }) 
    }; 

    getCustStats() { 
     console.log('getCustStats'); 
     return this.$http.get('./src/app/JSON/customerStats.json') 
      .then(res => { 
      console.log(" getCustStats "+res); 
      return res 
     }).catch(error => { 
      console.log(error); 
     }) 
    } 
} 
export default StatsService; 

误差

core.es5.js?0445:1084 ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'get' of undefined 
TypeError: Cannot read property 'get' of undefined 
    at statsServiceFactory (eval at 327 (http://localhost:8080/app.js:653:1), <anonymous>:6:13) 
    at Ng2AppModuleInjector.get (ng:///Ng2AppModule/module.ngfactory.js:161:69) 
    at Ng2AppModuleInjector.getInternal (ng:///Ng2AppModule/module.ngfactory.js:271:52) 
    at Ng2AppModuleInjector.NgModuleInjector.get (eval at <anonymous> (http://localhost:8080/vendor.js:84:1), <anonymous>:3783:44) 
    at resolveDep (eval at <anonymous> (http://localhost:8080/vendor.js:84:1), <anonymous>:11245:45) 

我只是不明白为什么让AngularJS处理路线似乎很好,但如果我让Angular处理它,它就会崩溃。 任何帮助将apreciated

编辑:增加了客户stats.ng2.component

@Component({ 
    selector: 'customer-stats2', 
    templateUrl: './customer-stats.ng2.component.html' 
}) 

export class CustomerStatsComponentNg2 implements OnInit{ 
    customerStats:any; 

    constructor(private ss:StatsService){ 
    } 

    ngOnInit() 
    { 
     console.log('ngoninit cust stats ') 
     this.ss.getCustStats(). 
      then(custStats => this.customerStats = custStats.data) 
      .then(error => console.log(error)) 
    } 
} 
+0

'从'@ angular/http''导入{Http}' – anoop

+0

不幸的是,没有帮助。它让我感到困惑,因为在angularJS处理路由时它工作正常。 – JSB

+0

您还没有将您的服务添加到您的提供者数组中?它会尽管抛出一个不同的错误.... – Alex

我面临着同样的问题,而试图升级angularjs服务和角度使用。您可以找到角码here中引发的错误。

当我们他们提到,如果我们先NG1应用自举NG2应用中,我们可能会遇到这个问题,吴会议期间采访了角的球队,他们建议改用引导过程做NG1先ng2将解决这个问题。我们还没有尝试切换引导顺序,但希望这可以解决您的问题。

+0

hmm intersting。我遵循他们的指导,所以它是不正常的,它不工作。他们的指南首先发布了我的知识。我目前的解决方案是首先将te服务转换为角度服务,然后将它们降级为angularJS。这并不理想,但这对我来说似乎是唯一的解决方案。 – JSB

+0

其实我们有一个hacky解决方案,同时使用platformBrowserDynamic引导角应用程序,我们通过platformRef.injector访问这些服务,所以在那时我们将它们附加到一个窗口对象。在我们的例子中,我们有很多ng1服务,所以在ng2中重写不是我们的选择。 – Sri