在Angular.JS中缓存DOM

Tho*_*low 16 angularjs

我在Angular.JS中使用路由器(正在使用内置的路由器,现在使用ui-route但解决方案都很好)来在控制/模板对之间切换.当在几个这样的页面之间来回切换时,每次设置DOM看起来很糟糕需要花费一秒钟.反正是有角度保持在DOM树周围而不是每次重新创建它.我想我只想隐藏/播下每个页面的位而不是每次都删除/重新创建它们.

欢迎任何建议!

Oli*_*ver 5

您必须编写自己的 ng-view 指令才能创建此类功能。

其背后的基本思想是:

在路由更改之前,您只需将其放入不可见的缓存 DIV 中,并取消注册范围侦听器,而不是销毁当前视图元素和范围。为元素提供一个数据属性,以便$$route.templateUrl能够将其取回。然后您从服务器获取下一个视图。

在路由更改之前,您检查缓存项是否存在,如果它在缓存 div 中,则从缓存中获取该元素,重新注册侦听器并将当前视图放入缓存中。

棘手的部分是不要把$scope事情搞砸。所以你可能需要一个构造函数和析构函数$scope来用于事件,也许还需要用于 $watchers。我不知道。

但说实话,如果你使用模板缓存并且仍然需要 1 秒左右的时间来渲染,那么你可能会遇到一些低效的$watch表达式,或者一个巨大的ng-repeat. 你应该考虑一些重构。