Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度观测值与积垢和刷新数据_Angular_Angular Services - Fatal编程技术网

Angular 角度观测值与积垢和刷新数据

Angular 角度观测值与积垢和刷新数据,angular,angular-services,Angular,Angular Services,关于简单crud应用的角度2/4模式,我有几个问题。在我看过的大多数示例中,我看不到数据在插入/更新之后是如何刷新的 我对可观察性有点陌生,但了解大多数模式,但在插入/更新/删除后刷新数据的情况除外。有人能解释一下刷新数据的最佳方法吗?我真的需要使用可观测数据而不是承诺吗?是否接受继续使用承诺 我如何使用可观测数据执行以下操作 用户。服务 insertPromise(user : User) { let headers = new Headers({ 'Content-Type': 'a

关于简单crud应用的角度2/4模式,我有几个问题。在我看过的大多数示例中,我看不到数据在插入/更新之后是如何刷新的

我对可观察性有点陌生,但了解大多数模式,但在插入/更新/删除后刷新数据的情况除外。有人能解释一下刷新数据的最佳方法吗?我真的需要使用可观测数据而不是承诺吗?是否接受继续使用承诺

我如何使用可观测数据执行以下操作

用户。服务

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);
  }