如何将获取的API的一部分添加到component中定义的数组中
How to add a part of the acquired API to the array defined in component
为了学习,我正在尝试使用 Angular 2 + Django Rest Framework 创建一个简单的 Todo 应用程序。
为了立即显示输入表单中保存的项目,我想实现获取最新的并显示的功能。
JSON format WEB API获取最新的有如下结构。
获取此 API 的函数在 todo.service.ts
中有描述
@Injectable()
export class TodoService {
todo: Todo[] = [];
newtodo: NewTodo[] = [];
private Url = `http://127.0.0.1:8000/api/todo/`
private headers = new Headers({'Content-Type': 'application/json'});
constructor(
private http: Http
){}
// Acquire one latest todo added
getNewTodo(): Promise<NewTodo[]> {
return this.http
.get(this.Url+"?limit=1")
.toPromise()
.then(res => res.json())
.catch(this.handleError)
}
组件在 todo.component.ts
中描述
@Component({
selector: 'todo-list',
templateUrl: '../templates/todo-list.component.html',
styleUrls: ['../static/todo-list.component.css']
})
export class TodoListComponent {
todos: Todo[] = [];
newtodo: NewTodo[] = [];
newtodos: Todo[] = [];
@Input() todo: Todo = new Todo();
save(): void {
this.todoService
.create(this.todo);
}
}
我要传授的重点是以下几点
1.Execute服务的getNewTodo()在执行组件的save()时将得到的return值存入数组newtodo
.
2.Since获取的JSON只需要results部分,拉出results部分,push到数组newtodos
传给html.
对于1,我觉得你应该在save()中写下如下描述
this.todoService
.getNewTodo()
.then(newtodo => this.newtodo = newtodo);
我看不懂要写什么 2.
我想告诉你如何解决它。
您可以进入JSON并通过以下方式获取results
的内容:
getNewTodo(): Promise<NewTodo[]> {
return this.http
.get(this.Url+"?limit=1")
.toPromise()
.then(res => res.json().results) // here
.catch(this.handleError)
}
你不是展示在服务中使用create
-method,而是不管它是什么样子,return一个promise,这样我们在组件里面可以回调调用getNewTodo
:
save() {
this.todoService
.create(this.todo)
.then(data => {
this.getNewTodo(); // here
})
}
和在服务中调用方法的getNewTodo
:
getNewTodo() {
this.todoService
.getNewTodo()
.then(newtodo => {
this.newtodo = newtodo
});
}
为了学习,我正在尝试使用 Angular 2 + Django Rest Framework 创建一个简单的 Todo 应用程序。
为了立即显示输入表单中保存的项目,我想实现获取最新的并显示的功能。
JSON format WEB API获取最新的有如下结构。
获取此 API 的函数在 todo.service.ts
中有描述@Injectable()
export class TodoService {
todo: Todo[] = [];
newtodo: NewTodo[] = [];
private Url = `http://127.0.0.1:8000/api/todo/`
private headers = new Headers({'Content-Type': 'application/json'});
constructor(
private http: Http
){}
// Acquire one latest todo added
getNewTodo(): Promise<NewTodo[]> {
return this.http
.get(this.Url+"?limit=1")
.toPromise()
.then(res => res.json())
.catch(this.handleError)
}
组件在 todo.component.ts
中描述@Component({
selector: 'todo-list',
templateUrl: '../templates/todo-list.component.html',
styleUrls: ['../static/todo-list.component.css']
})
export class TodoListComponent {
todos: Todo[] = [];
newtodo: NewTodo[] = [];
newtodos: Todo[] = [];
@Input() todo: Todo = new Todo();
save(): void {
this.todoService
.create(this.todo);
}
}
我要传授的重点是以下几点
1.Execute服务的getNewTodo()在执行组件的save()时将得到的return值存入数组newtodo
.
2.Since获取的JSON只需要results部分,拉出results部分,push到数组newtodos
传给html.
对于1,我觉得你应该在save()中写下如下描述
this.todoService
.getNewTodo()
.then(newtodo => this.newtodo = newtodo);
我看不懂要写什么 2. 我想告诉你如何解决它。
您可以进入JSON并通过以下方式获取results
的内容:
getNewTodo(): Promise<NewTodo[]> {
return this.http
.get(this.Url+"?limit=1")
.toPromise()
.then(res => res.json().results) // here
.catch(this.handleError)
}
你不是展示在服务中使用create
-method,而是不管它是什么样子,return一个promise,这样我们在组件里面可以回调调用getNewTodo
:
save() {
this.todoService
.create(this.todo)
.then(data => {
this.getNewTodo(); // here
})
}
和在服务中调用方法的getNewTodo
:
getNewTodo() {
this.todoService
.getNewTodo()
.then(newtodo => {
this.newtodo = newtodo
});
}