angularjs - Ui路由器状态变化: Keep Controller and Scope but Destroy DOM

标签 angularjs angular-ui-router angular-ui-router-extras

我正在使用 ui-router 1.0.0-beta.3, Angular 1.5。到目前为止,ui-router 非常棒!

我有一个根状态,到目前为止有一些子状态,但我注意到 sibling (同一根父级的子级)之间的切换会导致我转换/转到的状态的完全重新创建。

我想保留范围变量,因为在我的应用程序中,用户可以切换一些按钮,输入日期等,然后可能切换到另一个状态,做一些事情,然后切换回来,但现在他们所有的部分工作都是走了。我还希望能够为“非事件”状态销毁 DOM,因为在实践中,某些状态可能会变得相当大,或者用户可能会创建大量 DOM,所以我希望保持 DOM 尽可能轻对于某些州。

我知道 ui-router-extras 粘性状态功能正是这个!当我想销毁某些组件上的 DOM 时,我可以使用 $state.includes 函数来定位。但是,ui-router-extras 似乎不适用于 ui-router 1.0.0-beta.3。作者确实为较新的 ui-router 制作了一个端口,但发布版本是 typescript ,我不确定如何将其编译成单个 js 文件。请参阅:https://github.com/ui-router/sticky-states/issues/4

也许我需要一个不使用粘性状态的解决方案——有什么想法吗?我正在考虑使用服务来缓存范围值,并且确实阅读了一些其他对此影响的答案。这意味着,对于每个组件,我需要处理要缓存的范围值等。这绝对是可能的,但我想知道是否有人有关于 ui-router 的任何其他技术或知识,也许还有另一种方法完成我所追求的目标:在转换更改时缓存 Controller /范围。

最佳答案

阅读了作者的 typescript 源代码(这是一个令人愉快的、写得非常好的代码)后:

https://github.com/ui-router/sticky-states/blob/master/src/stickyStates.ts

我决定将其迁移到我自己的 JavaScript 服务中,这将与 ui.router 1.0.0-beta.3 兼容。顺便说一句,ui.router 1.0.0-beta.3 可在以下位置获取:

https://unpkg.com/[email protected]/release/angular-ui-router.js

我的方法是:因为 1.0.0-beta.3 似乎没有 onCreate 转换钩子(Hook),所以我会装饰 $transitions.create 函数本身。为此,我需要在装饰中注入(inject)大量辅助函数和粘性状态的核心功能。因此,我创建了 StickyStatesUtil 提供程序来为我执行此操作。

迁移由两部分组成:(1) 一个名为 Sticky-states-util 的模块,它创建 StickyStatesUtil 提供程序,以及用于检查状态/状态名称是否处于非事件状态的有用服务,以及一个 inactiveEvent,如果设置为一个值,将导致 $rootScope 广播非事件状态名称的 json 映射,以供应用程序中的任何内容使用。如果未设置,则跳过。 (2), Angular 应用程序中的实际配置 block 注入(inject) $provide 并使用它通过新的“create”函数来装饰 $transitions 服务。

由于其他几个人和我处于同一位置,我在 github 上提供了此代码:

https://github.com/dsills22/sticky-states-ui-router-1-js

关于angularjs - Ui路由器状态变化: Keep Controller and Scope but Destroy DOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42914806/

相关文章:

angularjs cordova base href

javascript - tomcat无法访问javascript文件夹

javascript - Angular-Bootstrap Datepicker - 在选择另一个日期时突出显示今天的日期

javascript - 使用 Angular UI Router 形成多个步骤

javascript - 在 AngularJS 路由中使用常量

javascript - UI Router 模板未注入(inject),但状态发生变化 Changes

javascript - 如何在 amcharts 中的日期之间应用日期过滤器

AngularJS:渲染后回调(渲染后使用 DOM)

javascript - Angular Ui-Router-Extras |试图实现粘性状态,但不起作用

css - 带有 $state.includes 的 ng-show 有闪烁/闪烁 - Angular ;用户界面路由器