Angular 角度观测值与积垢和刷新数据
关于简单crud应用的角度2/4模式,我有几个问题。在我看过的大多数示例中,我看不到数据在插入/更新之后是如何刷新的 我对可观察性有点陌生,但了解大多数模式,但在插入/更新/删除后刷新数据的情况除外。有人能解释一下刷新数据的最佳方法吗?我真的需要使用可观测数据而不是承诺吗?是否接受继续使用承诺 我如何使用可观测数据执行以下操作 用户。服务Angular 角度观测值与积垢和刷新数据,angular,angular-services,Angular,Angular Services,关于简单crud应用的角度2/4模式,我有几个问题。在我看过的大多数示例中,我看不到数据在插入/更新之后是如何刷新的 我对可观察性有点陌生,但了解大多数模式,但在插入/更新/删除后刷新数据的情况除外。有人能解释一下刷新数据的最佳方法吗?我真的需要使用可观测数据而不是承诺吗?是否接受继续使用承诺 我如何使用可观测数据执行以下操作 用户。服务 insertPromise(user : User) { let headers = new Headers({ 'Content-Type': 'a
insertPromise(user : User)
{
let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
let url = this.baseUrl;
return this.http.post(url, JSON.stringify(user),options)
.do(data=>console.log(JSON.stringify(data)))
.toPromise()
.then(this.extractPromiseData)
.catch(this.handleError);
}
insertObservable(user : User) {
this.usersService.insert(user)
.subscribe(
resp => {
console.log(resp);
},
error => this.errorMessage = <any>error);
}
这取决于您的实现。例如,您可以返回新用户以响应
POST
请求,然后将此用户数据放入this.users
。另一个选项是在任何成功的POST
/PUT
后重新加载整个列表。我认为第一种方法更好,因为它不会引起任何额外的HTTP请求。代码示例:
insert(用户:用户){
const headers=新的头({'Content Type':'application/json'});
const options=newrequestoptions({headers:headers});
const url=this.baseUrl;
返回this.http.post(url,JSON.stringify(用户),选项)
.do(response=>console.log(JSON.stringify(数据)))
//首先,将HTTP响应转换为用户实例(如果用户是
//只是一个接口,如果是类,就更难了)
.map(response=>response.json().user作为用户)
//然后,将该用户对象推送到现有的用户数组中
//那么您就不必“刷新”this.users,因为它已经
//最新的
.map(用户=>this.users.push(用户))
.接住(这个.把手错误);
}
是的,仅重新加载修改过的/新用户是有意义的,但我如何加载整个列表,我不打算这样做,只是为了参考。那么对于put,我应该只查找用户并将该用户设置为更新的用户。对于delete,我应该删除用户吗?事实上我已经弄明白了,我使用的是priming DataTable,注意到它只适用于spread操作符,这对我来说是新的,但一旦我更改了代码,它就会按预期工作。谢谢你的帮助!!让用户=[…this.users];push(用户);this.users=用户;也许DataTable只在接收到新对象(数组)时检测到更改,而spread操作符显然创建了一个新数组。
insert(user: User)
{
this.usersService.insertPromise(user)
.then(result=>console.log(result))
.then(
()=>this.usersService.getAllUsers()
.then(
users=>
this.users = users
)
.catch(error=>console.log(error))
)
.catch(error=>console.log(error));
}
insertObservable(user: User)
{
let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
let url = this.baseUrl;
return this.http.post(url, JSON.stringify(user),options)
.map((response: Response) => response.json())
.do(data=>console.log(JSON.stringify(data)))
.catch(this.handleError);
}