2016-12-20 10 views
8

Mam projekt Angular2, utworzony w Mac OS i uruchomiony. Ale kiedy git to w systemie Windows, nie może uruchomić. W Chrome, otrzymuję ten błąd:angular2 TypeError: Nie można ustawić właściwości 'name' of undefined

core.umd.js:3491 EXCEPTION: Uncaught (in promise): TypeError: Cannot set property 'name' of undefined 
TypeError: Cannot set property 'name' of undefined 
    at new EmptyError (http://localhost:3000/node_modules/rxjs/util/EmptyError.js:21:30) 
    at FirstSubscriber._complete (http://localhost:3000/node_modules/rxjs/operator/first.js:148:31) 
    at FirstSubscriber.Subscriber.complete (http://localhost:3000/node_modules/rxjs/Subscriber.js:114:18) 
    at MergeAllSubscriber._complete (http://localhost:3000/node_modules/rxjs/operator/mergeAll.js:94:30) 
    at MergeAllSubscriber.Subscriber.complete (http://localhost:3000/node_modules/rxjs/Subscriber.js:114:18) 
    at MapSubscriber.Subscriber._complete (http://localhost:3000/node_modules/rxjs/Subscriber.js:132:26) 
    at MapSubscriber.Subscriber.complete (http://localhost:3000/node_modules/rxjs/Subscriber.js:114:18) 
    at EmptyObservable._subscribe (http://localhost:3000/node_modules/rxjs/observable/EmptyObservable.js:69:24) 
    at EmptyObservable.Observable.subscribe (http://localhost:3000/node_modules/rxjs/Observable.js:45:27) 
    at Observable._subscribe (http://localhost:3000/node_modules/rxjs/Observable.js:103:28) 
    at MapOperator.call (http://localhost:3000/node_modules/rxjs/operator/map.js:54:23) 
    at Observable.subscribe (http://localhost:3000/node_modules/rxjs/Observable.js:42:22) 
    at Observable._subscribe (http://localhost:3000/node_modules/rxjs/Observable.js:103:28) 
    at MergeAllOperator.call (http://localhost:3000/node_modules/rxjs/operator/mergeAll.js:63:23) 
    at Observable.subscribe (http://localhost:3000/node_modules/rxjs/Observable.js:42:22) 
core.umd.js:3496 ORIGINAL STACKTRACE:ErrorHandler.handleError @ core.umd.js:3496next @ core.umd.js:8449schedulerFn @ core.umd.js:4118SafeSubscriber.__tryOrUnsub @ Subscriber.ts:238SafeSubscriber.next @ Subscriber.ts:190Subscriber._next @ Subscriber.ts:135Subscriber.next @ Subscriber.ts:95Subject.next @ Subject.ts:61EventEmitter.emit @ core.umd.js:4104NgZone.triggerError @ core.umd.js:4465onHandleError @ core.umd.js:4426ZoneDelegate.handleError @ zone.js:246Zone.runGuarded @ zone.js:129_loop_1 @ zone.js:429drainMicroTaskQueue @ zone.js:438ZoneTask.invoke @ zone.js:349 
core.umd.js:3497 Error: Uncaught (in promise): TypeError: Cannot set property 'name' of undefined 
TypeError: Cannot set property 'name' of undefined 
    at new EmptyError (EmptyError.ts:14) 
    at FirstSubscriber._complete (first.ts:161) 
    at FirstSubscriber.Subscriber.complete (Subscriber.ts:122) 
    at MergeAllSubscriber._complete (mergeAll.ts:91) 
    at MergeAllSubscriber.Subscriber.complete (Subscriber.ts:122) 
    at MapSubscriber.Subscriber._complete (Subscriber.ts:144) 
    at MapSubscriber.Subscriber.complete (Subscriber.ts:122) 
    at EmptyObservable._subscribe (EmptyObservable.ts:74) 
    at EmptyObservable.Observable.subscribe (Observable.ts:98) 
    at Observable._subscribe (Observable.ts:158) 
    at MapOperator.call (map.ts:50) 
    at Observable.subscribe (Observable.ts:96) 
    at Observable._subscribe (Observable.ts:158) 
    at MergeAllOperator.call (mergeAll.ts:61) 
    at Observable.subscribe (Observable.ts:96) 
    at resolvePromise (zone.js:486) [angular] 
    at resolvePromise (zone.js:471) [angular] 
    at :3000de_modules/zone.js/dist/zone.js:520:17 [angular] 
    at Object.onInvokeTask (core.umd.js:4396) [angular] 
    at ZoneDelegate.invokeTask (zone.js:274) [angular] 
    at Zone.runTask (zone.js:151) [<root> => angular] 
    at drainMicroTaskQueue (zone.js:418) [<root>] 
    at XMLHttpRequest.ZoneTask.invoke (zone.js:349) [<root>]ErrorHandler.handleError @ core.umd.js:3497next @ core.umd.js:8449schedulerFn @ core.umd.js:4118SafeSubscriber.__tryOrUnsub @ Subscriber.ts:238SafeSubscriber.next @ Subscriber.ts:190Subscriber._next @ Subscriber.ts:135Subscriber.next @ Subscriber.ts:95Subject.next @ Subject.ts:61EventEmitter.emit @ core.umd.js:4104NgZone.triggerError @ core.umd.js:4465onHandleError @ core.umd.js:4426ZoneDelegate.handleError @ zone.js:246Zone.runGuarded @ zone.js:129_loop_1 @ zone.js:429drainMicroTaskQueue @ zone.js:438ZoneTask.invoke @ zone.js:349 
zone.js:405 Unhandled Promise rejection: TypeError: Cannot set property 'name' of undefined(…) ; Zone: angular ; Task: Promise.then ; Value: TypeError: Cannot set property 'name' of undefined(…) undefined 

w Firefox, otrzymuję ten błąd:

EXCEPTION: Uncaught (in promise): TypeError: err is undefined 
[email protected]://localhost:3000/node_modules/rxjs/util/EmptyError.js:21:9 
    [email protected]://localhost:3000/node_modules/rxjs/operator/first.js:148:31 
    [email protected]://localhost:3000/node_modules/rxjs/Subscriber.js:114:13 
    [email protected]://localhost:3000/node_modules/rxjs/operator/mergeAll.js:94:13 
    [email protected]://localhost:3000/node_modules/rxjs/Subscriber.js:114:13 
    [email protected]://localhost:3000/node_modules/rxjs/Subscriber.js:132:9 
    Subscriber.p[email protected]://localhost:3000/node_modules/rxjs/Subscriber.js:114:13 
    [email protected]://localhost:3000/node_modules/rxjs/observable/EmptyObservable.js:69:13 
    [email protected]://localhost:3000/node_modules/rxjs/Observable.js:45:22 
    [email protected]://localhost:3000/node_modules/rxjs/Observable.js:10[…] 
ORIGINAL STACKTRACE: core.umd.js:3496:17 
    [email protected]://localhost:3000/node_modules/zone.js/dist/zone.js:486:31 [angular] 
    [email protected]://localhost:3000/node_modules/zone.js/dist/zone.js:471:17 [angular] 
    scheduleResolveOrRejecthttp://localhost:3000/node_modules/zone.js/dist/zone.js:520:17 [angular] 
    NgZone</NgZone.prototype.forkInnerZoneWithAngularBehavior/this.inner<[email protected]://localhost:3000/node_modules/@angular/core/bundles/core.umd.js:4396:32 [angular] 
    [email protected]://localhost:3000/node_modules/zone.js/dist/zone.js:274:21 [angular] 
    [email protected]://localhost:3000/node_modules/zone.js/dist/zone.js:151:28 [<root> => angular] 
    [email protected]://localhost:3000/node_modules/zone.js/dist/zone.js:418:25 [<root>] 
    ZoneTask/[email protected]://localhost:3000/node_modules/zone.js/dist/zone.js:349:25 [<root>] 
core.umd.js:3497:17 
Unhandled Promise rejection: TypeError: err is undefined 
堆栈跟踪: 
    [object Object] ; Zone: angular ; Task: Promise.then ; Value: TypeError: err is undefined 
堆栈跟踪: 
    [object Object] undefined zone.js:405:13 
Object { message: "Uncaught (in promise): TypeError: err is undefined 
[email protected]://localhost:3000/node_modules/rxjs/util/EmptyError.js:21:9 
    [email protected]://localhost:3000/node_modules/rxjs/operator/first.js:148:31 
    [email protected]://localhost:3000/node_modules/rxjs/Subscriber.js:114:13 
    [email protected]://localhost:3000/node_modules/rxjs/operator/mergeAll.js:94:13 
    [email protected]://localhost:3000/node_modules/rxjs/Subscriber.js:114:13 
    [email protected]://localhost:3000/node_modules/rxjs/Subscriber.js:132:9 
    [email protected]://localhost:3000/node_modules/rxjs/Subscriber.js:114:13 
    [email protected]://localhost:3000/node_modules/rxjs/observable/EmptyObservable.js:69:13 
    [email protected]://localhost:3000/node_modules/rxjs/Observable.js:45:22 
    [email protected]://localhost:3000/node_modules/rxjs/Observable.js:103:16 
    MapOpe"[…], originalStack: "[email protected]://localhost:300…", zoneAwareStack: "[email protected]://localhost:300…", stack: "[email protected]://localhost:300…", rejection: TypeError, promise: Object, zone: Object, task: Object } 

Dlaczego? To jest mój kod:

app.module.ts

import { NgModule }  from '@angular/core'; 
import { BrowserModule } from '@angular/platform-browser'; 
import { CookieService } from 'angular2-cookie/core'; 
import './rxjs-operators'; 

import { LoginModule } from './login/login.module'; 
import { HomeModule } from './home/home.module'; 

import { AppComponent } from './app.component'; 
import { LoadingComponent } from './loading/loading.component'; 
import { NavigationComponent } from './navigation/navigation.component'; 

import { LoginTransferService } from './service/transfer/login-transfer.service'; 

import { AppRoutingModule } from './app-routing.module'; 

import { AppRouteGuardsService } from './app-route-guards.service'; 


@NgModule({ 
    imports:  [ 
     BrowserModule, 
     AppRoutingModule, 
     LoginModule, 
     HomeModule, 
    ], 
    declarations: [ 
     AppComponent, 
     LoadingComponent, 
     NavigationComponent, 
    ], 
    providers: [ 
     CookieService, 
     AppRouteGuardsService, 
     LoginTransferService 
    ], 
    bootstrap: [ AppComponent ] 
}) 
export class AppModule { } 

app.component.ts

import { Component } from '@angular/core'; 

import './rxjs-operators'; 

@Component({ 
    selector: 'my-app', 
    template: ` 
     <ArrowIMWP-navigation></ArrowIMWP-navigation> 
     <router-outlet></router-outlet> 
    `, 
    styleUrls: ['app/app.component.css'] 
}) 
export class AppComponent { } 

app-routing.module.ts

import { NgModule } from '@angular/core'; 
import { RouterModule, Routes } from '@angular/router'; 
import { LoadingComponent } from './loading/loading.component'; 
import { AppRouteGuardsService } from './app-route-guards.service'; 

const routes: Routes = [{ 
    path: '', 
    component: LoadingComponent, 
    canActivate : [ AppRouteGuardsService ] 
}]; 

@NgModule({ 
    imports: [ RouterModule.forRoot(routes) ], 
    exports: [ RouterModule ] 
}) 
export class AppRoutingModule {} 

app- route-guards.service.ts

import { Injectable } from '@angular/core'; 
import { 
    Router, 
    CanActivate, 
    ActivatedRouteSnapshot, 
    RouterStateSnapshot 
} from '@angular/router'; 
import { CookieService } from 'angular2-cookie/core'; 

@Injectable() 
export class AppRouteGuardsService implements CanActivate { 
    constructor(private cookieService:CookieService, private router:Router) {}; 

    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { 
     let tempIsLogined = this.cookieService.getObject("ArrowIMWP-IsLogined"); 
     if (tempIsLogined && tempIsLogined == true) { 
      if (state.url == "/") { 
       this.router.navigate(['/home']); 
       return false; 
      } 
      return true; 
     }else { 
      if (state.url == "/login") { 
       return true; 
      } 
      this.router.navigate(['/login']); 
      return false; 
     } 
    } 
} 

navigation.component.ts

import { Component, OnInit } from '@angular/core'; 
import { Router } from '@angular/router'; 
import { CookieService } from 'angular2-cookie/core'; 
import { LoginTransferService } from '../service/transfer/login-transfer.service'; 

@Component({ 
    moduleId: module.id, 
    selector: 'ArrowIMWP-navigation', 
    templateUrl: 'navigation.component.html', 
    styleUrls: ['navigation.component.css'] 
}) 

export class NavigationComponent implements OnInit { 

    isShowNavigationItems = false; 

    constructor(
     private router:Router, 
     private cookieService:CookieService, 
     private loginTransferService:LoginTransferService 
    ) { 
     let tempIsLogined = cookieService.getObject("ArrowIMWP-IsLogined"); 
     if (tempIsLogined && tempIsLogined == true) { 
      this.isShowNavigationItems = true; 
     }else { 
      this.isShowNavigationItems = false; 
     } 

     loginTransferService.loginSuccessed$.subscribe(
      data => { 
       console.log(data); 
       if (data == "Logined") { 
        this.isShowNavigationItems = true; 
       } 
      } 
     ) 
    } 
} 

login.module.ts

import { NgModule } from '@angular/core'; 
import { BrowserModule } from '@angular/platform-browser'; 
import { CookieService } from 'angular2-cookie/services/cookies.service'; 
import '../rxjs-operators'; 
import { LoginComponent } from './login.component'; 
import { LoginRoutingModule } from './login-routing.module'; 
import { LoginRouteGuardsService } from './login-route-guards.service'; 

@NgModule({ 
    imports:  [ 
     BrowserModule, 
     LoginRoutingModule 
    ], 
    declarations: [ LoginComponent ], 
    providers: [ 
     CookieService, 
     LoginRouteGuardsService 
    ], 
    bootstrap: [ LoginComponent ] 
}) 

export class LoginModule {} 

login.component.ts

import { Component, OnInit } from '@angular/core'; 
import { CookieService } from 'angular2-cookie/core'; 
import { Router } from '@angular/router'; 
import '../rxjs-operators'; 
import { LoginTransferService } from '../service/transfer/login-transfer.service'; 

@Component({ 
    moduleId: module.id, 
    selector: 'ArrowIMWP-login', 
    templateUrl: 'login.component.html', 
    styleUrls : ['login.component.css'] 
}) 

export class LoginComponent implements OnInit { 

    constructor(
     private cookieService:CookieService, 
     private router:Router, 
     private loginTransferService:LoginTransferService 
    ) {} 

    loginButtonClicked() { 
     this.cookieService.putObject("ArrowIMWP-IsLogined", true); 
     this.router.navigate(['/home']); 
     this.loginTransferService.loginSuccessedNext("Logined"); 
    } 
} 

login-routing.module.ts

import { NgModule } from '@angular/core'; 
import { RouterModule, Routes } from '@angular/router'; 
import { LoginComponent } from './login.component'; 
import { LoginRouteGuardsService } from './login-route-guards.service'; 

@NgModule({ 
    imports: [ RouterModule.forChild([{ 
     path: 'login', 
     component: LoginComponent, 
     canActivate : [ LoginRouteGuardsService ] 
    }]) ], 
    exports: [ RouterModule ] 
}) 

export class LoginRoutingModule {} 

login-route-guards.service.ts

import { Injectable, OnInit } from '@angular/core'; 
import { 
    Router, 
    CanActivate, 
    ActivatedRouteSnapshot, 
    RouterStateSnapshot 
} from '@angular/router'; 
import { CookieService } from 'angular2-cookie/core'; 

@Injectable() 
export class LoginRouteGuardsService implements OnInit,CanActivate { 
    constructor(private cookieService:CookieService, private router:Router) {}; 

    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { 
     let tempIsLogined = this.cookieService.getObject("ArrowIMWP-IsLogined"); 
     if (tempIsLogined && tempIsLogined == true) { 
      this.router.navigate(['/home']); 
      return false; 
     }else { 
     return true; 
     } 
    } 
} 
+3

Jeśli jest to przykład [mcve], odejdę ... – Teemu

+0

Aby być uczciwym, nie jest to naprawdę minimalne, wszystkie autorytety i wszystko to nie jest wymagane. Nawet najprostsze użycie tras zakończy się niepowodzeniem podczas korzystania z pliku zone.js 0.7.3. Ale tak, i szczerze mówiąc, staje się coraz ważniejsze, aby jasno mówić o wszystkim. Domyślam się, że moja wina polega na tym, że instaluję plik stref.js jak kretyn, zamiast sprawdzać, która wersja angular2 faktycznie wykorzystała się w ich plunkach. – Svend

Odpowiedz

23

Użyłeś zone.js 0.7.3 w package.json? Jeżeli tak, proszę zmienić na 0.7.2 spróbować:

"zone.js": "0.7.2" 

bieg npm install spróbować.

+1

WTF się stało? Ten sam problem dla mnie i 0.7.2 rozwiązał problem. Czy 0.7.3 to ich dev-master?! –

+2

Musiałem debugować 3h moją aplikację, aby znaleźć ... –

+1

Związany z tym problem jest tutaj: https://github.com/angular/zone.js/issues/554 –

1

0.8.x Zone jest teraz i ma znacznie lepsze ślady stosu i ma również ten błąd naprawiono:

"zone.js": ">=0.8.12" 
Powiązane problemy