$locationChangeSuccess 触发四次

2023-12-29

我是 Angular Js 的新手。

我的申请流程如下:

1)我有一个视图控制器,其中每个视图控制器在面包屑工厂的帮助下设置面包屑数据。

2)面包屑工厂从视图控制器获取数据并将数据附加到 $location.$$state 对象。(存储在状态对象中的原因是如果按下后退按钮,视图控制器不会实例化,因此我可以引用面包屑的历史数据)下面是将数据附加到状态对象的代码:

var state = $location.state();
state.breadcrumb = breadcrumbData;
$location.replace().state(state);

3)我还在全局标题上创建了面包屑指令,它将在 $locationChangeSuccess 事件上显示面包屑。指令将从 $location.state() 获取数据;这是在工厂设定的。

我的问题是当位置更改时, $locationChangeSuccess 事件回调函数执行四次。

下面是我的指令代码:

angular.module('cw-ui')
    .directive('cwBreadcrumbs', function($location, Breadcrumbs, $rootScope) {
    return {
        restrict: 'E',
        replace: true,
        templateUrl: 'UI/Directives/breadcrumb',
        link: function($scope, element){
            //some code for element...

            $rootScope.$on('$locationChangeSuccess', function(event, url, oldUrl, state, oldState){

                // get data from history of location state    
                var data = $location.state();

                console.log(data);
            });
        }
    };
});

输出如下:

Object {}
Object {key: "Core/Views/dash:1", view: "Core/Views/dash", parameters: Array[0], breadcrumb: Array[2]}
Object {key: "Core/Views/dash:1", view: "Core/Views/dash", parameters: Array[0]}
Object {key: "Core/Views/dash:1", view: "Core/Views/dash", parameters: Array[0]}

面包屑:Array[2] 消失了 1 次、3 次和 4 次。我真的不知道是什么导致这个回调函数执行四次,而且我对问题一无所知,也不知道如何调试。请大家帮忙!


在我自己遇到这个问题之后,问题在于您正在使用根范围从指令中绑定 locationChangeSuccess 事件,该指令要么在单个页面上多次遇到,要么在您重新访问页面时多次遇到:

