gpt4 book ai didi

javascript - 更改 Angular $location.path 以响应推送服务

转载 作者:行者123 更新时间:2023-12-03 11:27:22 26 4
gpt4 key购买 nike

我目前正在制作一个 Angular/Ionic 应用程序,它需要更改 View 以响应来自 Google's Cloud Messaging Service 的推送通知。 。每个 View 都有其关联的 Controller 。

目前,我的代码设置如下:我有一个推送服务,它接收推送通知,并将根范围上的消息广播到任何感兴趣的 Controller :

self.onNotificationGCM = function(data){
switch(data.event){
case "cancelled":
$rootScope.$broadcast("orderCancellation", data.payload);
break;
case "completed":
$rootScope.$broadcast("orderCompleted", data.payload);
break;
default:
break;
}
}

在特定的 Controller 上,监听器可能如下所示:

$scope.$on("orderCompleted", function(event, data){
$location.path('completedOrder');
$rootScope.$apply();
}

问题是此代码在触发事件时会导致错误:

Cannot read property '$$nextSibling' of null

似乎监听器内位置的更改导致当前范围在阶段完成之前被破坏。有没有办法让它正常工作?

最佳答案

移动 $apply 来包装 $broadcast。通常最好 $apply 广播者,因为这样您就不需要在所有订阅者中 $apply 处理方法。此外,最好将应用的代码包装在 $apply 中,因为您可以受益于 Angular 的错误处理。

self.onNotificationGCM = function(data){
switch(data.event){
case "cancelled":
$rootScope.$apply(function() { // wrap in $apply
$rootScope.$broadcast("orderCancellation", data.payload);
});
break;
case "completed":
$rootScope.$apply(function() { // wrap in $apply
$rootScope.$broadcast("orderCompleted", data.payload);
});
break;
default:
break;
}
}

关于javascript - 更改 Angular $location.path 以响应推送服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26864597/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com