Service 如何在完成服务之前延迟控制器的执行

Service 如何在完成服务之前延迟控制器的执行,service,angularjs,controller,Service,Angularjs,Controller,我试图创建一个在控制器执行之前运行的角度服务。我知道我可以使用控制器的“resolve”属性,但这让我在所有控制器上都重复了这一点 那么,如何创建一个使用一些Ajax请求并让控制器等待其执行的服务呢 感谢不可能延迟控制器,但是,您可以确保在将服务传递给作用域之前加载该服务,或者在其更改时刷新作用域。有几种不同的方法可以做到这一点: 仅在加载服务时在作用域中创建变量: MyService.get({}, function(serv) { self.original = serv; $sco

我试图创建一个在控制器执行之前运行的角度服务。我知道我可以使用控制器的“resolve”属性,但这让我在所有控制器上都重复了这一点

那么,如何创建一个使用一些Ajax请求并让控制器等待其执行的服务呢


感谢

不可能延迟控制器,但是,您可以确保在将服务传递给作用域之前加载该服务,或者在其更改时刷新作用域。有几种不同的方法可以做到这一点:

仅在加载服务时在作用域中创建变量:

MyService.get({}, function(serv) {
  self.original = serv;
  $scope.serv = new MyService(self.original);
});
如果您使用的是
$http
,请等待成功将值传递给作用域

$http({method: 'GET', url: '/someUrl'}).
  success(function(data, status, headers, config) {
    // --- do your thing here ---
  }).
  error(function(data, status, headers, config) {

  });
使用
$watch
查看变量是否已更新:

scope.$watch('myVariableToWatch', function(value) {
   scope.myVariableToWatch = value;
})
最后,在加载服务之前,您还可以选择隐藏任何视图元素,因此HTML将:

<div ng-show="serviceDidLoad"> some content here </div>
这里有一些内容

$scope.serviceDidLoad=true
放在控制器中,测试服务是否已加载

非常感谢。这是一个很好的解释!