我有一个从mongodb中获取的毒品列表,它们显示在一个页面上,当我单击一个页面时,它会在另一个页面上打开,用等于单击todo的URL。现在,我正在尝试从URL获取ID并将其发送到节点服务器,但我无法理解。
ngOnInit() {
this.route.params
.subscribe(
(params: Params) => {
let todoId = params['userId'];
console.log(todoId);
}
);
}
控制台返回未定义。我找到了一个解决方案,该解决方案是由此代码线获取的一个解决方案,但是它只会获得一次ID,当我单击另一个todo时,它没有记录任何内容。
let id = this.route.snapshot.paramMap.get('id');
console.log(id)
以及当我想以此发送请求时:
let id = this.route.snapshot.paramMap.get('id');
this.todoService.getSingleTodo(id)
.subscribe(
(todo: Todo) => {
this.todo = todo;
console.log(todo);
}
);
我在控制台" messages"中得到了此错误:" cast to objectid失败":d path " " _ id " "
服务看起来像这样:
getSingleTodo(id) {
return this.http.get('http://localhost:3000/todos/:id')
.map( response => response.json().obj)
.map( todo => todo.map(todo => new Todo(todo.todoHeadline,
todo.todoDescription, todo._id)));
}
和节点文件:
router.get('/:id', (req, res, next) => {
console.log(req.params.id);
Todo.findById(req.params.id, (err, singleTodo) => {
if (err) {
return res.status(500).json({
title: 'An error occured',
error:err
});
}
res.status(201).json({
message: 'Success',
obj: singleTodo
});
});
});
此控制台打印:id。
主路由文件
const APP_ROUTES: Routes = [
{ path: '', redirectTo: '/auth', pathMatch: 'full' },
{ path: 'todos', component: TodoComponent, children: TODO_ROUTES},
{ path: 'auth', component: AuthenticationComponent, children: AUTH_ROUTES }
];
和儿童托多斯的路线
export const TODO_ROUTES: Routes = [
{path: 'todo/add', component: TodoAddComponent},
{path: ':id', component: TodoListComponent},
{path: 'edit', component: TodoEditComponent}
];
html,其中所有的毒品都像这样显示
<ul class="list-group">
<li class="list-group-item"
*ngFor="let todo of todos;"
[routerLink]="['/todos', todo.todoId]">{{todo.todoHeadline}}
</li>
</ul>
有什么问题?
这是错误的:
let todoId = params['userId'];
在路由中,您定义了路径变量将被命名为" ID":
{path: ':id', component: TodoListComponent},
因此,当您尝试访问路径变量用户ID时,显然会返回未定义。