我正在使用 Angular.JS 中的路由器(使用内置路由器,现在使用 ui-route 但两者的解决方案都很好)在控件/模板对之间切换。在这些页面之间来回切换时,每次设置 DOM 最多需要一秒钟,这看起来很糟糕。无论如何,是否有 Angular 保持 DOM 树,而不是每次都重新创建它。我想我只想隐藏/播种每个页面的位,而不是每次都删除/重新创建它们。
欢迎任何建议!
最佳答案
您必须编写自己的 ng-view 指令来创建此类功能。
其背后的基本思想是:
在路由更改之前,您只需将其放入一个不可见的缓存 DIV 中,并取消注册范围监听器,而不是销毁当前的 View 元素和范围。使用 $$route.templateUrl
为元素赋予数据属性能够取回它。
然后从服务器获取下一个 View 。
在路由更改之前,您检查缓存项是否存在,如果它在您的缓存 div 中,则从缓存中获取元素,重新注册监听器并将当前 View 放入缓存。
棘手的部分是不要弄乱 $scope
起来。因此,您的 $scope
中可能需要一个构造函数和析构函数。为了这个事件,也许也为了 $watchers。我不知道。
但老实说,如果你使用模板缓存,仍然需要 1 秒左右的时间来渲染,那么你可能会有些低效 $watch
表情,还是巨大的ng-repeat
.你应该考虑一些refact。
关于angularjs - 在 Angular.JS 中缓存 DOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16695926/