由于URL历史记录中的参数,请避免重新触发函数

时间:2017-03-06 07:07:20

标签: javascript angularjs

在我的应用程序中,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时,会再次显示通知。这不是预期的行为。

我可以使用哪种替代方法来避免这种情况?

2 个答案:

答案 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;
};
在路由更改后调用

ui-router $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;
}