В Angular, как найти маршрут, который "вызвал" контроллер изнутри контроллера?

83
8

Я знаю, что для двух или более маршрутов можно использовать один и тот же контроллер. Однако, у диспетчера, я хотел бы знать, какой маршрут "назвал" его. Зачем? Какой маршрут определит, будет ли я загружать список записей, загружать одну запись по ее идентификатору или вообще ничего не загружать.


У меня есть следующая конфигурация маршрута:


angular.module("app").config(function ($routeProvider) {

$routeProvider.when("/", {
templateUrl: "home.html"
}).when("/records", {
templateUrl: "records.html",
controller: "RecordsController"
}).when("/record/create", {
templateUrl: "editRecord.html",
controller: "RecordsController"
}).when("/template/edit/:id", {
templateUrl: "editRecord.html",
controller: "RecordsController"
}).otherwise({
redirectTo: "/"
});

});


Я хочу использовать только один контроллер, поэтому у меня есть один:


angular.module("app").controller("RecordsController", function($http, $routeParams){
/* I know that if $routeParams.id exists, it probably the
/record/edit/:id route. But if $routeParams.id is null/undefined,
I don't know which of /records or /record/create "called"
this controller. I would like to know which route so I can
decide to load a list (if /records) or not (for /record/create).
*/
});

Если есть какие-то трюки, чтобы вытащить из конфигурации маршрута, как с разрешения, как-то?

спросил(а) 2015-05-06T17:29:00+03:00 5 лет, 7 месяцев назад
1
Решение
58

Используйте $location.path()


из docs:


Служба $location анализирует URL-адрес в адресной строке браузера (на основе на window.location) и делает URL доступным для вашего приложения.

...

Методы Getter и setter


// get the current path
$location.path();


Для использования в контроллере

angular.module("app").controller("RecordsController", function($http, $routeParams, $location){
var path = $location.path();
// Do something with `path` ...

});


Demo


http://plnkr.co/edit/SoRmRFl7gJMxmJ9bXzgS?p=preview

ответил(а) 2015-05-06T17:39:00+03:00 5 лет, 7 месяцев назад
59

импортировать $locationProvider и выполнить проверку в вашем контроллере для $location.path()

if ($ location.path() == '/record ")


ответил(а) 2015-05-06T17:39:00+03:00 5 лет, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема