可以在定义路由之前填充$ templateCache吗?

CHS*_*CHS 5 angularjs angular-routing

我不想懒加载我的路线模板.相反,我想在执行任何路由之前将所有路由模板加载到$ templateCache中.

这就是我在做的事情:

angular.module('myApp', ['ngRoute']).config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider)
{
    $locationProvider.html5Mode(false);

    $routeProvider.when("/main", {templateUrl: "main", controller: "MainCtrl"})
                  .when("/login",{templateUrl: "login", controller: "LoginCtrl"});
}])
.run(['$location','$templateCache', function ($location, $templateCache)
{
   //...Save templates in $templateCache
   $location.path("/login");
}]);
Run Code Online (Sandbox Code Playgroud)

如果您浏览到/,则此工作正常,因为它与任何路径都不匹配.但是如果你浏览或刷新/#/login它似乎路由服务试图在我的运行块运行之前加载模板并向服务器发出请求.

无论如何要确保填充$ templateCache的代码将在路由服务寻找模板之前执行?

Tad*_*cik 3

如果你使用 grunt,我强烈推荐grunt-angular-templates用于此目的,但如果你不这样做并且想要手动创建单独的模块,其中你的逻辑与现在的逻辑类似,大致如下:

angular.module('myapp.templates').run(['$templateCache', function($templateCache) {
$templateCache.put(...
Run Code Online (Sandbox Code Playgroud)

然后简单地引用该模块作为您的应用程序依赖项。在路由逻辑启动之前,依赖模块的运行块将首先运行,这就是您想要的。