在教程中,他们有一个示例应用程序,用户可以在其中进行投票。当用户单击upvote时,它会发出更新后端的请求,并等待该请求成功,然后才会向用户显示该效果。代码如下:
$scope.incrementUpvotes = function(post) {
posts.upvote(post);
};
o.upvote = function(post) {
return $http.put('/posts/' + post.id + '/upvote.json')
.success(function(data){
post.upvotes += 1;
});
};
这样做的缺点是,如果您的互联网速度较慢,可能会有延迟,这将是一个糟糕的用户体验。
我看到的两个选项是向用户显示加载符号,直到成功为止。在后台同步发生在后台时立即显示upvote的效果。这种情况的危险在于,如果请求失败,则客户端和服务器之间的数据将不同步。
我也看到有些人使用如下的ajax队列:
Add queueing to angulars $http service
编辑实际问题:
在开发和用户体验方面,最佳做法是什么?大多数人做了什么,是否有任何我应该注意的利弊?
答案 0 :(得分:0)
在我的一些项目中,我已经做了这个以获得理想的快速用户体验。我已经使用了你的两个例子,但是如果我使用你的第二个例子,我会包含一个错误捕获来重新同步后端和前端,通知用户错误。例如:
o.upvote = function(post) {
post.upvotes += 1;
return $http.put('/posts/' + post.id + '/upvote.json')
.success(function(data){
// don't have to do anything here
})
.catch(function(err){
post.upvotes -= 1;
// inform the user of the error
});
};
我的一般经验法则是,如果交互非常重要,则使用第一个选项,或者操作是进一步操作的先决条件。我将第二个选项用于用户期望快速无缝工作的独立事件。