在Angular中动态更新视图的正确方法

时间:2013-12-13 06:48:26

标签: api angularjs model restangular

在成功的API POST之后,在视图中更新模型的正确方法是什么?我有一个textarea,类似于Twitter,用户可以输入文本和发布。输入的文本必须在成功发布后立即显示。

如何实现这一目标?我是否应该另外打电话来单独获取帖子,还是有其他方法可以做到这一点?

我的代码看起来像

feedsResolve.getFeeds().then(function(feeds){
 $scope.feeds = feeds;
}

其中feedsResolve是返回承诺的服务

$scope.postFeed = function(){
    var postObj = Restangular.all('posts');
    postObj.post( $scope.feed.text ).then(function(res){
       //res contains only the new feed id
    })
}

如何在视图中更新$ scope.feeds?

1 个答案:

答案 0 :(得分:0)

我假设您发布了一个新帖子,通常帖子如下:

{
  id: 42,
  text: 'This is my text'
}

在这种情况下,您可以执行以下操作:

$scope.postFeed = function(){
    var postObj = Restangular.all('posts');
    var feedText = $scope.feed.text;
    postObj.post( feedText ).then(function(res){
         $scope.feeds.push({ id: res.id, text: feedText});
    })
};

编写restful服务时更好的做法是让POST返回一个实际的JSON对象,其中添加了新的feed(而不仅仅是id)。如果是这种情况,您可以将其添加到您的Feed数组中。

如果您的JSON对象很复杂,这种做法是最常用的最简单的处理方式,无需额外的服务器请求。由于您已经在服务器上,并且您可能已经创建了该对象(为了能够将其插入到数据库中),您所要做的就是将其序列化为HTTP响应。这几乎不增加任何开销,并为客户提供所需的所有信息,以便毫不费力地更新。