添加可能存在或不存在的AngularJS资源

时间:2013-11-12 23:12:52

标签: javascript angularjs

使用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;
}

每个控制器都绑定到一个视图,可以按任何顺序调用。因此,当控制器被调用时,不能保证资源被加载,尽管可能是在事先调用另一个控制器的情况下。加载事件仅在应用程序首次加载时首次初始化服务时触发。

有更好的方法吗?

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

2 个答案:

答案 0 :(得分:2)

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

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

要加载初始资源,我们将调用资源“application”作为示例。然后,要加载下一部分,您可以执行以下操作:

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
});

答案 1 :(得分:0)

而不是这样做:

$scope.parent = null;

改为创建一个空数组(或对象取决于资源是什么)。

$scope.parent = [];

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