AngularJS - 延迟加载视图

时间:2013-09-06 18:00:51

标签: javascript html angularjs

我正在创建一个单页主页,并且希望通过延迟加载低于当前可见内容的视图来减少初始页面加载时间并节省用户带宽。主页将相当长,具有导航,标题,多个内容部分和页脚。我的目标是首先使用导航和粘性页脚以及“root”角度应用程序加载静态布局容器。滚动或单击导航链接将导致下一个可查看视图加载(单击跳过多个视图的导航链接应加载用户将跳过的所有视图)。我知道这个任务有一个jQuery lib,但我想坚持使用Angular。

是否有一种简单的方法可以在Angular中以这种方式有条件地加载视图?

1 个答案:

答案 0 :(得分:3)

这就是我想出的,就像一个简单的例子。有很多方法可以实现这一目标。如果您想要更精细的调整,您甚至可以编写自己的指令而不是使用ng-include/ng-repeat

Live demo here 嗯,plnkr现在有一些问题。如果页面甚至会加载,似乎有时很难找到模板(请参阅控制台日志..它正在尝试加载它们,因此代码工作正常)。 Here's a jsbin demo also,但模板只会加载任何内容(空)。

<div ng-repeat="lazy in loaded">
  {{lazy}}
  <div ng-include="lazy"></div>
</div>
<button ng-click="loadNext()">Load Next</button>
<button ng-click="unload()">Reset</button>



var app = angular.module('myApp', []);

app.controller('myCtrl', function($scope) {
  var toLoad = [ //list the templates to be loaded
    'tmpl.html',
    'tmpl2.html',
    'tmpl3.html'
  ];
  $scope.loaded = []; //anything in here will be loaded to the page
  $scope.loadNext = function() {
    if (toLoad.length) { //if there are any item left to load
      $scope.loaded.push(toLoad.splice(0, 1)[0]); //move first item to "loaded"
    }
  };
  $scope.unload = function() {
    toLoad = $scope.loaded.splice(0, $scope.loaded.length); //move all items back to "toLoad"
  };
});