强制angularjs在“ back”上实例化控制器

最后发布: 2014-03-23 23:45:35


问题

当我告诉我的angularjs应用程序向后导航时

$window.history.back();

我看到以前的视图的控制器正在被重用。 有没有办法强迫angularjs实例化一个新的控制器?

我在页面上使用ngView元素,并使用模板填充它。 也许有一种方法可以指示路由器每次都应实例化一个新的控制器。

(为什么stackoverflow在我提交问题之前坚持要求更多的单词?....)

javascript angularjs
回答

我认为您应该研究$templateCache 我相信在许多情况下,Angular确实会在此事件上实例化“新”控制器,但是当您使用历史记录服务时,模板缓存会注入视图的数据/状态。

确实,这全都取决于范围...如果您的前进进度(应用交互)将状态和视图保持在同一范围内(作为其子级),则控制器将永远不会被破坏,但是,如果您离开范围,它应该清理。 (这实际上是javascript,而Angular用$scope包裹了该行为)。 $templateCache都将重建状态,包括视图分配的控制器中的数据模型。

您必须通过截取历史事件来解决此问题,在$ cacheFactory或$ templateCache中搜索与所讨论视图匹配的键/值对,然后运行:

$templateCache.remove('keystring');

在允许执行历史记录事件之前。 通过$cacheFactory ,您可以使用$templateCache.get()返回有关已缓存视图的信息。

退房: - http://docs.angularjs.org/api/ng/service/ $ cacheFactory