【问题标题】:Angular 4/5 getting route id from JSONAngular 4/5 从 JSON 获取路由 ID
【发布时间】:2018-01-31 05:24:38
【问题描述】:

我是 Angular 的新手,所以我需要你的帮助。我正在尝试为我从 data.json 用户列表中单击的每个用户获取一个 ID。所以我有我的用户列表,当我点击其中任何一个时,它会打开一个带有路由器的新页面,女巫工作正常,我可以获得该用户的 ID,但我无法访问他的姓名、年龄和其他要在屏幕上显示的信息,只是 ID。

组件

user: any[];

constructor(
private route: ActivatedRoute, 
private usersService: UsersService) {

let id = this.route.snapshot.paramMap.get('id');
if(id) this.usersService.getUsers(id).subscribe(user => this.user = user);}

问题是我的服务中没有getUsers(id) 函数,因为我不知道如何从 json 数据文件中获取 ID。我需要你的帮助来实现这个功能。

data.json

[
 {
  "id": 1,
  "firstName": "Paul",
  "surname": "Crowe",
  "age": 28,
  "gender": "male",
  "friends": [
    2
  ]
 },
 {
 "id": 2,
  "firstName": "Rob",
  "surname": "Fitz",
  "age": 23,
  "gender": "male",
  "friends": [
    1,
    3
  ]
 } ...
]

服务

 getUsers() {
 return this.http.get('./assets/data.json').map(array => array);
 }

我认为这个 getUsers 不适合拿 ID。所以我需要帮助。

提前致谢!

【问题讨论】:

  • 使用必须使用这个关键字例如:this.id
  • 有点不清楚你想要什么,..
  • 现实世界的应用程序将有一个不同的休息服务返回由给定 ID 标识的 用户,而不是强制您获取所有用户。如果确实不可能,请使用 Array.find() 在用户数组中查找用户。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 抱歉不清楚。我更新了主题。
  • 是的,我只有需要在项目中使用的 data.json 文件。使用该文件,我需要遍历用户并获取我点击的每个用户的信息。

标签: json angular angular5


【解决方案1】:

我想你想要这样的东西:

user: any;

constructor(
private route: ActivatedRoute, 
private usersService: UsersService) {
 let id = this.route.snapshot.paramMap.get('id');
    if(id) this.usersService.getUsers().subscribe(users =>
              this.user = users.getById(id);}
 }

private getUserById(userId: number){
     return this.users.filter(u=>u.id===userId);
 }

【讨论】:

  • 我还建议实现 ngOnInit 并在那里调用 getUsers 函数。
  • “响应”类型上不存在属性“getById”。 -错误。我尝试将其更改为 getUserById 但它仍然给我一个错误。而对于那个 getUsers 函数,我没有那个函数,因为我不知道如何访问“assets/data.json”文件。它只是作为一个占位符。因此,如果您知道如何通过使用该函数从 json 中获取该 ID,那就太棒了。 'getUsers() { this.http.get('./assets/data.json') } 之类的东西,但不知道如何
  • 对不起,应该是this.users = users;this.user = getById(id);
【解决方案2】:

使用这个.id

if(this.id){
 this.usersService.getUsers(this.id).subscribe(user => this.user = user);}
}

编辑

var users = [
 {
  "id": 1,
  "firstName": "Paul",
  "surname": "Crowe",
  "age": 28,
  "gender": "male",
  "friends": [
    2
  ]
 },
 {
 "id": 2,
  "firstName": "Rob",
  "surname": "Fitz",
  "age": 23,
  "gender": "male",
  "friends": [
    1,
    3
  ]
 }  
];

const user = users.find(t=>t.id ==1);
console.log(user);

【讨论】:

  • 问题是我没有那个 getUsers() 函数。因为我不知道如何从那个 json 数据中获取 ID。
  • 既然你已经有了JSON,你只需要使用array.filter或者find
  • 是的。我无法更改 data.json 文件中的任何内容,因为它是测试的一部分。所以我必须像这样使用它并找到点击用户的 id 以便我可以访问他的数据(姓名、年龄、性别......)
  • 所以你可以按照上面的建议做
  • 是的过滤器可能有效,但我还是新手,所以我应该在哪里使用查找功能,因为在我的服务中我没有与 data.json 的任何连接,女巫是我的主要问题, 我不知道怎么访问它,然后当我访问它时,我可以尝试获取 ID
猜你喜欢
  • 1970-01-01
  • 2016-06-11
  • 1970-01-01
  • 1970-01-01
  • 2018-01-13
  • 2018-01-13
  • 2018-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多