我有一個AngularJS應用程序,它通過AJAX從PHP獲取數據,並允許用戶通過幾個步驟對其進行編輯。該應用程序的推遲控制器渲染
結構非常簡單:
我這是從ng-controller
指令裝載到主控制器。
<div ng-controller="MainCtrl">
<!-- All my app take place here, -->
<!-- so all my others controllers are in MainCtrl scope -->
<div ng-view></div>
</div>
我有一個控制器通過編輯步驟(例如一般信息,計劃,驗證等)。每個控制器由$routeProvider
加載(在MainCtrl範圍內)。
我的問題是當我加載(或刷新)的頁面,MainCtrl
作出AJAX請求檢索數據進行編輯。連接到$routeProvider
的控制器在AJAX請求完成之前加載,因此我無法使用由MainCtrl
獲取的數據。
我想推遲$ routeProvider加載路由,而AJAX請求沒有結束。我想我必須使用$q
提供程序,但我無法阻止路由加載。
我曾經嘗試這樣做(在MainCtrl
)和控制器仍然呈現過早:
$scope.$on('$routeChangeStart', function(event, current, previous) {
$scope.pathLoaded.promise.then(function() {
// Data loaded => render controller
return true;
});
// Stop controller rendering
return false;
});
和AJAX調用是這樣定義的:
$scope.pathLoaded = $q.defer();
// Edit existing path
$http.get(Routing.generate('innova_path_get_path', {id: EditorApp.pathId}))
.success(function (data) {
$scope.path = data;
$scope.pathLoaded.resolve();
})
.error(function(data, status) {
// TODO
});
所以,問題是:這是好的如何實現這一目標?如果是的話,我如何推遲控制器渲染?
感謝您的幫助。