2014-02-16 2 views
12

Есть ли способ тихо изменить маршрут в строке url с помощью углового?

Пользователь нажимает ссылку на адрес электронной почты, который идет:

/verificationExecuted?verificationCode=xxxxxx 

При загрузке страницы я хочу прочитать verificationCode, а затем очистить его:

if($location.path() == '/verificationExecuted'){ 
    this.registrationCode = this.$location.search()["verificationCode"]; 
    this.$location.search("verificationCode", null); //Uncomment but make this silent! 

    if(registrationCode != null) { 
     .... 
    } 
    else $location.path("/404");  
} 

Что происходит, когда я очищаю это оставшаяся часть маршрута («/ verificationExecuted») остается, но повторяет триггеры маршрута, поэтому он снова появляется без кода подтверждения и переходит прямо к 404.

Я хочу удалить код, не делая ничего другого.

ответ

23

Вы всегда можете установить опцию reloadOnSearch на вашем пути, чтобы быть false.

Это предотвратит маршрут от перегрузки, если только строка запроса изменяется:

$routeProvider.when("/path/to/my/route",{ 
    controller: 'MyController', 
    templateUrl: '/path/to/template.html', 
    //Secret Sauce 
    reloadOnSearch: false 
}); 
0

У меня было аналогичное требование для одного из моих проектов.

То, что я сделал в таком случае, было использовать сервис.

app.factory('queryData', function() { 
    var data; 

    return { 
     get: function() { 
      return data; 
     }, 
     set: function (newData) { 
      data = newData 
     } 
    }; 
}); 

Эта услуга была затем использована в мой контроллер, как:

app.controller('TestCtrl', ['$scope', '$location', 'queryData', 
    function ($scope, $location, queryData) { 
     var queryParam = $location.search()['myParam']; 
     if (queryParam) { 
      //Store it 
      queryData.set(queryParam); 
      //Reload same page without query argument 
      $location.path('/same/path/without/argument'); 
     } else { 
      //Use the service 
      queryParam = queryData.get(); 
      if (queryParam) { 
       //Reset it so that the next cycle works correctly 
       queryData.set(); 
      } 
      else { 
       //404 - nobody seems to have the query 
       $location.path('/404'); 
      } 
     } 
    } 
]); 
6

попробуйте thi s

$location.url($location.path()) 

См documentation для более подробной информации о местоположении $

+0

Это перезагрузит маршрут – WrksOnMyMachine

Смежные вопросы