预加载路由中使用的AngularJS部分?

时间:2013-12-27 21:51:05

标签: angularjs angularjs-routing

问题:预先加载路由模板中使用的.ng文件的最佳方式和最佳时间是什么?< / p>

到目前为止,我已经找到了以下答案:

  1. 使用Angular的脚本指令。 问题:我的内容无法作为文字字符串加载,但需要从服务器获取。换句话说,我有一个.ng文件作为我的部分所以我不能做

    我的内容必须保留在服务器上的.ng文件中并被提取
  2. 使用$ templateCache.put将模板文字放入缓存中。与上述问题相同。

  3. 使用$ http加载.ng文件。这是因为它不是一个字符串文字,但我很难找到执行此操作的最佳时间,以便它不会阻塞(实现其异步但仍然)

  4. 为了避免建议我已经看过的资源,我已经阅读了以下内容: Is there a way to make AngularJS load partials in the beginning and not at when needed?

    https://groups.google.com/forum/#!topic/angular/6aW6gWlsCjU

    https://groups.google.com/forum/#!topic/angular/okG3LFcLkd0

    https://medium.com/p/f8ae57e2cec3

    http://comments.gmane.org/gmane.comp.lang.javascript.angularjs/15975

1 个答案:

答案 0 :(得分:1)

也许使用2和3的组合。

就像你说的那样,$ http是异步的,所以为什么不在应用加载后将每个部分放入templateCache。

例如:

var myApp = angular.module('myApp', []);
myApp.run(function($http, $templateCache) {
  var templates = ['template1.ng', 'template2.ng'];

  angular.forEach(templates, function(templateUrl) {
    $http({method: 'GET', url: templateUrl}).success(function(data) {
      $templateCache.put(templateUrl, data);
    });
  });
});

我从来没有这个需要,并且肯定没有测试过,但想法就在那里。