0

使用 AngularJS 1.0.4

我们的 Angular 应用程序之一依赖于在加载其他任何内容之前加载的资源。我们从一个初始化的服务中做到这一点,app.run()然后广播一个事件,其他所有东西都在监听以开始加载。

在控制器中,我们还需要访问生成的资源。所以我在每一个中都有以下内容:

$scope.parent = null;

if(!svc.parent) {
  $scope.on('parentLoaded', function() {
    $scope.parent = svc.parent;
  });
} else {
  $scope.parent = svc.parent;
}

每个控制器都绑定到一个视图,并且可以按任何顺序调用。因此,不能保证在调用控制器时加载资源,尽管如果事先调用了另一个控制器,则可以。load 事件仅在应用程序首次加载时第一次初始化服务时触发。

有更好的方法吗?

这似乎有点多余且不干净。

4

2 回答 2

2

我只会使用一个承诺。你会有类似的东西:

var deferred = $q.defer();
$http.get('/application').then(function(res) {
    deferred.resolve(res);
});
function fetch() {
  return deffered.promise;
}

例如,要加载您的初始资源,我们将调用资源“应用程序”。然后,要加载下一部分,您可以执行以下操作:

application.fetch().then(function(svc) {
  //res is whatever is returned from our $http.get, earlier
  $scope.parent = svc.parent
  //do whatever required your resource here
});
于 2013-11-12T23:24:28.120 回答
0

而不是这样做:

$scope.parent = null;

而是创建一个空数组(或对象,具体取决于资源是什么)。

$scope.parent = [];

这样,角度对象观察者将对数组的变化做出反应。对于更高级的问题,可以在加载数据时使用 Promise

于 2013-11-12T23:19:07.453 回答