如何将服务的响应传递给控制器​​Angularjs?

时间:2017-11-02 06:01:23

标签: javascript angularjs

我在服务中有一个请求:

getCommentText(id: number) {
    var data = null
    this.$http.post(this.path + '/' + id + '/GetComment', data, {
        headers: { "Content-Type": "application/json" }
    }).then(r => r.data);
}

和控制器

    openComment($event) {
        this.commentid = $event.target.id;
        this.service.getCommentText(this.commentid);
    }

我需要将服务的响应传回控制器。最终会有什么: var text =(响应)我试图在控制器中使用subscribe。但它对我不起作用。这是第一个Angulyar,我不太了解他。我该怎么办?

2 个答案:

答案 0 :(得分:2)

您的服务应该返回承诺:

getCommentText(id: number) {
    var data = null
    return this.$http.post(this.path + '/' + id + '/GetComment', data, {
        headers: { "Content-Type": "application/json" }
    }).then(r => r.data);
}

openComment($event) {
    this.commentid = $event.target.id;
    this.service.getCommentText(this.commentid).then(response => {
        console.log(response);
    });
 }

答案 1 :(得分:0)

$http.post返回PromisePromise是一个表示值或错误的对象,两者都将在未来的某个时刻出现。由于这是一个对象,因此可以返回它,如下所示:

getCommentText(id: number) {
  return this.$http.post(this.path + '/' + id + '/GetComment', data, {
    headers: {
      'Content-Type': 'application/json'
    }
  }).then(r => r.data);
}

然后可以在您的控制器中使用它:

openComment($event) {
  this.commentid = $event.target.id
  this.service.getCommentText(this.commentid)
    .then((text) => {
      this.commentText = text
    })

由于getCommentText可能会失败,您应该注意处理失败案例。此外,由于这是异步的,因此请考虑向用户显示某种加载指示符。