AngularJS在保存时显示中间页面

AngularJS在保存时显示中间页面,angularjs,Angularjs,当使用我的AngularJS应用程序保存新发票时,API检查产品余额、保存数据等时需要花费大量时间,因此我想知道AngularJS中是否有一种方法可以像中间人一样显示(页面…示例:#/processing)用户单击保存按钮后,将用户路由到的位置,然后根据保存新发票$http结果(失败或成功),将用户路由回发票页面(例如#/new invoice)或成功保存页面(感谢订购) 任何例子都值得高度赞赏。谢谢我正在使用spinner做这些事情。。。http请求时启动微调器,响应时停止微调器。使用http

当使用我的AngularJS应用程序保存新发票时,API检查产品余额、保存数据等时需要花费大量时间,因此我想知道AngularJS中是否有一种方法可以像中间人一样显示(页面…示例:#/processing)用户单击
保存
按钮后,将用户路由到的位置,然后根据保存新发票$http结果(失败或成功),将用户路由回发票页面(例如#/new invoice)或成功保存页面(感谢订购)


任何例子都值得高度赞赏。谢谢

我正在使用spinner做这些事情。。。http请求时启动微调器,响应时停止微调器。使用http拦截器进行相同的操作。如果你不想自己实现它,下面有几个链接


另外,请阅读这篇文章,其中详细介绍了微调器的工作原理。

我正在使用微调器进行此类操作。。。http请求时启动微调器,响应时停止微调器。使用http拦截器进行相同的操作。如果你不想自己实现它,下面有几个链接


另外,请阅读本手册,其中详细介绍了微调器的工作原理。

您可以使用
ng if
在输入和保存状态之间切换

模板示例:

<div ng-if="isSaving"><img src="spinner.gif"> Saving...</div>
<form ng-if="!isSaving" ng-submit="saveTheThing(thing)>
   <input ng-model="thing.title" type="text"/>
   ...
</form>

如果您需要IE8支持,您需要将
.catch
替换为
['catch']
.finally
替换为
['finally']

您可以使用
ng If
在输入和保存状态之间切换

模板示例:

<div ng-if="isSaving"><img src="spinner.gif"> Saving...</div>
<form ng-if="!isSaving" ng-submit="saveTheThing(thing)>
   <input ng-model="thing.title" type="text"/>
   ...
</form>

如果您需要IE8支持,您需要将
.catch
替换为
['catch']
.finally
替换为
['finally']

,尽管我不会为处理页面使用独立的url/路由。 您可以将保存承诺存储在服务中

angular.module('app').value('progress', {});

angular.module('app').controller('FormCtrl', function ($scope, progress, $location) {

  $scope.saveTheThing = function(thing) {
    progress.thing = $http.post('api/things', thing);
    $location.path('/processing');
  });
});

angular.module('app').controller('ProgressingCtrl', function (progress, $location) {
   progress.thing.then(function () {
     $location.path('/thank-you');
   }, function (error) {
     $location.path('/form');
   });
});
ng if
解决方案相比,您现在需要更多的工作来:

  • 失败时恢复表单值
  • 将错误消息传递给FormCtrl
  • 定义正在进行的页面的刷新行为

尽管我不会为处理页面使用独立的url/路由。 您可以将保存承诺存储在服务中

angular.module('app').value('progress', {});

angular.module('app').controller('FormCtrl', function ($scope, progress, $location) {

  $scope.saveTheThing = function(thing) {
    progress.thing = $http.post('api/things', thing);
    $location.path('/processing');
  });
});

angular.module('app').controller('ProgressingCtrl', function (progress, $location) {
   progress.thing.then(function () {
     $location.path('/thank-you');
   }, function (error) {
     $location.path('/form');
   });
});
ng if
解决方案相比,您现在需要更多的工作来:

  • 失败时恢复表单值
  • 将错误消息传递给FormCtrl
  • 定义正在进行的页面的刷新行为

感谢您的帮助,但我正在查看更多有关发送到其他页面的信息…例如,当单击“提交从#/新发票>>到#/处理”的发送路径时,如果成功,请转到#/感谢订单或#/新发票以防出错。您的解决方案是在同一页上显示微调器。谢谢您的帮助,但我正在研究如何将其路由到另一页…例如,当单击“提交路由从#/new invoice>>到#/processing”时,如果成功,请转到#/Thank for order或#/new invoice以防出错。您的解决方案是在同一页面上显示微调器HMMM,因此您认为最好的方法是将微调器显示为(模式),以防止用户在处理表单时与表单交互,然后决定显示错误或成功消息?我认为最好使用一个url/控制器。基于$scope.isSaving的页面外观完全取决于您。结合ng include,很容易在另一个模板中显示正在进行的html。Hmmm,因此您认为最好的方法是将微调器显示为(模态),以防止用户在处理时与表单交互,然后决定显示错误或成功消息?我相信最好使用一个url/控制器。基于$scope.isSaving的页面外观完全取决于您。与ng include结合使用,可以很容易地在另一个模板中使用html。