停止AngularJs创建新的controller/$scope缓存,并使用已缓存的缓存

Stop AngularJs from creating new controller/$scope cache and use cached one

本文关键字:缓存 scope 创建 AngularJs controller 停止      更新时间:2023-09-26

使用$routeProvider,每次用户点击链接时,都会生成一个新的$作用域。这意味着所有的数据都丢失了。我怎样才能让Angular使用相同的控制器/$作用域?

解释:

http://jsfiddle.net/mpKBh/1/(点击链接)

<a href='#'>First controller</a>
<a href='#/view'>Second controller</a>
$routeProvider.
  when('/', { template:"{{$id}}",controller: ContentListCtrl}).
  when('/view', {template:"{{$id}}",controller: ContentDetailCtrl}).

注。是否有可能知道哪个控制器当前处于活动状态?

在AngularJS中,$scope而不是表示保存在整个应用程序中持续存在的数据。为此,您需要使用一个被注入到两个控制器中的服务。如果你能提供更多关于你错过的数据的细节,我很乐意修改这个答案,包括一些更可行的东西。

在您的PS中:您可以注入$route服务来获取当前路由的信息;$route.current.controller属性将为您提供当前路由的构造函数

对于那些研究如何在AngularJS中"解绑定"的人来说,他是一个小信息(与上面OP的最后一条评论有关)

当视图被销毁时,它基本上是标记为用于垃圾收集-但它仍然存在。这就是为什么当滚动发生时您会收到多个请求-因为它仍在侦听事件。

因此,处理这个问题最简单的方法(我已经找到了,尽管我想学习其他方法)是监听$destroy事件并对其作出反应。

你可以通过保留$on方法返回的引用来"解绑定/取消监听"事件。下面是一个来自控制器的例子:

$scope.systemListener = $rootScope.$on("someEventYouListenTo", function (event, data) {
  console.log('Event received by ' + $scope.name);
});
$scope.$on('$destroy', function () {
    // Remove the listener
    $scope.systemListener();
});

现在那些旧的作用域/视图将不再对事件作出反应。

希望这对某人有所帮助!