【问题标题】:Ui-router State Change: Keep Controller and Scope but Destroy DOMui-router 状态变化:保留 Controller 和 Scope 但销毁 DOM
【发布时间】:2017-03-29 06:23:01
【问题描述】:

我正在使用 ui-router 1.0.0-beta.3,角度 1.5。到目前为止,ui-router 很棒!

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

我想保留范围变量,因为在我的应用程序中,用户可能会切换一些按钮、输入日期等,然后可能会切换到另一个状态,做某事,然后切换回来,但现在他们所有的部分工作是走了。我还希望能够为“非活动”状态销毁 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

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

【问题讨论】:

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


    【解决方案1】:

    在阅读了作者的打字稿源代码(很高兴,写得很好)后来自:

    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/angular-ui-router@1.0.0-beta.3/release/angular-ui-router.js

    我的方法是:因为 1.0.0-beta.3 似乎没有 onCreate 转换钩子,所以我会装饰 $transitions.create 函数本身。为此,我需要在装饰中注入大量辅助函数和粘性状态的核心功能。所以我让 StickyStatesUtil 提供者为我做这件事。

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

    由于其他几个人和我在同一个地方,我在 github 上提供了这段代码:

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

    【讨论】:

    • 感谢您将这些放在一起,这对我们这些被困在同一个地方的人来说非常有帮助。我想确认如何支持 deepRedirect。您可以使用点表示法而不是父字段来指定状态层次结构吗?此外,您可以传递 deepRedirect 一个对象而不是布尔值吗,如此处所述?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多