2016-09-15 9 views
11

Component lesen nehmen Benutzer aus dem Dienst mit paramsUncaught (in Versprechen): Fehler: nicht Eigenschaft undefined

@Component({ 
    selector: 'users', 
    providers: [UserService], 
    template: ` 
    <p>{{user.id}}</p> 
` 
}) 
export class UserPageComponent implements OnInit { 
    constructor(
     private userService: UserService, 
     private route: ActivatedRoute 
    ) {}; 

    ngOnInit(): void { 
     this.route.params.forEach((params: Params) => { 
      let id = +params['id']; 
      this.userService.getUser(id) 
       .then(user => {console.log(user.id);this.user = user}) 
     }); 
    } 

Service:

@Injectable() 
export class UserService { 
    private postUrl = 'http://127.0.0.1:8000/user-detail/'; // URL to web api 
    constructor(private http: Http) { 
    } 

    getUser(id: number): Promise<User> { 

     return this.http.get(this.postUrl+id) 
      .toPromise() 
      .then(response => response.json() as User) 
      .catch(this.handleError); 

    }; 

Und ich bekomme Fehler Uncaught (in promise): Error: Error in ./UserPageComponent class UserPageComponent - inline template:1:7 caused by: Cannot read property 'id' of undefined

Es sieht als ob der Dienst das Versprechen nicht sendet, obwohl es sollte. Wie löst man dieses Problem?

Antwort

20

Es sieht aus wie Ihre Komponente dosn't für Benutzer Standardwert haben, so ist es nicht definiert, wenn die Komponente try Standardwert Zugabe gemacht

@Component({ 
    selector: 'users', 
    providers: [UserService], 
    template: ` 
    <p>{{user.id}}</p> 
` 
}) 
export class UserPageComponent implements OnInit { 
    user = {} // default value for user 

    constructor(
     private userService: UserService, 
     private route: ActivatedRoute 
    ) {}; 

    ngOnInit(): void { 
     this.route.params.forEach((params: Params) => { 
      let id = +params['id']; 
      this.userService.getUser(id) 
       .then(user => {console.log(user.id);this.user = user}) 
     }); 
    } 

tatsächlich wird es besser sein, eine bedingte Logik hinzufügen hier dann

<p *ngIf="user">{{user.id}}</p> 

sollte es funktionieren

Verwandte Themen