【发布时间】:2017-03-31 16:33:38
【问题描述】:
我有一个这样的 HTTP 服务来检索用户列表:
@Injectable()
export class UserService {
private _dataStore: {
users: User[]
};
private _users: BehaviorSubject<User[]> = new BehaviorSubject<User[]>();
public usersObservable: Observable<User[]> = this._users.asObservable();
...
public list(): void {
this
.http
.get('/users')
.subscribe((res) => {
this._dataStore.users = res.json() as User[];
this._users.next(Object.assign({}, this._dataStore).users);
});
}
}
然后在我的组件中:
export class UsersComponent {
public users: User[] = [];
private usersObservable: Observable<User[]>;
constructor(private userService: UserService) {
this.usersObservable = this.userService.usersObservable;
}
public listUsers(): void {
this.usersObservable.subscribe(data => {
this.users = data;
console.log(this.users.length); // <- this line cause the mysterious bug,
// a replace with console.log(this.users) makes the app works correctly
}));
this.userService.list();
}
}
而这个组件的视图只是一个表格,其中的行如下
<tr *ngFor='let user of users'>
........ <!-- Display data here -->
</tr>
问题是,如果我调用任何访问 data 或 this.users 属性的函数,observable 将不会被调用。如果我只是 console.log(this.users) 或 console.log(data),一切都很好。
你知道问题出在哪里吗? 提前谢谢你。
【问题讨论】:
标签: angular observable