Я не могу хранить данные в объекте UserDetailsArr, PFB-код для вашей справки.Angular2 Service Подписаться не работает
пользователя Класс детали:
export class UserDetails
{
userId:string;
userName:string;
password:string;
firstName:string;
lastName:string;
mobileNumber:string;
email:string
}
Класс обслуживания:
import {Component} from '@angular/core'
import {OnInit} from '@angular/core'
import {UserService} from './user.service'
import {User} from './user'
import {UserDetails} from './user'
import {UserDetailComponent} from './user-detail.component'
import {HTTP_PROVIDERS} from '@angular/http';
@Component(
{
selector:'user-list',
template: `
<br/><br/><br/>
<div>
<table border='1'>
<thead>
<tr>
<th>First Name </th>
<th>Last Name </th>
<th>Mobile Number </th>
<th>Email </th>
</tr>
</thead>
<tr *ngFor="let user of UserDetailsArr">
<td> <span (click)="showDetails(user)"> {{user.firstName}} </span> </td>
<td> {{user.lastName}} </td>
<td> {{user.mobileNumber }} </td>
<td> {{user.email}} </td>
</tr>
</table>
</div>
<user-detail *ngIf = "selectedUser != null" [user] = "selectedUser"></user-detail>
<br/><br/><br/>
`,
providers:[UserService , HTTP_PROVIDERS],
directives:[UserDetailComponent]
}
)
export class UserListComponent implements OnInit
{
users:User[];
UserDetailsArr: UserDetails[]= [];
errorMessage: string = '';
isLoading: boolean = true;
public selectedUser = null;
constructor(private _userService:UserService)
{
}
ngOnInit():any
{
this.getUsers();
}
getUsers()
{
this._userService.getUsers()
.subscribe(
/* happy path */ p => this.UserDetailsArr = p,
/* error path */ e => this.errorMessage = e,
/* onComplete */() => this.isLoading = false);
console.log(this.UserDetailsArr);
}
showDetails(user)
{
this.selectedUser = user;
}
}
веб-служба работает perfecltly Если я вхожу, как показано ниже,
this._userService.getUsers()
.subscribe(
/* happy path */ p => console.log(JSON.stringify(p),
/* error path */ e => this.errorMessage = e,
/* onComplete */() => this.isLoading = false));
пользовательские данные вошли в консоли браузера ,
[{"UserId":"bcb444aa-401b-48a7-b1bf-17b4bf78b834","UserName":"prabhu","Password":"pwd","FirstName":"PRABHU","LastName":"ARUMUGAM","MobileNumber":"1234567890","Email":"[email protected]"},
{"UserId":"d9e5ba40-d0d7-4d90-89b0-7e26660cc84b","UserName":"senthil","Password":"pwd","FirstName":"SENTHIL","LastName":"KUMAR","MobileNumber":"1234567890","Email":"[email protected]"},
{"UserId":"a59dabad-5a8c-4ced-9006-2181bf8c10cb","UserName":"vijay","Password":"pwd","FirstName":"VIJAY","LastName":"RAJ","MobileNumber":"1234567890","Email":"[email protected]"},
{"UserId":"f3e2d351-9413-4d80-8623-36556d27f875","UserName":"thamizh","Password":"pwd","FirstName":"THAMIZH","LastName":"VANAN","MobileNumber":"1234567890","Email":"[email protected]"}]
(e) { return _this.errorMessage = e; }() { return _this.isLoading = false; }
Но если я назначу данные с данными UserDetailsArr не назначен,
this._userService.getUsers()
.subscribe(
/* happy path */ p => this.UserDetailsArr = p,
/* error path */ e => this.errorMessage = e,
/* onComplete */() => this.isLoading = false);
console.log(this.UserDetailsArr);
Следующая строка я пытался напечатать, но его не работает, результат не определен.
Ну, конечно. Ваша услуга асинхронна. Вот почему он возвращает Observable, а не только массив пользователей. Таким образом, функция 'p => this.UserDetailsArr = p' выполняется задолго после строки' console.log (this.UserDetailsArr); ', когда пользователи доступны, скорее всего, когда вы получаете ответ на HTTP-запрос, используемый для получить пользователей. –