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

时间:2013-05-29 15:24:22

标签: service angularjs controller

我正在尝试创建一个在执行控制器之前运行的Angular服务。我知道我可以使用控制器的'resolve'属性,但这让我在所有控制器中重复这个。

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

由于

1 个答案:

答案 0 :(得分:1)

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

仅在加载服务时在范围内创建变量:

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放在您测试的控制器中,以查看服务是否已加载

相关问题