1

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

有没有更好的方法来做到这一点?

4

2 回答 2

0

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

$routeProvider 只是为您制作的提供程序。https://github.com/angular/angular.js/blob/master/src/ng/route.js

于 2012-08-06T23:09:38.367 回答
0

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

唯一的缺点是启动延迟,尤其是当您需要处理多个服务插件时。

于 2014-03-12T03:20:41.380 回答