我很难让 .subscribe()
方法在 Angular 2 中的可观察对象上触发。我的设置是一个提供程序,它使用一个注入(inject) Http Service
返回 Controller 可以与之交互并订阅的可观察对象的方法。
我不清楚为什么当方法返回可观察值并且 Controller 将订阅链接到该可观察值时订阅不会触发。非常感谢任何帮助。
用户提供商
@Injectable()
export class UserResource {
constructor( protected http: Http ) {}
public getUsers(): Observable<User[]> {
return this.http.get( '/api/users' )
.map( (response: Response) => <User[]>response.json() )
.catch( (error: Response | any) => {
console.log( error );
return Observable.throw( error );
});
}
}
用户 Controller
export class UsersController {
public usersEnrolled: User[] = [];
public usersUnenrolled: User[] = [];
constructor( private userResource: UserResource ) {}
ngOnInit() {
this.userResource.getUsers()
.subscribe(( users: User[] ) => {
console.log( 'users', users ); // does not fire
this.usersUnenrolled = users.filter( (user: User) => !user.isEnrolled );
this.usersEnrolled = users.filter( (user: User) => user.isEnrolled );
},
( error ) => console.log( 'error', error ),
() => console.log( 'completed' )
);
}
}
更新了订阅以包含错误和完成的回调
请注意,为了代码简洁,我排除了导入语句。
最佳答案
您应该向您的订阅添加一个错误函数,以便了解原因。
.subscribe(
users: User[] => console.log( 'users', users ),
error => console.log('error',error),
() => console.log('completed')
);
您仅传递“下一个”函数。我发现使用 subscribe() 的所有三个函数很有帮助
关于Angular 2 Http 提供者的可观察订阅未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42581960/