gpt4 book ai didi

Angular 5 订阅不是一个函数

转载 作者:行者123 更新时间:2023-12-02 11:05:58 29 4
gpt4 key购买 nike

Angular 返回错误:错误:未捕获( promise 中):TypeError:res.users.subscribe 不是函数。

从今天早上开始,我就不明白我的决心出了什么问题。

UserService.ts

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';

@Injectable()
export class UsersService {

private api = 'http://localhost:3000/users';
private headers = new HttpHeaders();

constructor(
private http: HttpClient
) {}

getAllUsers(): Observable<any[]> {
return this.http.get<any[]>(this.api, {headers: this.headers, responseType: 'json' });
}
}
<小时/>

UserResolve.ts:

import { Injectable } from '@angular/core';
import { Resolve } from '@angular/router';
import { UsersService } from '../services/users.service';

@Injectable()
export class UsersResolve implements Resolve<any> {

constructor(private usersService: UsersService) {}

resolve() {
return this.usersService.getAllUsers();
}
}
<小时/>

UserComponent.ts

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';

import {Users} from '../_shared/models/Users';

@Component({
selector: 'app-user',
templateUrl: './users.component.html',
styleUrls: ['./users.component.sass']
})

export class UsersComponent implements OnInit {

constructor(private route: ActivatedRoute) {}

public title: string;
public users: Users[] = [];

ngOnInit() {
this.route.data.forEach((res: any): any => {
this.title = res.title;
res.users.subscribe(users => {
console.log(users);
this.users = users;
});
});
}
}

当我记录 res.users 时,它返回“function UsersResolve()”,但没有 proto 订阅...

json 是对象数组,如下所示:

{
id: 13246,
guid: '46ffgd456dfs',
name: 'John Doe',
adress: ...
}

问题可能出在我的 json 内容上吗?

最初,我想训练 RxJS 操作符...

最佳答案

您正在对数组应用订阅。您应该在 Observable 上执行此操作。

尝试应用以下更改..一旦您了解了数据在控制台上的值(value),您就可以对数据执行操作。

UserComponent.ts

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import {Users} from '../_shared/models/Users';

@Component({
selector: 'app-user',
templateUrl: './users.component.html',
styleUrls: ['./users.component.sass']
})

export class UsersComponent implements OnInit {

constructor(private route: ActivatedRoute) {}

public title: string;
public users: Users[] = [];

ngOnInit() {
this.route.data.subscribe(data => console.log(data));
}
}

更新

正如评论中提到的:

如果您定义了这样的路线:

const appRoutes: Routes = 
[ ...
{ path: 'users',
component: UsersComponent,
resolve: {
users : UsersResolve
}
}
];

您应该能够获取如下数据:

ngOnInit() {
this.route.data.subscribe(data => console.log(data['users']));
}

关于Angular 5 订阅不是一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50898587/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com