javascript – ng-view创建多个控制器/范围

我不知道如何解决这个当前的问题.我在页面上有5个标签.每个选项卡通过路由和ng-view加载新页面和控制器.我在每个选项卡上都有一个$locationChangeStart来完成一些功能,然后再转到下一个选项卡.但是,如果用户返回上一个选项卡,那么我们会遇到一些问题.在完成它们对标签的操作并切换到另一个之后,$locationChangeStart函数将被多次触发,似乎正在从原始选项卡的每个标签切换创建一个新控制器.

所以:

>当前标签= A.
>切换到新标签(B)
> $locationChangeStart按预期触发
>切换回标签A.
> $locationChangeStart再次触发标签A(因为我不在该页面上,所以不会预期,但没关系)
>切换到新标签(C)
> 2 $locationChangeStart fire.一个具有新范围,另一个具有原始范围,当第一次访问该选项卡

当从标签A切换到a时,此过程将发生无限次,每次呼叫数量增加1.

plunker:working demo

index.html的:

标签1:

标签2:

主页js:

angular.module('app',[]).config(['$routeProvider','$locationProvider',function ($routeProvider,$locationProvider) {
  $routeProvider.when('',{
      templateUrl: "Information.html",controller: visitController
  }).when('/Information',controller: visitController
  }).when('/Fingerprint',{
      templateUrl: "Fingerprint.html",controller: visitController
  })

  $routeProvider
    .otherwise('/Information',{
      redirectTo: "Information.html"
    });
  }
]);

function visitController($scope,$http,$window,$route,$rootScope) {

}

标签1 JS

function InformationController($scope,$rootScope) {
  $scope.activated = 0;
  $rootScope.$on('$locationChangeStart',function (event) {
      $scope.activated++;
      alert($scope.activated);
  });
}
最佳答案
那是因为你将事件监听器附加到$rootScope而不是$scope.

每次加载InformationController时,都会将新的$locationChangeStart事件侦听器附加到$rootScope.

当您在标签之间切换时,$rootScope不会重新加载,它会保持不变,所以您每次都要继续添加相同的事件监听器.在第五次切换到“信息”选项卡后,您可以自己组建五个听众并进行聆听.

而不是$rootScope,使用$scope,当路由更改时会损坏$,因此,将清除您以前的侦听器.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


kindeditor4.x代码高亮功能默认使用的是prettify插件,prettify是Google提供的一款源代码语法高亮着色器,它提供一种简单的形式来着色HTML页面上的程序代码,实现方式如下: 首先在编辑器里面插入javascript代码: 确定后会在编辑器插入这样的代码: <pre
这一篇我将介绍如何让kindeditor4.x整合SyntaxHighlighter代码高亮,因为SyntaxHighlighter的应用非常广泛,所以将kindeditor默认的prettify替换为SyntaxHighlighter代码高亮插件 上一篇“让kindeditor显示高亮代码”中已经
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小
JS怎么获取当前时间戳
JS如何判断对象是否为数组
JS怎么获取图片当前宽高
JS对象如何转为json格式字符串
JS怎么获取图片原始宽高
怎么在click事件中调用多个js函数
js如何往数组中添加新元素
js如何拆分字符串
JS怎么对数组内元素进行求和
JS如何判断屏幕大小
js怎么解析json数据
js如何实时获取浏览器窗口大小
原生JS实现别踩白块小游戏(五)
原生JS实现别踩白块小游戏(一)