Angularjs 使用ng开关时如何防止控制器重新加载

Angularjs 使用ng开关时如何防止控制器重新加载,angularjs,ng-switch,Angularjs,Ng Switch,在本例中,使用ng switch,我能够在不同的视图之间切换。 每个视图都指定了一个控制器 我在这里在线发布了一个快速示例: 看起来每次我切换视图时控制器都会重新关联: 如果在输入字段中输入val,请转到主页并切换回设置,该值将丢失 我怎样才能防止这种情况? 基本上,我想要的是在视图之间切换时保持以前视图的状态。无法阻止现有的ngSwitch重新实例化控制器并重新创建新范围。如本文所述,该指令正在创建一个新的作用域,并实际创建/销毁相应的DOM元素 如果您的目标是保留状态,只需将其放入父作用域之

在本例中,使用ng switch,我能够在不同的视图之间切换。 每个视图都指定了一个控制器

我在这里在线发布了一个快速示例:

看起来每次我切换视图时控制器都会重新关联: 如果在输入字段中输入val,请转到主页并切换回设置,该值将丢失

我怎样才能防止这种情况?
基本上,我想要的是在视图之间切换时保持以前视图的状态。

无法阻止现有的
ngSwitch
重新实例化控制器并重新创建新范围。如本文所述,该指令正在创建一个新的作用域,并实际创建/销毁相应的DOM元素

如果您的目标是保留状态,只需将其放入父作用域之一,请检查以下JSFIDLE:


另一种方法是为共享模型使用服务。

如果您真的对维护它们的状态感兴趣,为什么不使用ng show和ng hide切换它们的可见性?您还可以使用自定义指令来模板/控制您的视图,这将允许在指令和它的主机页之间进行双向绑定,从而持久化数据。Thx blesh,这就是我要寻找的。另一个问题,当显示一个元素时,我是否可以听到一个事件?(然后在控制器上调用一个方法)嗯,我明白了。因此,我现在将使用blesh的ng show/ng hide解决方案,因为我希望避免每次都重新绘制屏幕。但是你的解决方案也很有效。是的,ng show/ng hide适用于屏幕的小部分。对于更大的DOM片段,最好使用ngSwitch(因为它添加/删除DOM元素,所以整个DOM树更轻)。这一切都取决于用例,但既然您已经询问了ngSwitch:-)是的,但是回到以前的状态可能会变得很难处理。有没有一种方法可以保留一个元素以前的作用域并重新注入它,而不是创建一个新的作用域?我的应用程序由几个选项卡和子选项卡组成,在服务中保存每个选项卡的状态似乎很难管理。在这种情况下,请将您的状态放在父作用域中,就像在响应所附的JSFIDLE中一样。这就像“维护国家”