2013-03-12 59 views
0

在Angular中,多個模型由資源服務填充後觸發代碼的最佳做法是什麼? Nest $ scope。$ watch?在Angular中加載多個資源後執行代碼

現在,我在作弊和檢查數組中的值,它並不感覺非常「有棱角」。

$scope.loaded = []; 
$scope.modelA = aResource.query({}, function() {$scope.loaded.push('a')}); 
$scope.modelB = bResource.query({}, function() {$scope.loaded.push('b')}); 

$scope.$watch(loaded.length, function(newValue) { 
    if ($scope.loaded.indexOf(modelA) != -1 && $scope.loaded.indexOf(modelB) != -1) { 
     console.log('done!'); 
    } 
}); 

https://groups.google.com/forum/?fromgroups=#!topic/angular/TizlifUL7FU

回答

2

如果您正在使用角路由,這通常與when()方法的resolve參數來實現的。另請參閱Delaying AngularJS route change until model loaded to prevent flicker

如果您不想在加載數據之前延遲路由更改,則可以使用$ q設置您自己的承諾。使用$ q.all()等待所有的承諾解決。請參閱https://stackoverflow.com/a/15117739/215945https://stackoverflow.com/a/14545803/215945

+0

謝謝。我還沒有嘗試過Angular的承諾。 – ehfeng 2013-03-12 19:28:01