2012-08-04 26 views
1

我有一個AngularJS應用程序,我想在其中加載一些由控制器在啓動時發現的插件。爲了讓插件工作,我添加了一些路由到控制器的$routeProvider,但似乎沒有辦法做到這一點。如何從AngularJS控制器內部更新路線?

現在我使用的是非常醜陋的黑客如下:在該插件的路線

var routeProvider; 
angular.module('example', [], function($routeProvider) { 
    routeProvider = $routeProvider; 
    // Set up other routes 
} 

function Controller($http, $location, $timeout) { 
    // Use $http to find some plugin 
    routeProvider.when(plugin.url, plugin.options); 
    // Ugly hack so that the plugin appears if $location.path() already points to it 
    var path = $location.path(); 
    $location.path("/"); 
    $timeout(function() { $location.path(path); }, 10); 
} 

如果我不$timeout做廢話那麼如果我開始(加載頁)它將不會加載($route.current保持空白)。隨着路徑之間的跳轉,路由得到正確解決,並且插件視圖按照它應該加載的方式加載。

有沒有更好的方法來做到這一點?

回答

0

我們最終做到這一點的方式是在啓動AngularJS之前從服務中下載所有路由,然後使用該數據結構來設置路由,然後引導Angular,一旦我們獲得了信息並一切都設置正確。

這樣做的唯一缺點就是延遲啓動,特別是如果有多個服務插件需要處理。

相關問題