如何从AngularJS控制器内部更新路由?

时间:2012-08-04 07:31:39

标签: angularjs

我有一个AngularJS应用程序,我想加载一些控制器在启动时发现的插件。为了使插件工作,我已经从控制器向$routeProvider添加了一些路由,但似乎无法做到这一点。

现在我正在使用一个非常丑陋的黑客,如下所示:

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保持空白)。通过路径之间的跳转,路径得到正确解析,插件视图按原样加载。

有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

您可以从源代码中删除$ routeProvider并制作自己的版本? :-)

$ routeProvider只是为您量身定制的提供商。 https://github.com/angular/angular.js/blob/master/src/ng/route.js

答案 1 :(得分:0)

我们最终做到这一点的方法是在我们启动AngularJS之前从服务中下载所有路由,然后使用该数据结构来设置路由,然后在获得信息后引导Angular,一切都是设置得当。

唯一的缺点是启动延迟,特别是如果您需要处理多个服务插件。