使用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;
}
每个控制器都绑定到一个视图,可以按任何顺序调用。因此,当控制器被调用时,不能保证资源被加载,尽管可能是在事先调用另一个控制器的情况下。加载事件仅在应用程序首次加载时首次初始化服务时触发。
有更好的方法吗?
这似乎有点多余&不干净。
答案 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