2

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

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

谢谢

4

1 回答 1

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您测试的控制器以查看服务已加载

于 2013-06-01T22:59:36.553 回答