在我的应用程序中,href
由公共指令创建。在特定用例中,我需要在打开的特定href
指向的页面时显示通知。
为此,我将onClick
添加到a
代码。
<a create-link="nextDocument" data-ng-click="appendParamToHref($event)">
onClick
js函数:
$scope.appendParamToHref = function (event) {
event.currentTarget.href += '&appendedParam=true';
};
当新页面加载时,我在控制器中读取了新的参数appendedParam
,显示通知,一切正常。
问题:
由于新的参数 - appendedParam
已添加到网址,因此当用户导航到另一个网址时,它会存储在浏览器历史记录中。当用户返回存储appendedParam
的URL时,会再次显示通知。这不是预期的行为。
我可以使用哪种替代方法来避免这种情况?
答案 0 :(得分:1)
您需要处理PopUp触发器,而不是通过添加URL参数来避免您的问题。相反,你可以使用$rootScope
并以这种方式处理你的PopUp事件:
<a create-link="nextDocument" data-ng-click="setPopup('popUpType')">Some link</a>
$scope.setPopup = function (nameOfPopUp) {
$rootScope.popUpToOpen = nameOfPopUp;
};
在路由更改后调用$stateChangeSucess
侦听器路线改变后,您可以检查之前是否设置了要打开的PopUp。它将打开一次并通过简单的触发重置处理自动重置。
$rootScope.$on("$stateChangeSuccess", function (event, toState, toParams, fromState, fromParams) {
if (angular.isDefined($rootScope.popUpToOpen) && $rootScope.popUpToOpen !== null) {
switch ($rootScope.popUpToOpen) {
case 'popUpType':
//open popup logic here
break;
}
//unset popup after it was displayed once
$rootScope.popUpToOpen = null;
}
});
答案 1 :(得分:0)
我想到了解决方案。
解决方案1:
在某些timeout
之后显示通知消息。这会欺骗href
执行1st,然后显示通知。
<a create-link="nextDocument" data-ng-click="showNotification()"></a>
JS代码:
$scope.showNotification = function () {
$timeout(function () {
//show notification code here.
}, 1000);
};
解决方案2:
使用我服务中的自定义flag
变量。
<a create-link="nextDocument" data-ng-click="showNotificationUsingService()"></a>
JS代码:
$scope.showNotificationUsingService= function () {
myService.showNotification = true;
};
在控制器中:
if (myService.showNotification) {
//code to show notification.
myService.showNotification = false;
}