$rootScope.$on('$locationChangeSuccess', function(event, url, oldUrl, state, oldState){

由于您要绑定到 rootScope,并且 rootScope 不会超出范围,因此不会为您清除事件绑定。

在链接函数中,您应该为元素 $destroy 添加一个侦听器,并捕获原始绑定的返回值,以便稍后可以取消绑定它。

第一:捕获返回值:

var unbindChangeSuccess = $rootScope.$on('$locationChangeSuccess' ...

接下来,在 destroy 方法中取消绑定该值:

element.on('$destroy', function() {
    unbindChangeSuccess();
});

这应该可以解决对 locationChangeSuccess 的多次调用! :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

$locationChangeSuccess 触发四次 的相关文章

随机推荐

  • 如何找到实体框架的水晶报表?

    如何将 Crystal Reports 绑定到实体框架实体 我确实还没有找到解决方法 而且我还没有足够的积分来对现有问题进行投票 至于我 我阅读了下面的链接 http aspalliance com 2049 Use LINQ to Ret
  • 使用IoC时单元测试的策略应该是什么?

    在读完有关依赖注入和 IoC 的所有内容后 我决定尝试在我们的应用程序中使用 Windsor Container 它是一个 50K LOC 多层 Web 应用程序 所以我希望它不是一个矫枉过正的东西 我使用了一个简单的静态类来包装容器 并在
  • 修复我的网络活动指示器

    我的网络活动指示器有一个问题 有时它会在不应该显示的情况下继续显示 我为它编写了自己的管理器 并将其替换为使用NSAssert像这样的声明 void setNetworkActivityIndicatorVisible BOOL setVi
  • 如何在 Eclipse 中的 Android 库项目中引用外部 jar

    哦 安卓 我多么喜欢你的言辞 我有一个工作区 里面有一些项目 App1和App2是Android应用程序 Common是一个Android库项目 App1 和 App2 依赖于 Common 通过 Android 选项卡链接 Common
  • 更新命令行应用程序状态

    我有一个命令行应用程序 当前打印增加的百分比 1 2 3 4 输出是连续的 但我见过命令行工具显示更改 就好像它是内联更新一样 1 2 与第一个位置相同 3 与第一个位置相同 4 与第一个位置相同 我怎样才能做到这一点 我正在使用 Java
  • 将 3 列文件转换为矩阵格式

    我有一个如下例所示的文件格式 显示了 5 个人 包括他们自己 之间的关系 1 1 1 0 2 1 0 5 3 1 0 1 4 1 0 3 5 1 0 1 2 2 1 0 3 2 0 5 4 2 0 2 5 2 0 3 3 3 1 0 4 3
  • 静态属性和单例有什么区别?

    使用 C 实现的单例可能类似于 public class Singleton private static Singleton instance private Singleton public static Singleton Insta
  • 如何使用 NSUserDefaults 注册用户默认值而不覆盖现有值?

    我有一个 AppDelegate 类 void initialize我用来注册一些默认值的方法 这是我使用的代码 void initialize NSDictionary defaults NSDictionary dictionaryWi
  • 可移植的有符号/无符号字节转换,C++

    我正在使用有符号到无符号字节 int8 t 转换来打包字节 uint32 t uint8 t byte lt lt n 这可以在 Intel Linux 上使用 GCC 运行 对于其他平台 编译器 例如 PowerPC 是否可移植 有更好的
  • JavaFX:使用自定义节点作为 TreeView 的折叠/展开分支开关

    是否可以替换a的展开和折叠箭头TreeView与定制Node 形状 而不是image https stackoverflow com q 15521806 1725096 The fx shape箭头的 css 属性提供了基本的 SVG 形
  • 我如何 - 长轮询和调度程序?

    我正在尝试安排一个长轮询机制 我想知道是否可以利用调度程序来实现这一点 到目前为止 这就是我一直在想的 通过计时器进行调度 但仅在上一次迭代已经完成的情况下才将下一次迭代排入队列 当上一次迭代完成时 将下一次迭代排入队列 我一直在查看现有的
  • 检测图像中的图案并检索其位置

    我有一张 1920x1080 的图像 我需要获取图像中每个矩形的位置 最好为 2 个点 左上 右下 我对 Python 还很陌生 我想也许使用 opencv 模块 但如果你能给我一些指示 那将会非常有帮助 Thanks 我建议使用OpenC
  • 如何在不安装Python Egg文件的情况下直接运行它们?

    是否可以像使用 Java 运行 jar 文件一样直接运行 Python Egg 文件 例如 使用 Java 您可能会执行以下操作 java jar jar file A 蟒蛇蛋 http peak telecommunity com Dev
  • C# 按原始顺序获取 FieldInfos/PropertyInfos?

    如何按照它们在类中的排列顺序获取类型 FieldInfos PropertyInfos 作为 MemberInfo 数组 class Test public bool First get set public int Second publ
  • 如何使新的 numpy 数组与给定数组大小相同并用标量值填充它

    我有一个带有一些随机数的 numpy 数组 如何创建一个具有相同大小的新数组并用单个值填充它 我有以下代码 A np array 2 2 2 2 B np copy A B B fill 1 我想要一个与 A 大小相同但填充 1 的新数组
  • 在 Oracle 中通过 SELECT 查询声明变量并设置其值

    在 SQL Server 中我们可以使用这个 DECLARE variable INT SELECT variable mycolumn from myTable 我怎样才能在 Oracle 中做同样的事情 我目前正在尝试以下操作 DECL
  • 使用 bookworm 在 Docker 中为 PHP8.1 添加 Memcached 支持时出现问题

    我有一个Dockerfile依靠PHP 8 1 apache 运行了几个月 Once PHP 8 1 apache开始使用 Debian bookworm memcached 客户端在构建镜像时开始出错 The Dockerfile涉及的行
  • 如何制作八角形盒子?

    我想使用 CSS 创建下面给出的框 我进行了很多搜索并阅读了非常好的文章 例如https css tricks com examples ShapesOfCSS https css tricks com examples ShapesOfC
  • 表示连续概率分布

    我有一个涉及连续概率分布函数集合的问题 其中大部分是根据经验确定的 例如出发时间 过境时间 我需要的是某种方法来获取其中两个 PDF 并对它们进行算术运算 例如 如果我有两个值 x 取自 PDF X y 取自 PDF Y 我需要获取 x y
  • $locationChangeSuccess 触发四次

    我是 Angular Js 的新手 我的申请流程如下 1 我有一个视图控制器 其中每个视图控制器在面包屑工厂的帮助下设置面包屑数据 2 面包屑工厂从视图控制器获取数据并将数据附加到 location state 对象 存储在状态对象中的原因