Подтвердить что ты не робот

AngularJS - Лучший способ обновить параметр $route

У меня есть несколько маршрутов, которые отличаются друг от друга, но содержат аналогичные параметры.
Пример:

when '/user/:accountId/charts/:chartType', controller:ChartsController
when '/manager/:accountId/charts/:chartType', controller:ChartsController
when '/whatever/pathy/paththingy/charts/:chartType', controller:ChartsController

Обратите внимание, что все три представления используют один и тот же контроллер диаграмм для управления представлением. Его довольно общий контроллер, но ему нужно переключаться между доступными диаграммами, сохраняя при этом остальную часть маршрута.
Пример: (ЭТО НЕ РАБОТАЕТ)

if my currrent url is '/user/001/charts/comparison'
Then I call something like:
$route.current.params.chartType = 'newChart';
$route.reload(); // or soemthing similar?
I want the url to become '/user/001/charts/newChart'

Кто-нибудь знает, как легко обновлять параметры маршрута без полного повторного набора или восстановления пути маршрута?

4b9b3361

Ответ 1

Если возможно, я рекомендовал бы вместо этого использовать ui-router. Он более мощный, чем ngRoute во многих аспектах.

По существу, этот модуль имеет концепцию более высокого уровня, называемую state, которая обертывает базовый маршрут, который защищает вас от прямой работы с более низким уровнем маршрута, таким как URL-адреса маршрута.

Для сравнения: В чем разница между angular -route и angular -ui-router?

С ui-router вы можете реализовать свой код следующим образом:

$stateProvider
  .state('user.chart', {
     url: '/user/:accountId/charts/:chartType',   
     controller: "ChartsController"   
  })
 .state('manager.chart', {
     url: '/manager/:accountId/charts/:chartType', 
     controller: "ChartsController"
  })
 .state('pathy.chart', {
     url: '/whatever/pathy/paththingy/charts/:chartType', 
     controller: "ChartsController"
  })

И вы можете просто использовать этот код для навигации между состояниями:

$state.go('user.chart',{chartType:'newChart'},{inherit:true});

Документация

Ответ 2

С angular 1.3 вы можете использовать $route.updateParams(newParams) для изменения параметров маршрута.

Вот цитата из angular docs...

$route.updateParams(newParams);

Вызывает службу $route для обновления текущего URL-адреса, заменяя текущие параметры маршрута на указанные в newParams. Предоставляемые имена свойств, соответствующие пути маршрута сегментные определения будут интерполированы в путь местоположения, в то время как остальные свойства будут обрабатываться как параметры запроса.

Ответ 4

Прочитайте документы angular $location.search()

Учитывая, что ваш url - запрос на получение, и имеет некоторые параметры

Вы можете получить параметры в своем URL-адресе, используя этот метод

/user/001/charts/?chartType=comparison

var searchObject = $location.search();
// => { chartType : 'comparison' }

Теперь измените значение chartType

$location.search('chartType', 'newChart');

Это изменит параметр в вашем URL-адресе на

/user/001/charts/?chartType=newChart